org.apache.openjpa.kernel
Class FetchConfigurationImpl

java.lang.Object
  extended by org.apache.openjpa.kernel.FetchConfigurationImpl
All Implemented Interfaces:
Serializable, Cloneable, FetchConfiguration, LockLevels, LockScopes, QueryFlushModes
Direct Known Subclasses:
JDBCFetchConfigurationImpl

public class FetchConfigurationImpl
extends Object
implements FetchConfiguration, Cloneable

Allows configuration and optimization of how objects are loaded from the data store.

Since:
0.3.0
Author:
Abe White, Pinaki Poddar
See Also:
Serialized Form

Nested Class Summary
protected static class FetchConfigurationImpl.ConfigurationState
          Configurable state shared throughout a traversal chain.
 
Field Summary
 
Fields inherited from interface org.apache.openjpa.kernel.FetchConfiguration
DEFAULT, FETCH_LOAD, FETCH_NONE, FETCH_REF
 
Fields inherited from interface org.apache.openjpa.kernel.LockLevels
LOCK_NONE, LOCK_READ, LOCK_WRITE
 
Fields inherited from interface org.apache.openjpa.kernel.LockScopes
LOCKSCOPE_EXTENDED, LOCKSCOPE_NORMAL
 
Fields inherited from interface org.apache.openjpa.kernel.QueryFlushModes
FLUSH_FALSE, FLUSH_TRUE, FLUSH_WITH_CONNECTION
 
Constructor Summary
  FetchConfigurationImpl()
           
protected FetchConfigurationImpl(FetchConfigurationImpl.ConfigurationState state)
           
 
Method Summary
 FetchConfiguration addFetchGroup(String name)
          Adds group to the set of fetch group names to use when loading objects.
 FetchConfiguration addFetchGroups(Collection<String> groups)
          Adds groups to the set of fetch group names to use when loading objects.
 FetchConfiguration addField(String field)
          Adds field to the set of fully-qualified field names to use when loading objects.
 FetchConfiguration addFields(Collection<String> fields)
          Adds fields to the set of fully-qualified field names to use when loading objects.
 FetchConfiguration clearFetchGroups()
          Clears the set of fetch group names to use when loading data.
 FetchConfiguration clearFields()
          Clears the set of field names to use when loading data.
 Object clone()
          Clone this instance.
 void copy(FetchConfiguration fetch)
          Copy the state from the given fetch configuration to this one.
(package private)  void copyHints(FetchConfiguration fetch)
           
(package private)  int getAvailableFetchDepth()
           
(package private)  int getAvailableRecursionDepth()
           
 DataCacheRetrieveMode getCacheRetrieveMode()
          Gets the current retrieve mode for data cache.
 DataCacheStoreMode getCacheStoreMode()
          Gets the current storage mode for data cache.
 StoreContext getContext()
          Return the context associated with this configuration; may be null if it has not been set or this object has been serialized.
 boolean getExtendedPathLookup()
          Affirms if extended path lookup feature is active.
 int getFetchBatchSize()
          Return the fetch batch size for large result set support.
 Set<String> getFetchGroups()
          Returns immutable set of names of the fetch groups that this component will use when loading objects.
 Set<String> getFields()
          Returns the set of fully-qualified field names that this component will use when loading objects.
 int getFlushBeforeQueries()
          The query automatic flush configuration.
 Object getHint(String name)
          Get the hint value for the specific key as originally set by the caller, or null if the hint is not specified.
 Map<String,Object> getHints()
          Gets the current hints set on this receiver.
 int getLockScope()
          The lock scope for next fetch.
 int getLockTimeout()
          The number of milliseconds to wait for an object lock, or -1 for no limit.
 int getMaxFetchDepth()
          Return the maximum depth of fetched instance graph.
(package private)  FetchConfiguration getParent()
           
(package private)  List<FetchConfigurationImpl> getPath()
           
 boolean getQueryCacheEnabled()
          Return whether or not query caching is enabled.
 int getQueryTimeout()
          The number of milliseconds to wait for a query, or -1 for no limit.
 int getReadLockLevel()
          The lock level to use for locking loaded objects.
