db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matthew Adams <matt...@matthewadams.org>
Subject Dynamic fetch plans/groups for post-2.1 JDO?
Date Wed, 05 Mar 2008 20:06:05 GMT
What do you think of the following?  More for discussion than a proposal just yet.

Section 12.7.6 states "Fetch groups are only defined in the metadata for a class or interface."
 It might be convenient for users or tools to be able to dynamically modify the FetchPlan
or define fetch groups, possibly based on a runtime analysis of usage.  Another possible use
would be to allow aspects to be applied to service-level components to dynamically modify
the FetchPlan or define fetch groups.

Add a new interface FetchGroup:

public interface FetchGroup {
  String getName();
  boolean getPostLoad();
  Map<String,Integer> getFieldRecursionDepths(); // key is field expression, value is
recursion depth
  Map<String,Integer> getPropertyRecursionDepths();  // key is property expression,
value is recursion depth
  // Add mutators also?  See possible method additions to FetchPlan or PersistenceManager
interface below
  void setName(String name);
  void setPostLoad(boolean postLoad);
  void add{Field|Property}(Class clazz, String {field|property}Expression[, int recursionDepth]);
  void add{Fields|Properties}(Class clazz, Map<String,Integer> {field|property}RecursionDepths);

Possible method additions to the FetchPlan or PersistenceManager interface:

FetchGroup newFetchGroup(); // creates an empty fetch group if mutating methods allowed on
FetchGroup newFetchGroup(Map<String,Integer> fieldRecursionDepths, Map<String,Integer>
propertyRecursionDepths, String name, boolean postLoad);

// plus various convenience methods based on above

Possible method additions to FetchPlan interface, all of which add anonymous fetch groups
to the FetchPlan on which they're called:

FetchPlan addField(Class clazz, String fieldExpression); // defaults recursionDepth to 1

FetchPlan addField(Class clazz, String fieldExpression, int recursionDepth);

FetchPlan addFields(Class clazz, Map<String,Integer> fieldRecursionDepths);

FetchPlan addProperty(Class clazz, String propertyExpression); // defaults recursionDepth
to 1

FetchPlan addProperty(Class clazz, String propertyExpression, int recursionDepth);

FetchPlan addProperties(Class clazz, Map<String,Integer> propertyRecursionDepths);
FetchPlan addFetchGroups(FetchGroup... fetchGroups);

FetchPlan addClasses(Class... classes); // convenience method that
would add all fields/properties of the given class at a recursion depth
of 0 or 1 (TBD)

// include * remove*(..) methods?

Collection<FetchGroup> getFetchGroups();

View raw message