db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matthew Adams <matt...@matthewadams.org>
Subject Re: JDO2.1/2.2 Proposal : Dynamic Fetch Groups
Date Tue, 13 Nov 2007 20:47:12 GMT
You might also consider overloaded methods on interface FetchGroup,  
just for completeness:

// (importing java.lang.reflect.Field)

FetchGroup add(Field field);
FetchGroup remove(Field field);
boolean hasField(Field field); // or has(Field) -- I'd consider  
better verb
Field[] getFields();

The add & remove methods should throw if the Field isn't contained in  
the class.

-matthew

On Nov 13, 2007, at 2:32 AM, Andy Jefferson wrote:

> 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