(package private)  FetchConfiguration getRoot()
           
 Set<Class<?>> getRootClasses()
          Root classes for recursive operations.
 Set<Object> getRootInstances()
          Root instances for recursive operations.
 Collection<String> getSupportedHints()
           
(package private)  String getTraversedFromField()
           
(package private)  Class<?> getTraversedFromType()
           
 int getWriteLockLevel()
          The lock level to use for locking dirtied objects.
 boolean hasFetchGroup(String group)
          Return true if the given fetch group has been added.
 boolean hasFetchGroupAll()
           
 boolean hasFetchGroupDefault()
           
 boolean hasField(String field)
          Return true if the given fully-qualified field has been added.
 boolean isHintSet(String key)
          Affirms if the given key is set as a hint.
(package private)  boolean isRoot()
           
 void lock()
          Synchronize on internal lock if multithreaded is true.
protected  FetchConfigurationImpl newInstance(FetchConfigurationImpl.ConfigurationState state)
          Return a new hollow instance.
 ResultList<?> newResultList(ResultObjectProvider rop)
          Return a new result list for the current fetch configuration.
protected static void populateHintSetter(Class<?> target, String hint, Class<?> type, String... prefixes)
          Populate static registry of hints.
protected static void populateHintSetter(Class<?> target, String method, String hint, Class<?> type, String... prefixes)
          Populate static registry of hints.
 FetchConfiguration removeFetchGroup(String group)
          Remove the given fetch group.
 FetchConfiguration removeFetchGroups(Collection<String> groups)
          Removes groups from the set of fetch group names to use when loading objects.
 FetchConfiguration removeField(String field)
          Remove the given fully-qualified field.
 FetchConfiguration removeFields(Collection<String> fields)
          Removes fields from the set of fully-qualified field names to use when loading objects.
 void removeHint(String... keys)
          Removes the given keys and their hint value.
 Object removeHint(String name)
           
 int requiresFetch(FieldMetaData fm)
          Affirms if the given field requires to be fetched in the context of current fetch operation.
 boolean requiresLoad()
          Return false if we know that the object being fetched with this configuration does not require a load, because this configuration came from a traversal of a FetchConfiguration.FETCH_REF field.
 FetchConfiguration resetFetchGroups()
          Resets the set of fetch groups to the list in the global configuration.
 void setCacheRetrieveMode(DataCacheRetrieveMode mode)
          Sets the current retrieve mode for data cache.
 void setCacheStoreMode(DataCacheStoreMode mode)
          Sets the current storage mode for data cache.
 void setContext(StoreContext ctx)
          Called automatically by the system to associate the fetch configuration with a context before use.
 FetchConfiguration setExtendedPathLookup(boolean flag)
          Sets extended path lookup feature.
 FetchConfiguration setFetchBatchSize(int fetchBatchSize)
          Set the fetch batch size for large result set support.
 FetchConfiguration setFlushBeforeQueries(int flush)
          The query automatic flush configuration.
 void setHint(String key, Object value)
          Same as setHint(key, value, value).
 void setHint(String key, Object value, Object original)
          Sets the hint to the given value.
 FetchConfiguration setLockScope(int scope)
          The lock scope for next fetch.
 FetchConfiguration setLockTimeout(int timeout)
          The number of milliseconds to wait for an object lock, or -1 for no limit.
 FetchConfiguration setMaxFetchDepth(int depth)
          Set the maximum depth of the fetched instance graph.
 FetchConfiguration setQueryCacheEnabled(boolean cache)
          Control whether or not query caching is enabled.
 FetchConfiguration setQueryTimeout(int timeout)
          The number of milliseconds to wait for a query, or -1 for no limit.
 FetchConfiguration setReadLockLevel(int level)
          The lock level to use for locking loaded objects.
 FetchConfiguration setRootClasses(Collection<Class<?>> classes)
          Root classes for recursive operations.
 FetchConfiguration setRootInstances(Collection<?> instances)
          Root instances for recursive operations.
 FetchConfiguration setWriteLockLevel(int level)
          The lock level to use for locking dirtied objects.
 String toString()
           
protected  String toString(Object o)
           
(package private)  List<FetchConfigurationImpl> trackPath(List<FetchConfigurationImpl> path)
           
 FetchConfiguration traverse(FieldMetaData fm)
          Traverse the given field to generate (possibly) a new configuration state.
 void unlock()
          Release internal lock if multithreaded is true.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

