Class ExecutionContextImpl
- All Implemented Interfaces:
ExecutionContextReference, ExecutionContext, TransactionEventListener
- Direct Known Subclasses:
ExecutionContextThreadedImpl
Caching
An ExecutionContext has its own Level 1 cache. This stores objects against their identity. The Level 1 cache is typically a weak referenced map and so cached objects can be garbage collected. Objects are placed in the Level 1 cache during the transaction. The NucleusContext also has a Level 2 cache. This is used to allow cross-communication between ExecutionContexts. Objects are placed in the Level 2 cache during commit() of a transaction. If an object is deleted during a transaction then it will be removed from the Level 2 cache at commit(). If an object is no longer enlisted in the transaction at commit then it will be removed from the Level 2 cache (so we remove the chance of handing out old data).
Transactions
An ExecutionContext has a single transaction (the "current" transaction). The transaction can be "active" (if begin() has been called on it) or "inactive".
Persisted Objects
When an object involved in the current transaction it is enlisted (calling enlistInTransaction()). Its identity is saved (in "txEnlistedIds") for use later in any "persistenceByReachability" process run at commit. Any object that is passed via makePersistent() will be stored (as an identity) in "txKnownPersistedIds" and objects persisted due to reachability from these objects will also have their identity stored (in "txFlushedNewIds"). All of this information is used in the "persistence-by-reachability-at-commit" process which detects if some objects originally persisted are no longer reachable and hence should not be persistent after all.
StateManager-based storage
You may note that we have various fields here storing StateManager-related information such as which StateManager is embedded into which StateManager etc, or the managed relations for a StateManager. These are stored here to avoid adding a reference to the storage of each and every StateManager, since we could potentially have a very large number of StateManagers (and they may not use that field in the majority, but it still needs the reference). The same should be followed as a general rule when considering storing something in StateManager.
This class is NOT thread-safe. Use ExecutionContextThreadedImpl if you want to *attempt* to have multithreaded PM/EMs.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classstatic classCallback handler that does nothing.(package private) static classContext info for a particular thread.Nested classes/interfaces inherited from interface ExecutionContext
ExecutionContext.EmbeddedOwnerRelation, ExecutionContext.LifecycleListener -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Level1CacheLevel 1 Cache, essentially a Map of StateManager keyed by the id.private CallbackHandlerCallback handler for this context.private booleanState variable for whether the context is closed.private booleanprivate ClassLoaderResolverThe ClassLoader resolver to use for class loading issues.private ThreadLocalThread-specific state information (instances ofExecutionContextImpl.ThreadContextInfo) used where we don't want to pass information down through a large number of method calls.private DNStateManager[]Temporary array of StateManagers to detach at commit (to prevent garbage collection).private final Collection<DNStateManager> List of StateManagers for all current dirty objects managed by this context.private Set<ExecutionContextListener> Set of listeners who need to know when this ExecutionContext is closing, so they can clean up.private final Map<Object, DNStateManager> Cache of StateManagers enlisted in the current transaction, keyed by the object id.private FetchGroupManagerManager for dynamic fetch groups.private FetchPlanCurrent FetchPlan for the context.private intState variable for whether the context is currently flushing its operations.private FlushModeThe current flush mode, if it is defined.private final Collection<DNStateManager> List of StateManagers for all current dirty objects made dirty by reachability.private booleanObjects that were updated in L2 cache before commit, which should be evicted if rollback happensMap of fields of object to update in L2 cache (when attached), keyed by the id.Set of ids to be Level2 cached at commit (if using L2 cache).private LockManagerLock manager for object-based locking.private ManagedRelationsHandlerHandler for "managed relations" at flush/commit.private Set<DNStateManager> (package private) PersistenceNucleusContextContext for the persistence process.private OperationQueueprivate ObjectThe owning PersistenceManager/EntityManager object.private ReachabilityAtCommitHandlerHandler for "persistence-by-reachability" at commit.private final BasePropertyStoreProperties controlling runtime behaviour (detach on commit, multithreaded, etc).private booleanState variable for whether we are currently running detachAllOnCommit/detachAllOnRollback.private Map<DNStateManager, Object> Lookup map of attached-detached objects when attaching/detaching.Map of embedded StateManager relations, keyed by embedded StateManager.Map of embedded StateManager relations, keyed by owner StateManager.protected Map<DNStateManager, Map<?, ?>> Map of associated values per StateManager.private ManagerStatisticsStatistics gatherer for this context.private TransactionCurrent transactionFields inherited from interface ExecutionContext
OPTION_JTA_AUTOJOIN, OPTION_PASSWORD, OPTION_USERNAME -
Constructor Summary
ConstructorsConstructorDescriptionExecutionContextImpl(PersistenceNucleusContext ctx, Object owner, Map<String, Object> options) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected ExecutionContextImpl.ThreadContextInfoAccessor for the thread context information, for the current thread.voidMethod to add a dynamic FetchGroup.voidaddOperationToQueue(Operation oper) Method to add an operation to the queue.voidMethod to add the object managed by the specified StateManager to the (L1) cache.protected voidMethod to assert if the current transaction is active.voidMethod to assert if the specified class is Persistence Capable.protected voidassertDetachable(Object object) Method to assert if the specified object is Detachable.protected voidMethod to assert if this context is open.protected voidassertNotDetached(Object object) Method to assert if the specified object is detached.<T> voidattachObject(DNStateManager ownerSM, T pc, boolean sco) Method to attach a persistent detached object.<T> TattachObjectCopy(DNStateManager ownerSM, T pc, boolean sco) Method to attach a persistent detached object returning an attached copy of the object.voidMethod to clear all objects marked as dirty (whether directly or indirectly).voidMethod to clear an object from the list of dirty objects.voidclose()Method to close the context.voidClose the callback handler and disconnect any registered listeners.booleanvoiddeleteObject(Object obj) Method to delete an object from the datastore.voidMethod to delete an object from persistence which should be called from internal calls only.voiddeleteObjects(Object... objs) Method to delete an array of objects from the datastore.(package private) voiddeleteObjectWork(Object obj) Method to delete an object from the datastore.voidMethod to deregister the specified embedded relation (e.g when the embedded object is disconnected).voidDeregister a listener from calling when this ExecutionContext is closing.voidMethod to detach all objects in the context.<T> voiddetachObject(FetchPlanState state, T obj) Method to detach a persistent object without making a copy.<T> TdetachObjectCopy(FetchPlanState state, T pc) Detach a copy of the passed persistent object using the provided detach state.voiddetachObjects(FetchPlanState state, Object... pcs) Method to detach the passed object(s).voidMethod to enlist the specified StateManager in the current transaction.voidMethod to evict all current objects from L1 cache.voidMethod to evict the specified StateManager from the current transaction.voidevictObject(Object obj) Internal method to evict an object from L1 cache.voidevictObjects(Class<?> cls, boolean subclasses) Method to evict all objects of the specified type (and optionally its subclasses) that are present in the L1 cache.booleanMethod to return if the specified object exists in the datastore.<T> TfindObject(Class<T> cls, Object key) Accessor for an object of the specified type with the provided id "key".findObject(Object id, boolean validate) Shortcut to calling "findObject(id, validate, validate, null)".findObject(Object id, boolean validate, boolean checkInheritance, String objectClassName) Accessor for an object given the object id.findObject(Object id, FieldValues fv, Class cls, boolean ignoreCache, boolean checkInheritance) Accessor for an object given the object id and a set of field values to apply to it.<T> TfindObjectByUnique(Class<T> cls, String[] memberNames, Object[] memberValues) Accessor for an object of the specified type with the provided values for a unique key.<T> List<T> findObjects(Class<T> cls, List<Object> keys) Accessor for objects of the specified type, with the provided id "key"s.findObjectsById(Object[] identities, boolean validate) Accessor for objects with the specified identities.Method to return StateManager for an object (if managed).findStateManager(Object pc, boolean persist) Find StateManager for the specified object, persisting it if required and assigning a StateManager if doing sofindStateManagerForEmbedded(Object value, DNStateManager ownerSM, AbstractMemberMetaData mmd, PersistableObjectType objectType) Method to find StateManager for the passed embedded persistable object.voidflush()Method callable from external APIs for user-management of flushing.voidflushInternal(boolean flushToDatastore) This method flushes all dirty, new, and deleted instances to the datastore.voidflushOperationsForBackingStore(Store backingStore, DNStateManager sm) Method to flush all queued operations for the specified backing store (if any).Access a referenced object for this StateManager during the attach/detach process.Convenience method to return the attached object for the specified id if one exists.getBooleanProperty(String name) Accessor for a boolean property value.private CacheUniqueKeyMethod to return a CacheUniqueKey to use when caching the object managed by the supplied StateManager for the specified unique key.Retrieve the callback handler for this context.getClassDetailsForId(Object id, String objectClassName, boolean checkInheritance) Convenience method that takes an id, an optional class name for the object it represents, and whether to check for inheritance, and returns class details of the object being represented.Accessor for the ClassLoader resolver to use in class loading issues.private StringAccessor for the current user, for this ExecutionContext.Accessor for the relations for the specified embedded StateManager where it is embedded.<T> Extent<T> Extents are collections of datastore objects managed by the datastore, not by explicit user operations on collections.protected FetchGroupManagerConvenience accessor for the FetchGroupManager.getFetchGroupsWithName(String name) Accessor for the fetch groups for the specified name.Acessor for the current FetchPlanAccessor for the flush mode.getInternalFetchGroup(Class cls, String name) Accessor for an internal fetch group for the specified class.getIntProperty(String name) Accessor for an int property value.protected CachedPCgetL2CacheableObject(DNStateManager sm, CachedPC currentCachedPC) Convenience method to convert the object managed by StateManager into a form suitable for caching in an L2 cache.protected Stringprotected StringAccessor for the lock manager for objects in this execution context.Accessor for the currently managed objects for the current transaction.getManagedObjects(Class[] classes) Accessor for the currently managed objects for the current transaction.getManagedObjects(String[] states) Accessor for the currently managed objects for the current transaction.getManagedObjects(String[] states, Class[] classes) Accessor for the currently managed objects for the current transaction.booleanAccessor for whether to manage relationships at flush/commit.booleanAccessor for whether this context is multithreaded.Accessor for the context in which this execution context is running.Convenience method to access an object in the cache.protected PersistableConvenience method to access an object in the Level 1 cache.protected PersistableConvenience method to access an object in the Level 2 cache.protected PersistableConvenience method to access the identity that corresponds to a unique key, in the Level 2 cache.getObjectsFromCache(Object[] ids) Convenience method to access objects in the cache.protected Map<Object, Persistable> Convenience method to access a collection of objects from the Level 2 cache.Convenience method to inspect the list of objects with outstanding changes to flush.Accessor for the operation queue.getOwner()Accessor for the owner of this ExecutionContext.Accessor for the owner StateManager for the provided embedded StateManager.Accessor for the owner relation for the specified embedded StateManager where it is embedded.Accessor for the defined properties.getProperty(String name) Accessor for a property.Method to return the RelationshipManager for StateManager.booleangetSerializeReadForClass(String className) Convenience method to return the setting for serialize read for the current transaction for the specified class name.Accessor for any statistics-gathering object.getStringProperty(String name) Accessor for a String property value.Accessor for the supported property names.Accessor for the tenant id, for this ExecutionContext.protected ExecutionContextImpl.ThreadContextInfoGet the current ThreadContextInfo assigned to the current thread without changing the reference counter.Accessor for the current transaction for this execution context.booleanWhether the specified identity is cached currently.booleanUtility method to check if the specified class has reachable metadata or annotations.voidinitialise(Object owner, Map<String, Object> options) protected voidMethod to initialise the L1 cache.protected voidMethod to clear out the context.booleanisClosed()Accessor for whether this context is closed.booleanWhether the datastore operations are delayed until commit/flush.booleanMethod to return if an object is enlisted in the current transaction.booleanReturns whether the context is in the process of flushing.booleanisInserting(Object pc) Tests whether this persistable object is being inserted.booleanReturns whether this context is currently performing the manage relationships task.private booleanConvenience method for whether any non-tx operations are considered "atomic" (i.e auto-commit).booleanAccessor for whether the object with this identity is modified in the current transaction.booleanAccessor for whether this context is currently running detachAllOnCommit.voidMethod to make the passed object nontransactional.voidMethod to make an object transactional.voidmakeObjectTransient(Object obj, FetchPlanState state) Method to migrate an object to transient state.voidmarkDirty(DNStateManager sm, boolean directUpdate) Method to mark an object (StateManager) as dirty.voidmarkFieldsForUpdateInLevel2Cache(Object id, boolean[] fields) Method to mark the object with specifed id to have the supplied fields updated in the L2 cache at commit.<T> TnewInstance(Class<T> cls) Method to generate an instance of an interface, abstract class, or concrete PC class.newObjectId(Class pcClass, Object key) This method returns an object id instance corresponding to the pcClass and key arguments.newObjectId(String className, Object pc) This method returns an object id instance corresponding to the class name, and the passed object (when using app identity).booleanAccessor for whether the operation queue is currently active.private voidMethod to perform detach-all-on-commit, using the data identified by performDetachAllOnCommitPreparation().private voidMethod to perform all necessary preparation for detach-all-on-commit/detach-all-on-rollback.private voidMethod invoked during commit() to perform updates to the L2 cache.<T> TpersistObject(T obj, boolean merging) Method to make an object persistent.<T> TpersistObjectInternal(T obj, FieldValues preInsertChanges, PersistableObjectType objectType, DNStateManager ownerSM, int ownerFieldNum) Method to make an object persistent which should be called from INTERNAL (DataNucleus) calls only.Object[]persistObjects(Object... objs) Method to persist an array of objects to the datastore.private <T> TpersistObjectWork(T obj) Method to make an object persistent.voidMethod to perform any post-begin checks.voidCommit any changes made to objects managed by the object manager to the database.voidCallback invoked after the actual datastore rollback.voidMethod to perform any pre-commit checks.voidRollback any changes made to objects managed by the object manager to the database.protected voidHandler for all outstanding changes to be "committed" atomically.voidMethod called when a non-tx update has been performed (via setter call on the persistable object, or via use of mutator methods of a field).voidConvenience method to add an object to the L1 cache.voidputObjectIntoLevel2Cache(DNStateManager sm, boolean updateIfPresent) Method to add/update the managed object into the L2 cache as long as it isn't modified in the current transaction.protected voidputObjectIntoLevel2CacheInternal(DNStateManager sm, boolean updateIfPresent) Convenience method to add/update an object in the L2 cache.protected voidMethod to put the passed objects into the L2 cache.voidMethod to do a refresh of all objects.voidrefreshObject(Object obj) Method to do a refresh of an object, updating it from its datastore representation.registerEmbeddedRelation(DNStateManager ownerSM, int ownerMemberNum, PersistableObjectType objectType, DNStateManager embSM) Method to register an embedded relation for the specified member of the owner StateManager where the embedded StateManager is stored.voidRegister a listener to be called when this ExecutionContext is closing.protected voidMethod to remove the current thread context info for the current thread, after the reference counter reached 0.voidremoveEmbeddedOwnerRelation(DNStateManager ownerSM, int ownerFieldNum, DNStateManager embSM) Convenience method to remove the EmbeddedOwnerRelation between the specified StateManagers.protected voidMethod to remove a dynamic FetchGroup.voidConvenience method to evict an object from the L1 cache.voidConvenience method to remove the object with the specified identity from the L2 cache.voidvoidMethod to remove the object managed by the specified StateManager from the cache.voidreplaceObjectId(Persistable pc, Object oldID, Object newID) Replace the previous object id for a persistable object with a new one.private voidConvenience method to reset all state variables for the transaction, performed at commit/rollback.voidretrieveObjects(boolean useFetchPlan, Object... pcs) Method to retrieve the (fields of the) passed object(s).voidRegister a referenced object against this StateManager for the attach/detach process.protected voidsetLevel2Cache(boolean flag) Method to set whether we are supporting the Level2 Cache with this ExecutionContext Note that if the NucleusContext has no Level2 Cache enabled then you cannot turn it on here.voidsetProperties(Map<String, Object> props) Method to set properties on the execution context.voidsetProperty(String name, Object value) Method to set a property on the execution contextvoidsetStateManagerAssociatedValue(DNStateManager sm, Object key, Object value) voidMethod invoked when the transaction is committed.voidMethod invoked when the transaction is ended (Using XA).voidMethod invoked when the transaction is flushed (happens before commit, rollback).voidMethod invoked before the transaction commit.voidMethod invoked just before a flush.voidMethod invoked before the transaction is rolledback.voidSavepoint to be released for this name.voidInvoke a rollback to this savepoint name.voidMethod invoked when the transaction is rolled back.voidSavepoint to be registered under this name.voidMethod invoked when the transaction is started.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ExecutionContext
getApiAdapter, getMetaDataManager, getStoreManager, getTypeManager, persistObjectInternal, threadLock, threadUnlock
-
Field Details
-
nucCtx
PersistenceNucleusContext nucCtxContext for the persistence process. -
owner
The owning PersistenceManager/EntityManager object. -
closing
private boolean closing -
closed
private boolean closedState variable for whether the context is closed. -
fetchPlan
Current FetchPlan for the context. -
clr
The ClassLoader resolver to use for class loading issues. -
callbackHandler
Callback handler for this context. -
cache
Level 1 Cache, essentially a Map of StateManager keyed by the id. -
properties
Properties controlling runtime behaviour (detach on commit, multithreaded, etc). -
tx
Current transaction -
flushMode
The current flush mode, if it is defined. -
enlistedSMCache
Cache of StateManagers enlisted in the current transaction, keyed by the object id. -
dirtySMs
List of StateManagers for all current dirty objects managed by this context. -
indirectDirtySMs
List of StateManagers for all current dirty objects made dirty by reachability. -
operationQueue
-
nontxProcessedSMs
-
l2CacheEnabled
private boolean l2CacheEnabled -
l2CacheTxFieldsToUpdateById
-
l2CacheTxIds
-
l2CacheObjectsToEvictUponRollback
-
flushing
private int flushingState variable for whether the context is currently flushing its operations. -
fetchGrpMgr
Manager for dynamic fetch groups. -
lockMgr
Lock manager for object-based locking. -
smAttachDetachObjectReferenceMap
Lookup map of attached-detached objects when attaching/detaching. -
smEmbeddedInfoByOwner
Map of embedded StateManager relations, keyed by owner StateManager. -
smEmbeddedInfoByEmbedded
Map of embedded StateManager relations, keyed by embedded StateManager. -
stateManagerAssociatedValuesMap
Map of associated values per StateManager. This can contain anything really and is down to the StoreManager to define. For example RDBMS datastores typically put external FK info in here keyed by the mapping of the field to which it pertains. -
managedRelationsHandler
Handler for "managed relations" at flush/commit. -
pbrAtCommitHandler
Handler for "persistence-by-reachability" at commit. -
runningDetachAllOnTxnEnd
private boolean runningDetachAllOnTxnEndState variable for whether we are currently running detachAllOnCommit/detachAllOnRollback. -
detachAllOnTxnEndSMs
Temporary array of StateManagers to detach at commit (to prevent garbage collection). Set up in preCommit() and used in postCommit(). -
statistics
Statistics gatherer for this context. -
ecListeners
Set of listeners who need to know when this ExecutionContext is closing, so they can clean up. -
contextInfoThreadLocal
Thread-specific state information (instances ofExecutionContextImpl.ThreadContextInfo) used where we don't want to pass information down through a large number of method calls.
-
-
Constructor Details
-
ExecutionContextImpl
public ExecutionContextImpl(PersistenceNucleusContext ctx, Object owner, Map<String, Object> options) Constructor. TODO userName/password aren't currently used and we always use the PMF/EMF userName/password.- Parameters:
ctx- NucleusContextowner- Owning object (for bytecode enhancement contract, PersistenceManager)options- Any options affecting startup- Throws:
NucleusUserException- if an error occurs allocating the necessary requested components
-
-
Method Details
-
initialise
- Specified by:
initialisein interfaceExecutionContext
-
close
-
internalClose
protected void internalClose()Method to clear out the context. -
registerExecutionContextListener
Description copied from interface:ExecutionContextRegister a listener to be called when this ExecutionContext is closing.- Specified by:
registerExecutionContextListenerin interfaceExecutionContext- Parameters:
listener- The listener
-
deregisterExecutionContextListener
Description copied from interface:ExecutionContextDeregister a listener from calling when this ExecutionContext is closing.- Specified by:
deregisterExecutionContextListenerin interfaceExecutionContext- Parameters:
listener- The listener
-
setLevel2Cache
protected void setLevel2Cache(boolean flag) Method to set whether we are supporting the Level2 Cache with this ExecutionContext Note that if the NucleusContext has no Level2 Cache enabled then you cannot turn it on here.- Parameters:
flag- Whether to enable/disable it
-
isClosed
public boolean isClosed()Accessor for whether this context is closed.- Specified by:
isClosedin interfaceExecutionContext- Returns:
- Whether this manager is closed.
-
acquireThreadContextInfo
Accessor for the thread context information, for the current thread. If the current thread is not present, will add an info context for it.You must call
releaseThreadContextInfo()when you don't need it anymore, since we use reference counting. Use a try...finally-block for this purpose.- Returns:
- The thread context information
- See Also:
-
getThreadContextInfo
Get the current ThreadContextInfo assigned to the current thread without changing the reference counter.- Returns:
- the thread context information
- See Also:
-
releaseThreadContextInfo
protected void releaseThreadContextInfo()Method to remove the current thread context info for the current thread, after the reference counter reached 0. This method decrements a reference counter (per thread), that is incremented byacquireThreadContextInfo().- See Also:
-
transactionStarted
public void transactionStarted()Description copied from interface:TransactionEventListenerMethod invoked when the transaction is started.- Specified by:
transactionStartedin interfaceTransactionEventListener
-
transactionPreFlush
public void transactionPreFlush()Description copied from interface:TransactionEventListenerMethod invoked just before a flush.- Specified by:
transactionPreFlushin interfaceTransactionEventListener
-
transactionFlushed
public void transactionFlushed()Description copied from interface:TransactionEventListenerMethod invoked when the transaction is flushed (happens before commit, rollback).- Specified by:
transactionFlushedin interfaceTransactionEventListener
-
transactionPreCommit
public void transactionPreCommit()Description copied from interface:TransactionEventListenerMethod invoked before the transaction commit.- Specified by:
transactionPreCommitin interfaceTransactionEventListener
-
transactionCommitted
public void transactionCommitted()Description copied from interface:TransactionEventListenerMethod invoked when the transaction is committed.- Specified by:
transactionCommittedin interfaceTransactionEventListener
-
transactionPreRollBack
public void transactionPreRollBack()Description copied from interface:TransactionEventListenerMethod invoked before the transaction is rolledback.- Specified by:
transactionPreRollBackin interfaceTransactionEventListener
-
transactionRolledBack
public void transactionRolledBack()Description copied from interface:TransactionEventListenerMethod invoked when the transaction is rolled back.- Specified by:
transactionRolledBackin interfaceTransactionEventListener
-
transactionEnded
public void transactionEnded()Description copied from interface:TransactionEventListenerMethod invoked when the transaction is ended (Using XA).- Specified by:
transactionEndedin interfaceTransactionEventListener
-
transactionSetSavepoint
Description copied from interface:TransactionEventListenerSavepoint to be registered under this name. Do nothing if not supported- Specified by:
transactionSetSavepointin interfaceTransactionEventListener- Parameters:
name- Name of the savepoint
-
transactionReleaseSavepoint
Description copied from interface:TransactionEventListenerSavepoint to be released for this name. Do nothing if not supported- Specified by:
transactionReleaseSavepointin interfaceTransactionEventListener- Parameters:
name- Name of the savepoint
-
transactionRollbackToSavepoint
Description copied from interface:TransactionEventListenerInvoke a rollback to this savepoint name. Do nothing if not supported.- Specified by:
transactionRollbackToSavepointin interfaceTransactionEventListener- Parameters:
name- Name of the savepoint
-
getStatistics
Description copied from interface:ExecutionContextAccessor for any statistics-gathering object.- Specified by:
getStatisticsin interfaceExecutionContext- Returns:
- The statistics for this manager
-
initialiseLevel1Cache
protected void initialiseLevel1Cache()Method to initialise the L1 cache.- Throws:
NucleusUserException- if an error occurs setting up the L1 cache
-
getLevel1Cache
- Specified by:
getLevel1Cachein interfaceExecutionContext
-
getClassLoaderResolver
Description copied from interface:ExecutionContextAccessor for the ClassLoader resolver to use in class loading issues.- Specified by:
getClassLoaderResolverin interfaceExecutionContext- Returns:
- The ClassLoader resolver
-
getLockManager
Description copied from interface:ExecutionContextAccessor for the lock manager for objects in this execution context.- Specified by:
getLockManagerin interfaceExecutionContext- Returns:
- The lock manager
-
getFetchPlan
Description copied from interface:ExecutionContextAcessor for the current FetchPlan- Specified by:
getFetchPlanin interfaceExecutionContext- Returns:
- FetchPlan
-
getNucleusContext
Description copied from interface:ExecutionContextAccessor for the context in which this execution context is running.- Specified by:
getNucleusContextin interfaceExecutionContext- Returns:
- Returns the context.
-
getOwner
Accessor for the owner of this ExecutionContext. This will typically be PersistenceManager (JDO) or EntityManager (JPA).- Specified by:
getOwnerin interfaceExecutionContextReference- Returns:
- The owner
-
setProperties
Description copied from interface:ExecutionContextMethod to set properties on the execution context.- Specified by:
setPropertiesin interfaceExecutionContext- Parameters:
props- The properties
-
setProperty
Description copied from interface:ExecutionContextMethod to set a property on the execution context- Specified by:
setPropertyin interfaceExecutionContext- Parameters:
name- Name of the propertyvalue- Value to set
-
getProperties
Description copied from interface:ExecutionContextAccessor for the defined properties.- Specified by:
getPropertiesin interfaceExecutionContext- Returns:
- Properties for this execution context
-
getBooleanProperty
Description copied from interface:ExecutionContextAccessor for a boolean property value.- Specified by:
getBooleanPropertyin interfaceExecutionContext- Parameters:
name- Name of the property- Returns:
- the value
-
getIntProperty
Description copied from interface:ExecutionContextAccessor for an int property value.- Specified by:
getIntPropertyin interfaceExecutionContext- Parameters:
name- Name of the property- Returns:
- the value
-
getStringProperty
Description copied from interface:ExecutionContextAccessor for a String property value.- Specified by:
getStringPropertyin interfaceExecutionContext- Parameters:
name- Name of the property- Returns:
- The value
-
getProperty
Description copied from interface:ExecutionContextAccessor for a property.- Specified by:
getPropertyin interfaceExecutionContext- Parameters:
name- Name of the property- Returns:
- The value
-
getSupportedProperties
Description copied from interface:ExecutionContextAccessor for the supported property names.- Specified by:
getSupportedPropertiesin interfaceExecutionContext- Returns:
- Set of names
-
getMultithreaded
public boolean getMultithreaded()Description copied from interface:ExecutionContextAccessor for whether this context is multithreaded.- Specified by:
getMultithreadedin interfaceExecutionContext- Returns:
- Whether multithreaded (and hence needing locking)
-
getFlushMode
Description copied from interface:ExecutionContextAccessor for the flush mode. Whether to auto-commit, or whether to delay flushing.- Specified by:
getFlushModein interfaceExecutionContext- Returns:
- The flush mode.
-
isDelayDatastoreOperationsEnabled
public boolean isDelayDatastoreOperationsEnabled()Description copied from interface:ExecutionContextWhether the datastore operations are delayed until commit/flush. In optimistic transactions this is automatically enabled. In datastore transactions there is a persistence property to enable it. If we are committing/flushing then will return false since the delay is no longer required.- Specified by:
isDelayDatastoreOperationsEnabledin interfaceExecutionContext- Returns:
- true if datastore operations are delayed until commit
-
getTenantId
Description copied from interface:ExecutionContextAccessor for the tenant id, for this ExecutionContext.- Specified by:
getTenantIdin interfaceExecutionContext- Returns:
- The tenant id for this context.
-
getCurrentUser
Description copied from interface:ExecutionContextAccessor for the current user, for this ExecutionContext.- Specified by:
getCurrentUserin interfaceExecutionContext- Returns:
- The current user for this context
-
isInserting
Description copied from interface:ExecutionContextTests whether this persistable object is being inserted.- Specified by:
isInsertingin interfaceExecutionContext- Parameters:
pc- the object to verify the status- Returns:
- true if this instance is inserting.
-
getTransaction
Description copied from interface:ExecutionContextAccessor for the current transaction for this execution context.- Specified by:
getTransactionin interfaceExecutionContext- Returns:
- The current transaction
-
enlistInTransaction
Description copied from interface:ExecutionContextMethod to enlist the specified StateManager in the current transaction.- Specified by:
enlistInTransactionin interfaceExecutionContext- Parameters:
sm- StateManager
-
evictFromTransaction
Description copied from interface:ExecutionContextMethod to evict the specified StateManager from the current transaction.- Specified by:
evictFromTransactionin interfaceExecutionContext- Parameters:
sm- StateManager
-
isEnlistedInTransaction
Method to return if an object is enlisted in the current transaction. This is only of use when running "persistence-by-reachability" at commit.- Specified by:
isEnlistedInTransactionin interfaceExecutionContext- Parameters:
id- Identity for the object- Returns:
- Whether it is enlisted in the current transaction
-
addStateManagerToCache
Method to add the object managed by the specified StateManager to the (L1) cache.- Specified by:
addStateManagerToCachein interfaceExecutionContext- Parameters:
sm- StateManager
-
removeStateManagerFromCache
Method to remove the object managed by the specified StateManager from the cache.- Specified by:
removeStateManagerFromCachein interfaceExecutionContext- Parameters:
sm- StateManager
-
findStateManager
Method to return StateManager for an object (if managed).- Specified by:
findStateManagerin interfaceExecutionContext- Parameters:
pc- The object we are checking- Returns:
- StateManager, null if not found.
- Throws:
NucleusUserException- if the persistable object is managed by a different ExecutionContext
-
findStateManager
Find StateManager for the specified object, persisting it if required and assigning a StateManager if doing so- Specified by:
findStateManagerin interfaceExecutionContext- Parameters:
pc- The persistable objectpersist- persists the object if not yet persisted- Returns:
- StateManager
-
findStateManagerForEmbedded
public DNStateManager findStateManagerForEmbedded(Object value, DNStateManager ownerSM, AbstractMemberMetaData mmd, PersistableObjectType objectType) Description copied from interface:ExecutionContextMethod to find StateManager for the passed embedded persistable object. Will create one if not already registered, and tie it to the specified owner.- Specified by:
findStateManagerForEmbeddedin interfaceExecutionContext- Parameters:
value- The embedded objectownerSM- The owner StateManager (if known).mmd- Metadata for the field of the ownerobjectType- Type of persistable object being stored- Returns:
- StateManager for the embedded object
-
findStateManagerOfOwnerForAttachingObject
- Specified by:
findStateManagerOfOwnerForAttachingObjectin interfaceExecutionContext
-
isNonTxAtomic
private boolean isNonTxAtomic()Convenience method for whether any non-tx operations are considered "atomic" (i.e auto-commit).- Returns:
- Whether atomic non-tx behaviour
-
processNontransactionalUpdate
public void processNontransactionalUpdate()Method called when a non-tx update has been performed (via setter call on the persistable object, or via use of mutator methods of a field). Only hands the update across to be "committed" if not part of an owning persist/delete call.- Specified by:
processNontransactionalUpdatein interfaceExecutionContext
-
processNontransactionalAtomicChanges
protected void processNontransactionalAtomicChanges()Handler for all outstanding changes to be "committed" atomically. If a transaction is active, non-tx writes are disabled, or atomic updates not enabled then will do nothing. Otherwise will flush any updates that are outstanding (updates to an object), will perform detachAllOnCommit if enabled (so user always has detached objects), update objects in any L2 cache, and migrates any objects through lifecycle changes. Is similar in content to "flush"+"preCommit"+"postCommit" Note that this handling for updates is not part of standard JDO which expects non-tx updates to migrate an object to P_NONTRANS_DIRTY rather than committing it directly. TODO If any update fails we should throw the appropriate exception for the API -
evictObject
Internal method to evict an object from L1 cache.- Specified by:
evictObjectin interfaceExecutionContext- Parameters:
obj- The object- Throws:
NucleusException- if an error occurs evicting the object
-
evictObjects
Method to evict all objects of the specified type (and optionally its subclasses) that are present in the L1 cache.- Specified by:
evictObjectsin interfaceExecutionContext- Parameters:
cls- Type of persistable objectsubclasses- Whether to include subclasses
-
evictAllObjects
public void evictAllObjects()Method to evict all current objects from L1 cache.- Specified by:
evictAllObjectsin interfaceExecutionContext
-
refreshObject
Description copied from interface:ExecutionContextMethod to do a refresh of an object, updating it from its datastore representation. Also updates the object in the L1/L2 caches.- Specified by:
refreshObjectin interfaceExecutionContext- Parameters:
obj- The object
-
refreshAllObjects
public void refreshAllObjects()Description copied from interface:ExecutionContextMethod to do a refresh of all objects.- Specified by:
refreshAllObjectsin interfaceExecutionContext
-
retrieveObjects
Description copied from interface:ExecutionContextMethod to retrieve the (fields of the) passed object(s).- Specified by:
retrieveObjectsin interfaceExecutionContext- Parameters:
useFetchPlan- Whether to retrieve the current fetch planpcs- The objects
-
persistObject
public <T> T persistObject(T obj, boolean merging) Description copied from interface:ExecutionContextMethod to make an object persistent. Should be called by EXTERNAL APIs (JDO/JPA) only. All INTERNAL (DataNucleus) calls should go via persistObjectInternal(...).- Specified by:
persistObjectin interfaceExecutionContext- Type Parameters:
T- Type of the persistable object- Parameters:
obj- The objectmerging- Whether this object (and dependents) is being merged- Returns:
- The persisted object
-
persistObjects
Description copied from interface:ExecutionContextMethod to persist an array of objects to the datastore. Should be called by EXTERNAL APIs (JDO/JPA) only.- Specified by:
persistObjectsin interfaceExecutionContext- Parameters:
objs- The objects to persist- Returns:
- The persisted objects
-
persistObjectWork
private <T> T persistObjectWork(T obj) Method to make an object persistent. NOT to be called by internal DataNucleus methods.- Parameters:
obj- The object- Returns:
- The persisted object
- Throws:
NucleusUserException- if the object is managed by a different manager
-
persistObjectInternal
public <T> T persistObjectInternal(T obj, FieldValues preInsertChanges, PersistableObjectType objectType, DNStateManager ownerSM, int ownerFieldNum) Description copied from interface:ExecutionContextMethod to make an object persistent which should be called from INTERNAL (DataNucleus) calls only. All EXTERNAL (PM/EM) calls should go via persistObject(Object pc). To be used when providing the owner object details that this is part of (embedded).- Specified by:
persistObjectInternalin interfaceExecutionContext- Type Parameters:
T- Type of the persistable object- Parameters:
obj- The objectpreInsertChanges- Any changes to make before insertingobjectType- Type of objectownerSM- StateManager of the owner when embedded (or attached?) (null if not embedded)ownerFieldNum- Field number in the owner where this is embedded (or attached?) (-1 if not embedded)- Returns:
- The persisted object
-
deleteObjects
Description copied from interface:ExecutionContextMethod to delete an array of objects from the datastore.- Specified by:
deleteObjectsin interfaceExecutionContext- Parameters:
objs- The objects to delete
-
deleteObject
Description copied from interface:ExecutionContextMethod to delete an object from the datastore. NOT to be called by internal methods. Only callable by external APIs (JDO/JPA).- Specified by:
deleteObjectin interfaceExecutionContext- Parameters:
obj- The object
-
deleteObjectWork
Method to delete an object from the datastore. NOT to be called by internal methods. Only callable by external APIs (JDO/JPA).- Parameters:
obj- The object
-
deleteObjectInternal
Description copied from interface:ExecutionContextMethod to delete an object from persistence which should be called from internal calls only. All PM/EM calls should go via deleteObject(Object obj).- Specified by:
deleteObjectInternalin interfaceExecutionContext- Parameters:
obj- Object to delete
-
makeObjectTransient
Description copied from interface:ExecutionContextMethod to migrate an object to transient state.- Specified by:
makeObjectTransientin interfaceExecutionContext- Parameters:
obj- The objectstate- Object containing the state of the fetch plan process (if any)
-
makeObjectTransactional
Description copied from interface:ExecutionContextMethod to make an object transactional.- Specified by:
makeObjectTransactionalin interfaceExecutionContext- Parameters:
obj- The object
-
makeObjectNontransactional
Description copied from interface:ExecutionContextMethod to make the passed object nontransactional.- Specified by:
makeObjectNontransactionalin interfaceExecutionContext- Parameters:
obj- The object
-
attachObject
Description copied from interface:ExecutionContextMethod to attach a persistent detached object. If a different object with the same identity as this object exists in the L1 cache then an exception will be thrown.- Specified by:
attachObjectin interfaceExecutionContext- Type Parameters:
T- Type of the persistable object- Parameters:
ownerSM- StateManager of the owner object that has this in a field that causes this attachpc- The persistable objectsco- Whether the PC object is stored without an identity (embedded/serialised)
-
attachObjectCopy
Description copied from interface:ExecutionContextMethod to attach a persistent detached object returning an attached copy of the object. If the object is of class that is not detachable, a ClassNotDetachableException will be thrown.- Specified by:
attachObjectCopyin interfaceExecutionContext- Type Parameters:
T- Type of the persistable object- Parameters:
ownerSM- StateManager of the owner object that has this in a field that causes this attachpc- The objectsco- Whether it has no identity (second-class object)- Returns:
- The attached object
-
getAttachedObjectForId
Description copied from interface:ExecutionContextConvenience method to return the attached object for the specified id if one exists. Returns null if there is no currently enlisted/cached object with the specified id.- Specified by:
getAttachedObjectForIdin interfaceExecutionContext- Parameters:
id- The id- Returns:
- The attached object
-
detachObject
Description copied from interface:ExecutionContextMethod to detach a persistent object without making a copy. Note that also all the objects which are refered to from this object are detached. If the object is of class that is not detachable a ClassNotDetachableException will be thrown. If the object is not persistent a NucleusUserException is thrown.- Specified by:
detachObjectin interfaceExecutionContext- Type Parameters:
T- Type of the persistable object- Parameters:
state- State for the detachment processobj- The object
-
detachObjects
Description copied from interface:ExecutionContextMethod to detach the passed object(s).- Specified by:
detachObjectsin interfaceExecutionContext- Parameters:
state- State for the detachment process.pcs- The object(s) to detach
-
detachObjectCopy
Description copied from interface:ExecutionContextDetach a copy of the passed persistent object using the provided detach state. If the object is of class that is not detachable it will be detached as transient. If it is not yet persistent it will be first persisted.- Specified by:
detachObjectCopyin interfaceExecutionContext- Type Parameters:
T- Type of the persistable object- Parameters:
state- State for the detachment processpc- The object- Returns:
- The detached object
-
detachAll
public void detachAll()Description copied from interface:ExecutionContextMethod to detach all objects in the context. Detaches all objects enlisted as well as all objects in the L1 cache. Of particular use with JPA when doing a clear of the persistence context.- Specified by:
detachAllin interfaceExecutionContext
-
getAttachDetachReferencedObject
Description copied from interface:ExecutionContextAccess a referenced object for this StateManager during the attach/detach process. When attaching and this is the detached object this returns the newly attached object. When attaching and this is the newly attached object this returns the detached object. When detaching and this is the newly detached object this returns the attached object. When detaching and this is the attached object this returns the newly detached object.- Specified by:
getAttachDetachReferencedObjectin interfaceExecutionContext- Parameters:
sm- StateManager- Returns:
- The referenced object (if any)
-
setAttachDetachReferencedObject
Description copied from interface:ExecutionContextRegister a referenced object against this StateManager for the attach/detach process.- Specified by:
setAttachDetachReferencedObjectin interfaceExecutionContext- Parameters:
sm- StateManagerobj- The referenced object (or null to clear out any reference)
-
newInstance
Method to generate an instance of an interface, abstract class, or concrete PC class.- Specified by:
newInstancein interfaceExecutionContext- Type Parameters:
T- Type of the persistable object- Parameters:
cls- The class of the interface or abstract class, or concrete class defined in MetaData- Returns:
- The instance of this type
- Throws:
NucleusUserException- if an ImplementationCreator instance does not exist and one is needed (i.e not a concrete class passed in)
-
exists
Method to return if the specified object exists in the datastore.- Specified by:
existsin interfaceExecutionContext- Parameters:
obj- The (persistable) object- Returns:
- Whether it exists
-
getManagedObjects
Accessor for the currently managed objects for the current transaction. If the transaction is not active this returns null.- Specified by:
getManagedObjectsin interfaceExecutionContext- Returns:
- Collection of managed objects enlisted in the current transaction
-
getManagedObjects
Accessor for the currently managed objects for the current transaction. If the transaction is not active this returns null.- Specified by:
getManagedObjectsin interfaceExecutionContext- Parameters:
classes- Classes that we want the enlisted objects for- Returns:
- Collection of managed objects enlisted in the current transaction
-
getManagedObjects
Accessor for the currently managed objects for the current transaction. If the transaction is not active this returns null.- Specified by:
getManagedObjectsin interfaceExecutionContext- Parameters:
states- States that we want the enlisted objects for- Returns:
- Collection of managed objects enlisted in the current transaction
-
getManagedObjects
Description copied from interface:ExecutionContextAccessor for the currently managed objects for the current transaction. If the transaction is not active this returns null.- Specified by:
getManagedObjectsin interfaceExecutionContext- Parameters:
states- States that we want the objects forclasses- Classes that we want the objects for- Returns:
- Collection of managed objects enlisted in the current transaction
-
findObject
Description copied from interface:ExecutionContextAccessor for an object of the specified type with the provided id "key". With datastore id or single-field id the "key" is the key of the id, and with composite ids the "key" is the toString() of the id.- Specified by:
findObjectin interfaceExecutionContext- Type Parameters:
T- Type of the persistable- Parameters:
cls- Class of the persistablekey- Value of the key field for SingleFieldIdentity, or the string value of the key otherwise- Returns:
- The object for this id.
-
findObjects
Description copied from interface:ExecutionContextAccessor for objects of the specified type, with the provided id "key"s. With datastore id or single-field id the "key" is the key of the id, and with composite ids the "key" is the toString() of the id.- Specified by:
findObjectsin interfaceExecutionContext- Type Parameters:
T- Type of the persistable- Parameters:
cls- Class of the persistablekeys- Values of the key field for SingleFieldIdentity, or the string value of the keys otherwise- Returns:
- The objects meeting this requirement
-
findObjectByUnique
Description copied from interface:ExecutionContextAccessor for an object of the specified type with the provided values for a unique key. Alternative would be to have an intermediate class and do thisec.findObjectByUnique(cls).for("field1", val1).for("field2", val2).find();- Specified by:
findObjectByUniquein interfaceExecutionContext- Type Parameters:
T- Type of the persistable- Parameters:
cls- Class of the persistablememberNames- Name(s) of the field(s) forming the unique keymemberValues- Value(s) of the field(s) forming the unique key- Returns:
- The object meeting this requirement
-
findObject
Description copied from interface:ExecutionContextShortcut to calling "findObject(id, validate, validate, null)". Note: This is used by the bytecode enhancement contract indnCopyKeyFieldsFromObjectId
- Specified by:
findObjectin interfaceExecutionContext- Specified by:
findObjectin interfaceExecutionContextReference- Parameters:
id- The id of the objectvalidate- Whether to validate the id- Returns:
- The object
-
findObject
public Persistable findObject(Object id, FieldValues fv, Class cls, boolean ignoreCache, boolean checkInheritance) Description copied from interface:ExecutionContextAccessor for an object given the object id and a set of field values to apply to it. This is intended for use where we have done a query and have the id from the results, and we want to create the object, preferably using the cache, and then apply any field values to it.- Specified by:
findObjectin interfaceExecutionContext- Parameters:
id- Id of the object.fv- Field values for the object (to copy in)cls- the type which the object is (optional). Used to instantiate the objectignoreCache- true if it must ignore the cachecheckInheritance- Whether to check the inheritance on the id of the object- Returns:
- The Object
-
findObjectsById
Description copied from interface:ExecutionContextAccessor for objects with the specified identities.- Specified by:
findObjectsByIdin interfaceExecutionContext- Parameters:
identities- Identities of the object(s).validate- Whether to validate the object state- Returns:
- The Objects with these ids (same order)
-
findObject
public Persistable findObject(Object id, boolean validate, boolean checkInheritance, String objectClassName) Accessor for an object given the object id. If validate is false, we return the object if found in the cache, or otherwise a Hollow object with that id. If validate is true we check with the datastore and return an object with the FetchPlan fields loaded. TODO Would be nice, when using checkInheritance, to be able to specify the "id" is an instance of class X or subclass. See IdentityUtils where we have the root class- Specified by:
findObjectin interfaceExecutionContext- Parameters:
id- Id of the object.validate- Whether to validate the object statecheckInheritance- Whether look to the database to determine which class this object is.objectClassName- Class name for the object with this id (if known, optional)- Returns:
- The Object with this id
- Throws:
NucleusObjectNotFoundException- if the object doesn't exist in the datastore
-
getClassDetailsForId
private ExecutionContextImpl.ClassDetailsForId getClassDetailsForId(Object id, String objectClassName, boolean checkInheritance) Convenience method that takes an id, an optional class name for the object it represents, and whether to check for inheritance, and returns class details of the object being represented. Used by the findObject process.- Parameters:
id- The identityobjectClassName- Class name for the object (if known, otherwise is derived)checkInheritance- Whether to check the inheritance level for this id- Returns:
- The details for the class
-
getClassNameForObjectId
-
newObjectId
This method returns an object id instance corresponding to the pcClass and key arguments. Operates in 2 modes :-- The class uses SingleFieldIdentity and the key is the value of the key field
- In all other cases the key is the String form of the object id instance
- Specified by:
newObjectIdin interfaceExecutionContext- Parameters:
pcClass- Class of the persistable object to create the identity forkey- Value of the key for SingleFieldIdentity (or the toString value)- Returns:
- The new object-id instance
-
newObjectId
This method returns an object id instance corresponding to the class name, and the passed object (when using app identity).- Specified by:
newObjectIdin interfaceExecutionContext- Parameters:
className- Name of the class of the object.pc- The persistable object. Used for application-identity- Returns:
- A new object ID.
-
clearDirty
Method to clear an object from the list of dirty objects.- Specified by:
clearDirtyin interfaceExecutionContext- Parameters:
sm- StateManager
-
clearDirty
public void clearDirty()Method to clear all objects marked as dirty (whether directly or indirectly).- Specified by:
clearDirtyin interfaceExecutionContext
-
markDirty
Method to mark an object (StateManager) as dirty.- Specified by:
markDirtyin interfaceExecutionContext- Parameters:
sm- StateManagerdirectUpdate- Whether the object has had a direct update made on it (if known)
-
getManageRelations
public boolean getManageRelations()Accessor for whether to manage relationships at flush/commit.- Specified by:
getManageRelationsin interfaceExecutionContext- Returns:
- Whether to manage relationships at flush/commit.
-
getRelationshipManager
Method to return the RelationshipManager for StateManager. If we are currently managing relations and StateManager has no RelationshipManager allocated then one is created.- Specified by:
getRelationshipManagerin interfaceExecutionContext- Parameters:
sm- StateManager- Returns:
- The RelationshipManager
-
isManagingRelations
public boolean isManagingRelations()Returns whether this context is currently performing the manage relationships task.- Specified by:
isManagingRelationsin interfaceExecutionContext- Returns:
- Whether in the process of managing relations
-
getObjectsToBeFlushed
Convenience method to inspect the list of objects with outstanding changes to flush.- Specified by:
getObjectsToBeFlushedin interfaceExecutionContext- Returns:
- StateManagers for the objects to be flushed.
-
isFlushing
public boolean isFlushing()Returns whether the context is in the process of flushing.- Specified by:
isFlushingin interfaceExecutionContext- Returns:
- true if the context is flushing
-
flush
public void flush()Method callable from external APIs for user-management of flushing. Called by JDO PM.flush, or JPA EM.flush(). Performs management of relations, prior to performing internal flush of all dirty/new/deleted instances to the datastore.- Specified by:
flushin interfaceExecutionContext
-
flushInternal
public void flushInternal(boolean flushToDatastore) This method flushes all dirty, new, and deleted instances to the datastore.- Specified by:
flushInternalin interfaceExecutionContext- Parameters:
flushToDatastore- Whether to ensure any changes reach the datastore Otherwise they will be flushed to the datastore manager and leave it to decide the opportune moment to actually flush them to the datastore- Throws:
NucleusOptimisticException- when optimistic locking error(s) occur
-
getOperationQueue
Description copied from interface:ExecutionContextAccessor for the operation queue. The queue can be null if there are no operations queued (txn not active, not optimistic, no ops arrived yet).- Specified by:
getOperationQueuein interfaceExecutionContext- Returns:
- The operation queue (typically for collections/maps)
-
addOperationToQueue
Description copied from interface:ExecutionContextMethod to add an operation to the queue.- Specified by:
addOperationToQueuein interfaceExecutionContext- Parameters:
oper- The operation to add
-
flushOperationsForBackingStore
Description copied from interface:ExecutionContextMethod to flush all queued operations for the specified backing store (if any).- Specified by:
flushOperationsForBackingStorein interfaceExecutionContext- Parameters:
backingStore- The backing storesm- StateManager
-
operationQueueIsActive
public boolean operationQueueIsActive()Description copied from interface:ExecutionContextAccessor for whether the operation queue is currently active. Will return false if not delaying flush, or not in a transaction, or flushing.- Specified by:
operationQueueIsActivein interfaceExecutionContext- Returns:
- Whether the operation queue is active for adding operations
-
postBegin
public void postBegin()Method to perform any post-begin checks. -
preCommit
public void preCommit()Method to perform any pre-commit checks. -
isObjectModifiedInTransaction
Accessor for whether the object with this identity is modified in the current transaction. Only returns true when using the L2 cache and the object has been modified during the txn.- Specified by:
isObjectModifiedInTransactionin interfaceExecutionContext- Parameters:
id- The identity- Returns:
- Whether it is modified/new/deleted in this transaction
-
markFieldsForUpdateInLevel2Cache
Description copied from interface:ExecutionContextMethod to mark the object with specifed id to have the supplied fields updated in the L2 cache at commit.- Specified by:
markFieldsForUpdateInLevel2Cachein interfaceExecutionContext- Parameters:
id- Id of the objectfields- The fields to update
-
performLevel2CacheUpdateAtCommit
private void performLevel2CacheUpdateAtCommit()Method invoked during commit() to perform updates to the L2 cache.- Any objects modified during the current transaction will be added/updated in the L2 cache.
- Any objects that aren't modified but have been enlisted will be added to the L2 cache.
- Any objects that are modified but no longer enlisted (due to garbage collection) will be removed from the L2 cache (to avoid giving out old data).
-
performDetachAllOnTxnEndPreparation
private void performDetachAllOnTxnEndPreparation()Method to perform all necessary preparation for detach-all-on-commit/detach-all-on-rollback. Identifies all objects affected and makes sure that all fetch plan fields are loaded. -
performDetachAllOnTxnEnd
private void performDetachAllOnTxnEnd()Method to perform detach-all-on-commit, using the data identified by performDetachAllOnCommitPreparation(). -
isRunningDetachAllOnCommit
public boolean isRunningDetachAllOnCommit()Accessor for whether this context is currently running detachAllOnCommit.- Specified by:
isRunningDetachAllOnCommitin interfaceExecutionContext- Returns:
- Whether running detachAllOnCommit
-
postCommit
public void postCommit()Commit any changes made to objects managed by the object manager to the database. -
preRollback
public void preRollback()Rollback any changes made to objects managed by the object manager to the database. -
postRollback
public void postRollback()Callback invoked after the actual datastore rollback. -
resetTransactionalVariables
private void resetTransactionalVariables()Convenience method to reset all state variables for the transaction, performed at commit/rollback. -
getLevel2CacheRetrieveMode
-
getLevel2CacheStoreMode
-
putObjectIntoLevel1Cache
Convenience method to add an object to the L1 cache.- Specified by:
putObjectIntoLevel1Cachein interfaceExecutionContext- Parameters:
sm- StateManager
-
getCacheUniqueKeyForStateManager
Method to return a CacheUniqueKey to use when caching the object managed by the supplied StateManager for the specified unique key.- Parameters:
sm- StateManagerunimd- The unique key that this key will relate to- Returns:
- The CacheUniqueKey, or null if any member of the unique key is null, or if the unique key is not defined on members
-
putObjectIntoLevel2Cache
Description copied from interface:ExecutionContextMethod to add/update the managed object into the L2 cache as long as it isn't modified in the current transaction.- Specified by:
putObjectIntoLevel2Cachein interfaceExecutionContext- Parameters:
sm- StateManager for the objectupdateIfPresent- Whether to update it in the L2 cache if already present
-
getL2CacheableObject
Convenience method to convert the object managed by StateManager into a form suitable for caching in an L2 cache.- Parameters:
sm- StateManager for the objectcurrentCachedPC- Current L2 cached object (if any) to use for updating- Returns:
- The cacheable form of the object
-
putObjectsIntoLevel2Cache
Method to put the passed objects into the L2 cache. Performs the "put" in batches- Parameters:
sms- StateManagers whose objects are to be cached
-
putObjectIntoLevel2CacheInternal
Convenience method to add/update an object in the L2 cache.- Parameters:
sm- StateManager of the object to add.updateIfPresent- Whether to update the L2 cache if it is present
-
removeObjectFromLevel1Cache
Convenience method to evict an object from the L1 cache.- Specified by:
removeObjectFromLevel1Cachein interfaceExecutionContext- Parameters:
id- The Persistable object id
-
removeObjectFromLevel2Cache
Convenience method to remove the object with the specified identity from the L2 cache.- Specified by:
removeObjectFromLevel2Cachein interfaceExecutionContext- Parameters:
id- Identity of the object
-
hasIdentityInCache
Whether the specified identity is cached currently. Looks in L1 cache and L2 cache.- Specified by:
hasIdentityInCachein interfaceExecutionContext- Parameters:
id- The identity- Returns:
- Whether an object exists in the cache(s) with this identity
-
getObjectFromCache
Convenience method to access an object in the cache. Firstly looks in the L1 cache for this context, and if not found looks in the L2 cache.- Specified by:
getObjectFromCachein interfaceExecutionContext- Parameters:
id- Id of the object- Returns:
- Persistable object (with connected StateManager).
-
getObjectsFromCache
Convenience method to access objects in the cache. Firstly looks in the L1 cache for this context, and if not found looks in the L2 cache.- Specified by:
getObjectsFromCachein interfaceExecutionContext- Parameters:
ids- Ids of the objects- Returns:
- Persistable objects (with connected StateManagers), or null.
-
getObjectFromLevel1Cache
Convenience method to access an object in the Level 1 cache.- Parameters:
id- Id of the object- Returns:
- Persistable object (with connected StateManager).
-
getObjectFromLevel2Cache
Convenience method to access an object in the Level 2 cache.- Parameters:
id- Id of the object- Returns:
- Persistable object (with connected StateManager).
-
getObjectFromLevel2CacheForUnique
Convenience method to access the identity that corresponds to a unique key, in the Level 2 cache.- Parameters:
uniKey- The CacheUniqueKey to use in lookups- Returns:
- Identity of the associated object
-
getObjectsFromLevel2Cache
Convenience method to access a collection of objects from the Level 2 cache.- Parameters:
ids- Collection of ids to retrieve- Returns:
- Map of persistable objects (with connected StateManager) keyed by their id if found in the L2 cache
-
replaceObjectId
Replace the previous object id for a persistable object with a new one. This is used where we have already added the object to the cache(s) and/or enlisted it in the txn before its real identity was fixed (attributed in the datastore).- Specified by:
replaceObjectIdin interfaceExecutionContext- Parameters:
pc- The Persistable objectoldID- the old id it was known bynewID- the new id
-
getSerializeReadForClass
Convenience method to return the setting for serialize read for the current transaction for the specified class name. Returns the setting for the transaction (if set), otherwise falls back to the setting for the class, otherwise returns false.- Specified by:
getSerializeReadForClassin interfaceExecutionContext- Parameters:
className- Name of the class- Returns:
- Setting for serialize read
-
getExtent
Extents are collections of datastore objects managed by the datastore, not by explicit user operations on collections. Extent capability is a boolean property of classes that are persistence capable. If an instance of a class that has a managed extent is made persistent via reachability, the instance is put into the extent implicitly.- Specified by:
getExtentin interfaceExecutionContext- Type Parameters:
T- Type of the persistable object- Parameters:
pcClass- The class to querysubclasses- Whether to include subclasses in the query.- Returns:
- returns an Extent that contains all of the instances in the parameter class, and if the subclasses flag is true, all of the instances of the parameter class and its subclasses.
-
getCallbackHandler
Retrieve the callback handler for this context. If the callback handler hasn't yet been created, this will create it.- Specified by:
getCallbackHandlerin interfaceExecutionContext- Returns:
- the callback handler
-
closeCallbackHandler
public void closeCallbackHandler()Close the callback handler and disconnect any registered listeners.- Specified by:
closeCallbackHandlerin interfaceExecutionContext
-
assertIsOpen
protected void assertIsOpen()Method to assert if this context is open. Throws a NucleusUserException if the context is closed. -
assertClassPersistable
Method to assert if the specified class is Persistence Capable.- Specified by:
assertClassPersistablein interfaceExecutionContext- Parameters:
cls- The class to check- Throws:
ClassNotPersistableException- if class is not persistableNoPersistenceInformationException- if no metadata/annotations are found for class
-
assertDetachable
Method to assert if the specified object is Detachable. Throws a ClassNotDetachableException if not capable- Parameters:
object- The object to check
-
assertNotDetached
Method to assert if the specified object is detached. Throws a ObjectDetachedException if it is detached.- Parameters:
object- The object to check
-
assertActiveTransaction
protected void assertActiveTransaction()Method to assert if the current transaction is active. Throws a TransactionNotActiveException if not active -
hasPersistenceInformationForClass
Utility method to check if the specified class has reachable metadata or annotations.- Specified by:
hasPersistenceInformationForClassin interfaceExecutionContext- Parameters:
cls- The class to check- Returns:
- Whether the class has reachable metadata or annotations
-
getFetchGroupManager
Convenience accessor for the FetchGroupManager. Creates it if not yet existing.- Returns:
- The FetchGroupManager
-
addInternalFetchGroup
Method to add a dynamic FetchGroup.- Specified by:
addInternalFetchGroupin interfaceExecutionContext- Parameters:
grp- The group
-
removeInternalFetchGroup
Method to remove a dynamic FetchGroup.- Parameters:
grp- The group
-
getInternalFetchGroup
Accessor for an internal fetch group for the specified class.- Specified by:
getInternalFetchGroupin interfaceExecutionContext- Parameters:
cls- The classname- Name of the group- Returns:
- The FetchGroup
- Throws:
NucleusUserException- if the class is not persistable
-
getFetchGroupsWithName
Accessor for the fetch groups for the specified name.- Specified by:
getFetchGroupsWithNamein interfaceExecutionContext- Parameters:
name- Name of the group- Returns:
- The FetchGroup
-
registerEmbeddedRelation
public ExecutionContext.EmbeddedOwnerRelation registerEmbeddedRelation(DNStateManager ownerSM, int ownerMemberNum, PersistableObjectType objectType, DNStateManager embSM) Description copied from interface:ExecutionContextMethod to register an embedded relation for the specified member of the owner StateManager where the embedded StateManager is stored.- Specified by:
registerEmbeddedRelationin interfaceExecutionContext- Parameters:
ownerSM- Owner StateManagerownerMemberNum- Member number that is embeddedobjectType- Type of object being persistedembSM- StateManager of the embedded object- Returns:
- The EmbeddedOwnerRelation
-
deregisterEmbeddedRelation
Description copied from interface:ExecutionContextMethod to deregister the specified embedded relation (e.g when the embedded object is disconnected).- Specified by:
deregisterEmbeddedRelationin interfaceExecutionContext- Parameters:
rel- The embedded relation
-
removeEmbeddedOwnerRelation
public void removeEmbeddedOwnerRelation(DNStateManager ownerSM, int ownerFieldNum, DNStateManager embSM) Description copied from interface:ExecutionContextConvenience method to remove the EmbeddedOwnerRelation between the specified StateManagers.- Specified by:
removeEmbeddedOwnerRelationin interfaceExecutionContext- Parameters:
ownerSM- Owner StateManagerownerFieldNum- Field in ownerembSM- Embedded StateManager
-
getOwnerForEmbeddedStateManager
Description copied from interface:ExecutionContextAccessor for the owner StateManager for the provided embedded StateManager.- Specified by:
getOwnerForEmbeddedStateManagerin interfaceExecutionContext- Parameters:
embSM- StateManager that is embedded- Returns:
- The owner StateManager that have this object embedded.
-
getOwnerInformationForEmbedded
Description copied from interface:ExecutionContextAccessor for the owner relation for the specified embedded StateManager where it is embedded.- Specified by:
getOwnerInformationForEmbeddedin interfaceExecutionContext- Parameters:
embSM- StateManager that is embedded- Returns:
- The embedded relation info involving this (embedded) StateManager
-
getEmbeddedInformationForOwner
public List<ExecutionContext.EmbeddedOwnerRelation> getEmbeddedInformationForOwner(DNStateManager ownerSM) Description copied from interface:ExecutionContextAccessor for the relations for the specified embedded StateManager where it is embedded.- Specified by:
getEmbeddedInformationForOwnerin interfaceExecutionContext- Parameters:
ownerSM- StateManager that owns the embedded- Returns:
- The List of embedded relations involving this StateManager as owner
-
setStateManagerAssociatedValue
- Specified by:
setStateManagerAssociatedValuein interfaceExecutionContext
-
getStateManagerAssociatedValue
- Specified by:
getStateManagerAssociatedValuein interfaceExecutionContext
-
removeStateManagerAssociatedValue
- Specified by:
removeStateManagerAssociatedValuein interfaceExecutionContext
-
containsStateManagerAssociatedValue
- Specified by:
containsStateManagerAssociatedValuein interfaceExecutionContext
-