Package org.apache.openjpa.kernel
Class FetchConfigurationImpl
java.lang.Object
org.apache.openjpa.kernel.FetchConfigurationImpl
- All Implemented Interfaces:
Serializable
,Cloneable
,FetchConfiguration
,LockLevels
,LockScopes
,QueryFlushModes
- Direct Known Subclasses:
JDBCFetchConfigurationImpl
Allows configuration and optimization of how objects are loaded from
the data store.
- Since:
- 0.3.0
- Author:
- Abe White, Pinaki Poddar
- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static class
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
ModifierConstructorDescriptionprotected
-
Method Summary
Modifier and TypeMethodDescriptionaddFetchGroup
(String name) Addsgroup
to the set of fetch group names to use when loading objects.addFetchGroups
(Collection<String> groups) Addsgroups
to the set of fetch group names to use when loading objects.Addsfield
to the set of fully-qualified field names to use when loading objects.addFields
(Collection<String> fields) Addsfields
to the set of fully-qualified field names to use when loading objects.Clears the set of fetch group names to use when loading data.Clears the set of field names to use when loading data.clone()
Clone this instance.void
copy
(FetchConfiguration fetch) Copy the state from the given fetch configuration to this one.Gets the current retrieve mode for data cache.Gets the current storage mode for data cache.Return the context associated with this configuration; may be null if it has not been set or this object has been serialized.boolean
Affirms if extended path lookup feature is active.int
Return the fetch batch size for large result set support.Returns immutable set of names of the fetch groups that this component will use when loading objects.Returns the set of fully-qualified field names that this component will use when loading objects.int
The query automatic flush configuration.Get the hint value for the specific key as originally set by the caller, or null if the hint is not specified.getHints()
Gets the current hints set on this receiver.int
The lock scope for next fetch.int
The number of milliseconds to wait for an object lock, or -1 for no limit.int
Return the maximum depth of fetched instance graph.boolean
Return whether or not query caching is enabled.int
The number of milliseconds to wait for a query, or -1 for no limit.int
The lock level to use for locking loaded objects.Root classes for recursive operations.Root instances for recursive operations.int
The lock level to use for locking dirtied objects.boolean
hasFetchGroup
(String group) Return true if the given fetch group has been added.boolean
boolean
boolean
Return true if the given fully-qualified field has been added.boolean
Affirm if the Fetch Plan currently matches the Persistence Unit's configured default.boolean
Whether SQL generated by the FetchConfiguration's current configuration should be cached.boolean
Affirms if the given key is set as a hint.void
lock()
Synchronize on internal lock if multithreaded is true.protected FetchConfigurationImpl
Return a new hollow instance.ResultList<?>
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
Populate static registry of hints.removeFetchGroup
(String group) Remove the given fetch group.removeFetchGroups
(Collection<String> groups) Removesgroups
from the set of fetch group names to use when loading objects.removeField
(String field) Remove the given fully-qualified field.removeFields
(Collection<String> fields) Removesfields
from the set of fully-qualified field names to use when loading objects.removeHint
(String name) void
removeHint
(String... keys) Removes the given keys and their hint value.int
Affirms if the given field requires to be fetched in the context of current fetch operation.boolean
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 aFetchConfiguration.FETCH_REF
field.Resets the set of fetch groups to the list in the global configuration.void
Sets the current retrieve mode for data cache.void
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.setExtendedPathLookup
(boolean flag) Sets extended path lookup feature.setFetchBatchSize
(int fetchBatchSize) Set the fetch batch size for large result set support.setFlushBeforeQueries
(int flush) The query automatic flush configuration.void
Same assetHint(key, value, value)
.void
Sets the hint to the given value.setLockScope
(int scope) The lock scope for next fetch.setLockTimeout
(int timeout) The number of milliseconds to wait for an object lock, or -1 for no limit.setMaxFetchDepth
(int depth) Set the maximum depth of the fetched instance graph.setQueryCacheEnabled
(boolean cache) Control whether or not query caching is enabled.setQueryTimeout
(int timeout) The number of milliseconds to wait for a query, or -1 for no limit.setReadLockLevel
(int level) The lock level to use for locking loaded objects.setRootClasses
(Collection<Class<?>> classes) Root classes for recursive operations.setRootInstances
(Collection<?> instances) Root instances for recursive operations.setWriteLockLevel
(int level) The lock level to use for locking dirtied objects.toString()
protected String
Traverse the given field to generate (possibly) a new configuration state.void
unlock()
Release internal lock if multithreaded is true.
-
Constructor Details
-
FetchConfigurationImpl
public FetchConfigurationImpl() -
FetchConfigurationImpl
-
-
Method Details
-
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
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 interfaceFetchConfiguration
-
setContext
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 interfaceFetchConfiguration
-
clone
Clone this instance.- Specified by:
clone
in interfaceFetchConfiguration
- Overrides:
clone
in classObject
-
newInstance
Return a new hollow instance. -
copy
Description copied from interface:FetchConfiguration
Copy the state from the given fetch configuration to this one.- Specified by:
copy
in interfaceFetchConfiguration
-
getFetchBatchSize
public int getFetchBatchSize()Description copied from interface:FetchConfiguration
Return the fetch batch size for large result set support. Defaults to theopenjpa.FetchBatchSize
setting. Note that this property will be ignored under some data stores.- Specified by:
getFetchBatchSize
in interfaceFetchConfiguration
-
setFetchBatchSize
Description copied from interface:FetchConfiguration
Set the fetch batch size for large result set support. Defaults to theopenjpa.FetchBatchSize
setting. Note that this property will be ignored under some data stores.- Specified by:
setFetchBatchSize
in interfaceFetchConfiguration
-
getMaxFetchDepth
public int getMaxFetchDepth()Description copied from interface:FetchConfiguration
Return the maximum depth of fetched instance graph. Defaults to1
- Specified by:
getMaxFetchDepth
in interfaceFetchConfiguration
-
setMaxFetchDepth
Description copied from interface:FetchConfiguration
Set the maximum depth of the fetched instance graph.- Specified by:
setMaxFetchDepth
in interfaceFetchConfiguration
- 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 returnstrue
but the datacache plugin is not installed, caching will not be enabled. If this returnsfalse
, query caching will not be used even if the datacache plugin is installed.- Specified by:
getQueryCacheEnabled
in interfaceFetchConfiguration
-
setQueryCacheEnabled
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 interfaceFetchConfiguration
-
getFlushBeforeQueries
public int getFlushBeforeQueries()Description copied from interface:FetchConfiguration
The query automatic flush configuration.- Specified by:
getFlushBeforeQueries
in interfaceFetchConfiguration
-
getExtendedPathLookup
public boolean getExtendedPathLookup()Description copied from interface:FetchConfiguration
Affirms if extended path lookup feature is active.- Specified by:
getExtendedPathLookup
in interfaceFetchConfiguration
-
setExtendedPathLookup
Description copied from interface:FetchConfiguration
Sets extended path lookup feature.- Specified by:
setExtendedPathLookup
in interfaceFetchConfiguration
-
setFlushBeforeQueries
Description copied from interface:FetchConfiguration
The query automatic flush configuration.- Specified by:
setFlushBeforeQueries
in interfaceFetchConfiguration
-
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 theopenjpa.FetchGroups
setting. This set is not thread safe.- Specified by:
getFetchGroups
in interfaceFetchConfiguration
-
hasFetchGroup
Description copied from interface:FetchConfiguration
Return true if the given fetch group has been added.- Specified by:
hasFetchGroup
in interfaceFetchConfiguration
-
hasFetchGroupDefault
public boolean hasFetchGroupDefault() -
hasFetchGroupAll
public boolean hasFetchGroupAll() -
addFetchGroup
Description copied from interface:FetchConfiguration
Addsgroup
to the set of fetch group names to use when loading objects.- Specified by:
addFetchGroup
in interfaceFetchConfiguration
-
addFetchGroups
Description copied from interface:FetchConfiguration
Addsgroups
to the set of fetch group names to use when loading objects.- Specified by:
addFetchGroups
in interfaceFetchConfiguration
-
removeFetchGroup
Description copied from interface:FetchConfiguration
Remove the given fetch group.- Specified by:
removeFetchGroup
in interfaceFetchConfiguration
-
removeFetchGroups
Description copied from interface:FetchConfiguration
Removesgroups
from the set of fetch group names to use when loading objects.- Specified by:
removeFetchGroups
in interfaceFetchConfiguration
-
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 interfaceFetchConfiguration
-
resetFetchGroups
Description copied from interface:FetchConfiguration
Resets the set of fetch groups to the list in the global configuration.- Specified by:
resetFetchGroups
in interfaceFetchConfiguration
-
isDefaultPUFetchGroupConfigurationOnly
public boolean isDefaultPUFetchGroupConfigurationOnly()Description copied from interface:FetchConfiguration
Affirm if the Fetch Plan currently matches the Persistence Unit's configured default.- Specified by:
isDefaultPUFetchGroupConfigurationOnly
in interfaceFetchConfiguration
-
isFetchConfigurationSQLCacheAdmissible
public boolean isFetchConfigurationSQLCacheAdmissible()Description copied from interface:FetchConfiguration
Whether SQL generated by the FetchConfiguration's current configuration should be cached.- Specified by:
isFetchConfigurationSQLCacheAdmissible
in interfaceFetchConfiguration
-
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 interfaceFetchConfiguration
-
hasField
Description copied from interface:FetchConfiguration
Return true if the given fully-qualified field has been added.- Specified by:
hasField
in interfaceFetchConfiguration
-
addField
Description copied from interface:FetchConfiguration
Addsfield
to the set of fully-qualified field names to use when loading objects.- Specified by:
addField
in interfaceFetchConfiguration
-
addFields
Description copied from interface:FetchConfiguration
Addsfields
to the set of fully-qualified field names to use when loading objects.- Specified by:
addFields
in interfaceFetchConfiguration
-
removeField
Description copied from interface:FetchConfiguration
Remove the given fully-qualified field.- Specified by:
removeField
in interfaceFetchConfiguration
-
removeFields
Description copied from interface:FetchConfiguration
Removesfields
from the set of fully-qualified field names to use when loading objects.- Specified by:
removeFields
in interfaceFetchConfiguration
-
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 interfaceFetchConfiguration
-
getCacheRetrieveMode
Description copied from interface:FetchConfiguration
Gets the current retrieve mode for data cache.- Specified by:
getCacheRetrieveMode
in interfaceFetchConfiguration
-
getCacheStoreMode
Description copied from interface:FetchConfiguration
Gets the current storage mode for data cache.- Specified by:
getCacheStoreMode
in interfaceFetchConfiguration
-
setCacheRetrieveMode
Description copied from interface:FetchConfiguration
Sets the current retrieve mode for data cache.- Specified by:
setCacheRetrieveMode
in interfaceFetchConfiguration
-
setCacheStoreMode
Description copied from interface:FetchConfiguration
Sets the current storage mode for data cache.- Specified by:
setCacheStoreMode
in interfaceFetchConfiguration
-
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 interfaceFetchConfiguration
-
setLockTimeout
Description copied from interface:FetchConfiguration
The number of milliseconds to wait for an object lock, or -1 for no limit.- Specified by:
setLockTimeout
in interfaceFetchConfiguration
-
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 interfaceFetchConfiguration
-
setQueryTimeout
Description copied from interface:FetchConfiguration
The number of milliseconds to wait for a query, or -1 for no limit.- Specified by:
setQueryTimeout
in interfaceFetchConfiguration
-
getLockScope
public int getLockScope()Description copied from interface:FetchConfiguration
The lock scope for next fetch.- Specified by:
getLockScope
in interfaceFetchConfiguration
-
setLockScope
Description copied from interface:FetchConfiguration
The lock scope for next fetch.- Specified by:
setLockScope
in interfaceFetchConfiguration
-
getReadLockLevel
public int getReadLockLevel()Description copied from interface:FetchConfiguration
The lock level to use for locking loaded objects.- Specified by:
getReadLockLevel
in interfaceFetchConfiguration
-
setReadLockLevel
Description copied from interface:FetchConfiguration
The lock level to use for locking loaded objects.- Specified by:
setReadLockLevel
in interfaceFetchConfiguration
-
getWriteLockLevel
public int getWriteLockLevel()Description copied from interface:FetchConfiguration
The lock level to use for locking dirtied objects.- Specified by:
getWriteLockLevel
in interfaceFetchConfiguration
-
setWriteLockLevel
Description copied from interface:FetchConfiguration
The lock level to use for locking dirtied objects.- Specified by:
setWriteLockLevel
in interfaceFetchConfiguration
-
newResultList
Description copied from interface:FetchConfiguration
Return a new result list for the current fetch configuration.- Specified by:
newResultList
in interfaceFetchConfiguration
-
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 interfaceFetchConfiguration
-
isHintSet
Affirms if the given key is set as a hint.- Specified by:
isHintSet
in interfaceFetchConfiguration
-
removeHint
Removes the given keys and their hint value. -
getSupportedHints
-
setHint
Same assetHint(key, value, value)
.- Specified by:
setHint
in interfaceFetchConfiguration
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
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 interfaceFetchConfiguration
- 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
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 interfaceFetchConfiguration
-
removeHint
-
getRootClasses
Description copied from interface:FetchConfiguration
Root classes for recursive operations. This set is not thread safe.- Specified by:
getRootClasses
in interfaceFetchConfiguration
-
setRootClasses
Description copied from interface:FetchConfiguration
Root classes for recursive operations.- Specified by:
setRootClasses
in interfaceFetchConfiguration
-
getRootInstances
Description copied from interface:FetchConfiguration
Root instances for recursive operations. This set is not thread safe.- Specified by:
getRootInstances
in interfaceFetchConfiguration
-
setRootInstances
Description copied from interface:FetchConfiguration
Root instances for recursive operations.- Specified by:
setRootInstances
in interfaceFetchConfiguration
-
lock
public void lock()Description copied from interface:FetchConfiguration
Synchronize on internal lock if multithreaded is true.- Specified by:
lock
in interfaceFetchConfiguration
-
unlock
public void unlock()Description copied from interface:FetchConfiguration
Release internal lock if multithreaded is true.- Specified by:
unlock
in interfaceFetchConfiguration
-
requiresFetch
Description copied from interface:FetchConfiguration
Affirms if the given field requires to be fetched in the context of current fetch operation. Returns one ofFetchConfiguration.FETCH_NONE
,FetchConfiguration.FETCH_LOAD
,FetchConfiguration.FETCH_REF
.- Specified by:
requiresFetch
in interfaceFetchConfiguration
-
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 aFetchConfiguration.FETCH_REF
field.- Specified by:
requiresLoad
in interfaceFetchConfiguration
-
traverse
Description copied from interface:FetchConfiguration
Traverse the given field to generate (possibly) a new configuration state.- Specified by:
traverse
in interfaceFetchConfiguration
- Returns:
- a new configuration state resulting out of traversal
-
toString
-
toString
-