FetchConfigurationImpl

public FetchConfigurationImpl()

FetchConfigurationImpl

protected FetchConfigurationImpl(FetchConfigurationImpl.ConfigurationState state)
Method Detail

populateHintSetter

protected static void populateHintSetter(Class<?> target,
                                         String hint,
                                         Class<?> type,
                                         String... prefixes)
Populate static registry of hints.

Parameters:
target - The name of the target class that will receive this hint.
hint - the simple name of the hint without a prefix.
type - the value argument type of the target setter method.
prefixes - the prefixes will be added to the simple hint name.

populateHintSetter

protected static void populateHintSetter(Class<?> target,
                                         String method,
                                         String hint,
                                         Class<?> type,
                                         String... prefixes)
Populate static registry of hints.

Parameters:
target - The name of the target class that will receive this hint.
method - The name of the method in the target class that will receive this hint.
hint - the simple name of the hint without a prefix.
type - the value argument type of the target setter method.
prefixes - the prefixes will be added to the simple hint name.

getContext

public StoreContext getContext()
Description copied from interface: FetchConfiguration
Return the context associated with this configuration; may be null if it has not been set or this object has been serialized.

Specified by:
getContext in interface FetchConfiguration

setContext

public void setContext(StoreContext ctx)
Description copied from interface: FetchConfiguration
Called automatically by the system to associate the fetch configuration with a context before use. The fetch configuration properties should be synchronized with the context's configuration object. Subclasses for specific back ends cannot rely on the context's configuration implementing their back end's configuration sub-interface.

Specified by:
setContext in interface FetchConfiguration

clone

public Object clone()
Clone this instance.

Specified by:
clone in interface FetchConfiguration
Overrides:
clone in class Object

newInstance

protected FetchConfigurationImpl newInstance(FetchConfigurationImpl.ConfigurationState state)
Return a new hollow instance.


copy

public void copy(FetchConfiguration fetch)
Description copied from interface: FetchConfiguration
Copy the state from the given fetch configuration to this one.

Specified by:
copy in interface FetchConfiguration

copyHints

void copyHints(FetchConfiguration fetch)

getFetchBatchSize

public int getFetchBatchSize()
Description copied from interface: FetchConfiguration
Return the fetch batch size for large result set support. Defaults to the openjpa.FetchBatchSize setting. Note that this property will be ignored under some data stores.

Specified by:
getFetchBatchSize in interface FetchConfiguration

setFetchBatchSize

public FetchConfiguration setFetchBatchSize(int fetchBatchSize)
Description copied from interface: FetchConfiguration
Set the fetch batch size for large result set support. Defaults to the openjpa.FetchBatchSize setting. Note that this property will be ignored under some data stores.

Specified by:
setFetchBatchSize in interface FetchConfiguration

getMaxFetchDepth

public int getMaxFetchDepth()
Description copied from interface: FetchConfiguration
Return the maximum depth of fetched instance graph. Defaults to 1

Specified by:
getMaxFetchDepth in interface FetchConfiguration

setMaxFetchDepth

public FetchConfiguration setMaxFetchDepth(int depth)
Description copied from interface: FetchConfiguration
Set the maximum depth of the fetched instance graph.

Specified by:
setMaxFetchDepth in interface FetchConfiguration
Parameters:
depth - denotes limiting length of traversal path from a root instance. -1 implies no limit. 0 is not permissible.

getQueryCacheEnabled

public boolean getQueryCacheEnabled()
Description copied from interface: FetchConfiguration
Return whether or not query caching is enabled. If this returns true but the datacache plugin is not installed, caching will not be enabled. If this returns false, query caching will not be used even if the datacache plugin is installed.

Specified by:
getQueryCacheEnabled in interface FetchConfiguration

setQueryCacheEnabled

public FetchConfiguration setQueryCacheEnabled(boolean cache)
Description copied from interface: FetchConfiguration
Control whether or not query caching is enabled. This has no effect if the datacache plugin is not installed, or if the query cache size is set to zero.

Specified by:
setQueryCacheEnabled in interface FetchConfiguration

getFlushBeforeQueries

