db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andy Jefferson <a...@jpox.org>
Subject JDO2.1/2.2 Proposal : Dynamic Fetch Groups
Date Tue, 13 Nov 2007 10:32:47 GMT
Below is a proposal that could possibly be included in a JDO2.2 (or in JDO2.1 
if feedback is positive for that, and JPOX already implements it).

========================================
Problem : fetch groups are static, defined in metadata (XML/annotations).  
Sometimes it would be more convenient to be able to define fetch groups  
dynamically, for example based on user interaction in a web system.

========================================
Proposal :
We add a new interface defining a FetchGroup, where a FetchGroup has a  
symbolic name and is for a class defining the fields of that class that are  
in the fetch group.

public interface FetchGroup
{
    String getName(); // Symbolic name (as also used in MetaData)
    String getClassName(); // Class to which this group refers
    FetchGroup add(String fieldName); // Add a field
    FetchGroup remove(String fieldName); // Remove a field

    boolean hasField(String fieldName);
    String[] getFieldNames();

    void setPostLoad(boolean postLoad);
    boolean getPostLoad();
}

We allow users to register/deregister their FetchGroups with the PMF

PersistenceManagerFactory
{
    ...
    void addFetchGroup(FetchGroup grp);
    void removeFetchGroup(String name, Class cls);
    FetchGroup createFetchGroup(String name, Class cls);
    FetchGroup getFetchGroup(String grpName, Class cls);
    FetchGroup[] getFetchGroups();
    void clearFetchGroups();
}

========================================
Usage:
FetchGroup grp1 = pmf.createFetchGroup("myGroup1", MyClass.class);
grp1.add("field1").add("field2").add("field4");
pmf.addFetchGroup(grp1); // FetchGroup registered

pm.getFetchPlan().setGroup("myGroup1"); // FetchGroup used in this plan
// FetchPlan now has MyClass {field1, field2, field4}

We can then also allow dynamic changes like
pmf.getFetchGroup("myGroup1", MyClass.class).add("field7");
and this is directly reflected in the FetchPlan



Possible changes:-
1. PMF has createFetchGroup and addFetchGroup and we could merge these so when 
creating a FetchGroup it is added
2. Doesnt support "recursion-depth" specification when adding a field to a 
FetchGroup, so we could add a method "add(String fieldName, int depth)"


-- 
Andy  (Java Persistent Objects - http://www.jpox.org)

Mime
View raw message