public int getFlushBeforeQueries()
Description copied from interface: FetchConfiguration
The query automatic flush configuration.

Specified by:
getFlushBeforeQueries in interface FetchConfiguration

getExtendedPathLookup

public boolean getExtendedPathLookup()
Description copied from interface: FetchConfiguration
Affirms if extended path lookup feature is active.

Specified by:
getExtendedPathLookup in interface FetchConfiguration

setExtendedPathLookup

public FetchConfiguration setExtendedPathLookup(boolean flag)
Description copied from interface: FetchConfiguration
Sets extended path lookup feature.

Specified by:
setExtendedPathLookup in interface FetchConfiguration

setFlushBeforeQueries

public FetchConfiguration setFlushBeforeQueries(int flush)
Description copied from interface: FetchConfiguration
The query automatic flush configuration.

Specified by:
setFlushBeforeQueries in interface FetchConfiguration

getFetchGroups

public Set<String> getFetchGroups()
Description copied from interface: FetchConfiguration
Returns immutable set of names of the fetch groups that this component will use when loading objects. Defaults to the openjpa.FetchGroups setting. This set is not thread safe.

Specified by:
getFetchGroups in interface FetchConfiguration

hasFetchGroup

public boolean hasFetchGroup(String group)
Description copied from interface: FetchConfiguration
Return true if the given fetch group has been added.

Specified by:
hasFetchGroup in interface FetchConfiguration

hasFetchGroupDefault

public boolean hasFetchGroupDefault()

hasFetchGroupAll

public boolean hasFetchGroupAll()

addFetchGroup

public FetchConfiguration addFetchGroup(String name)
Description copied from interface: FetchConfiguration
Adds group to the set of fetch group names to use when loading objects.

Specified by:
addFetchGroup in interface FetchConfiguration

addFetchGroups

public FetchConfiguration addFetchGroups(Collection<String> groups)
Description copied from interface: FetchConfiguration
Adds groups to the set of fetch group names to use when loading objects.

Specified by:
addFetchGroups in interface FetchConfiguration

removeFetchGroup

public FetchConfiguration removeFetchGroup(String group)
Description copied from interface: FetchConfiguration
Remove the given fetch group.

Specified by:
removeFetchGroup in interface FetchConfiguration

removeFetchGroups

public FetchConfiguration removeFetchGroups(Collection<String> groups)
Description copied from interface: FetchConfiguration
Removes groups from the set of fetch group names to use when loading objects.

Specified by:
removeFetchGroups in interface FetchConfiguration

clearFetchGroups

public FetchConfiguration clearFetchGroups()
Description copied from interface: FetchConfiguration
Clears the set of fetch group names to use when loading data. After this operation is invoked, only those fields in the default fetch group (and any requested field) will be loaded when loading an object.

Specified by:
clearFetchGroups in interface FetchConfiguration

resetFetchGroups

public FetchConfiguration resetFetchGroups()
Description copied from interface: FetchConfiguration
Resets the set of fetch groups to the list in the global configuration.

Specified by:
resetFetchGroups in interface FetchConfiguration

getFields

public Set<String> getFields()
Description copied from interface: FetchConfiguration
Returns the set of fully-qualified field names that this component will use when loading objects. Defaults to the empty set. This set is not thread safe.

Specified by:
getFields in interface FetchConfiguration

hasField

public boolean hasField(String field)
Description copied from interface: FetchConfiguration
Return true if the given fully-qualified field has been added.

Specified by:
hasField in interface FetchConfiguration

addField

public FetchConfiguration addField(String field)
Description copied from interface: FetchConfiguration
Adds field to the set of fully-qualified field names to use when loading objects.

Specified by:
addField in interface FetchConfiguration

addFields

public FetchConfiguration addFields(Collection<String> fields)
Description copied from interface: FetchConfiguration
Adds fields to the set of fully-qualified field names to use when loading objects.

Specified by:
addFields in interface FetchConfiguration

removeField

public FetchConfiguration removeField(String field)
Description copied from interface: FetchConfiguration
Remove the given fully-qualified field.

Specified by:
removeField in interface FetchConfiguration

removeFields

public FetchConfiguration removeFields(Collection<String> fields)
Description copied from interface: FetchConfiguration
Removes fields from the set of fully-qualified field names to use when loading objects.

Specified by:
removeFields in interface FetchConfiguration

clearFields

public FetchConfiguration clearFields()
Description copied from interface: FetchConfiguration
Clears the set of field names to use when loading data. After this operation is invoked, only those fields in the configured fetch groups will be loaded when loading an object.

Specified by:
clearFields in interface FetchConfiguration

getCacheRetrieveMode

public DataCacheRetrieveMode getCacheRetrieveMode()
Description copied from interface: FetchConfiguration
Gets the current retrieve mode for data cache.

Specified by:
getCacheRetrieveMode in interface FetchConfiguration

getCacheStoreMode

public DataCacheStoreMode getCacheStoreMode()
Description copied from interface: FetchConfiguration
Gets the current storage mode for data cache.

Specified by:
getCacheStoreMode in interface FetchConfiguration

setCacheRetrieveMode

public void setCacheRetrieveMode(DataCacheRetrieveMode mode)
Description copied from interface: FetchConfiguration
Sets the current retrieve mode for data cache.

Specified by:
setCacheRetrieveMode in interface FetchConfiguration

setCacheStoreMode

public void setCacheStoreMode(DataCacheStoreMode mode)
Description copied from interface: FetchConfiguration
Sets the current storage mode for data cache.

Specified by:
setCacheStoreMode in interface FetchConfiguration

getLockTimeout

public int getLockTimeout()
Description copied from interface: FetchConfiguration
The number of milliseconds to wait for an object lock, or -1 for no limit.

Specified by:
getLockTimeout in interface FetchConfiguration

setLockTimeout

public FetchConfiguration setLockTimeout(int timeout)
Description copied from interface: FetchConfiguration
The number of milliseconds to wait for an object lock, or -1 for no limit.

Specified by:
setLockTimeout in interface FetchConfiguration

getQueryTimeout

public int getQueryTimeout()
Description copied from interface: FetchConfiguration
The number of milliseconds to wait for a query, or -1 for no limit.

Specified by:
getQueryTimeout in interface FetchConfiguration

setQueryTimeout

public FetchConfiguration setQueryTimeout(int timeout)
Description copied from interface: FetchConfiguration
The number of milliseconds to wait for a query, or -1 for no limit.

Specified by:
setQueryTimeout in interface FetchConfiguration

getLockScope

public int getLockScope()
Description copied from interface: FetchConfiguration
The lock scope for next fetch.

Specified by:
getLockScope in interface FetchConfiguration

setLockScope

public FetchConfiguration setLockScope(int scope)
Description copied from interface: FetchConfiguration
The lock scope for next fetch.

Specified by:
setLockScope in interface FetchConfiguration

getReadLockLevel

public int getReadLockLevel()
Description copied from interface: FetchConfiguration
The lock level to use for locking loaded objects.

Specified by:
getReadLockLevel in interface FetchConfiguration

setReadLockLevel

public FetchConfiguration setReadLockLevel(int level)
Description copied from interface: FetchConfiguration
The lock level to use for locking loaded objects.

Specified by:
setReadLockLevel in interface FetchConfiguration

getWriteLockLevel

public int getWriteLockLevel()
Description copied from interface: FetchConfiguration
The lock level to use for locking dirtied objects.

Specified by:
getWriteLockLevel in interface FetchConfiguration

setWriteLockLevel

public FetchConfiguration setWriteLockLevel(int level)
Description copied from interface: FetchConfiguration
The lock level to use for locking dirtied objects.

Specified by:
setWriteLockLevel in interface FetchConfiguration

newResultList

public ResultList<?> newResultList(ResultObjectProvider rop)
Description copied from interface: FetchConfiguration
Return a new result list for the current fetch configuration.

Specified by:
newResultList in interface FetchConfiguration

getHints

public Map<String,Object> getHints()
Gets the current hints set on this receiver. The values designate the actual value specified by the caller and not the values that may have been actually set on the state variables of this receiver.

Specified by:
getHints in interface FetchConfiguration

isHintSet

public boolean isHintSet(String key)
Affirms if the given key is set as a hint.

Specified by:
isHintSet in interface FetchConfiguration

removeHint

public void removeHint(String... keys)
Removes the given keys and their hint value.


getSupportedHints

public Collection<String> getSupportedHints()

setHint

public void setHint(String key,
                    Object value)
Same as setHint(key, value, value).

Specified by:
setHint in interface FetchConfiguration
value - the value of the hint. If the hint has a corresponding setter, then the type of value must be same as the setter argument.
See Also:
setHint(String, Object, Object)

setHint

public void setHint(String key,
                    Object value,
                    Object original)
Sets the hint to the given value. If the key corresponds to a known key, then that value is set via the setter method. Otherwise it is put into opaque hints map.
In either case, the original value is put in the hints map. So essential difference between setting a value directly by a setter and via a hint is the memory of this original value.
The other important difference is setting lock levels. Setting of lock level via setter method needs active transaction. But setting via hint does not.

Specified by:
setHint in interface FetchConfiguration
Parameters:
key - a hint key. If it is one of the statically registered hint key then the setter is called.
value - to be set. The given value type must match the argument type of the setter, if one exists.
original - value as specified by the caller. This value is put in the hints map.
Throws:
IllegalArgumentException - if the given value is not acceptable by the setter method, if one exists corresponds the given hint key.

getHint

public Object getHint(String name)
Description copied from interface: FetchConfiguration
Get the hint value for the specific key as originally set by the caller, or null if the hint is not specified.

Specified by:
getHint in interface FetchConfiguration

removeHint

public Object removeHint(String name)

getRootClasses

public Set<Class<?>> getRootClasses()
Description copied from interface: FetchConfiguration
Root classes for recursive operations. This set is not thread safe.

Specified by:
getRootClasses in interface FetchConfiguration

setRootClasses

public FetchConfiguration setRootClasses(Collection<Class<?>> classes)
Description copied from interface: FetchConfiguration
Root classes for recursive operations.

Specified by:
setRootClasses in interface FetchConfiguration

getRootInstances

public Set<Object> getRootInstances()
Description copied from interface: FetchConfiguration
Root instances for recursive operations. This set is not thread safe.

Specified by:
getRootInstances in interface FetchConfiguration

setRootInstances

public FetchConfiguration setRootInstances(Collection<?> instances)
Description copied from interface: FetchConfiguration
Root instances for recursive operations.

Specified by:
setRootInstances in interface FetchConfiguration

lock

public void lock()
Description copied from interface: FetchConfiguration
Synchronize on internal lock if multithreaded is true.

Specified by:
lock in interface FetchConfiguration

unlock

public void unlock()
Description copied from interface: FetchConfiguration
Release internal lock if multithreaded is true.

Specified by:
unlock in interface FetchConfiguration

requiresFetch

public int requiresFetch(FieldMetaData fm)
Description copied from interface: FetchConfiguration
Affirms if the given field requires to be fetched in the context of current fetch operation. Returns one of FetchConfiguration.FETCH_NONE, FetchConfiguration.FETCH_LOAD, FETCH_REF.

Specified by:
requiresFetch in interface FetchConfiguration

requiresLoad

public boolean requiresLoad()
Description copied from interface: FetchConfiguration
Return false if we know that the object being fetched with this configuration does not require a load, because this configuration came from a traversal of a FetchConfiguration.FETCH_REF field.

Specified by:
requiresLoad in interface FetchConfiguration

traverse

public FetchConfiguration traverse(FieldMetaData fm)
Description copied from interface: FetchConfiguration
Traverse the given field to generate (possibly) a new configuration state.

Specified by:
traverse in interface FetchConfiguration
Returns:
a new configuration state resulting out of traversal

getParent

FetchConfiguration getParent()

isRoot

boolean isRoot()

getRoot

FetchConfiguration getRoot()

getAvailableFetchDepth

int getAvailableFetchDepth()

getAvailableRecursionDepth

int getAvailableRecursionDepth()

getTraversedFromField

String getTraversedFromField()

getTraversedFromType

Class<?> getTraversedFromType()

getPath

List<FetchConfigurationImpl> getPath()

trackPath

List<FetchConfigurationImpl> trackPath(List<FetchConfigurationImpl> path)

toString

public String toString()
Overrides:
toString in class Object

toString

protected String toString(Object o)


Copyright © 2006-2010 Apache Software Foundation. All Rights Reserved.