Purpose: Maintain identity maps for domain classes mapped with EclipseLink.
Responsibilities:
| Modifier and Type | Field and Description |
|---|---|
| protected Map | cacheIndexes
A map of indexes on the cache. |
| protected transient ConcurrencyManager | cacheMutex
Ensure mutual exclusion depending on the cache isolation. |
| protected Map | identityMaps
A table of identity maps with the key being the domain Class. |
| protected boolean | isCacheAccessPreCheckRequired
PERF: Used to avoid readLock and profiler checks to improve performance. |
| protected IdentityMap | lastAccessedIdentityMap
PERF: Optimize the object retrieval from the identity map. |
| protected static final String | |
| protected Map | queryResults
A table of identity maps with the key being the query |
| protected Map | queryResultsInvalidationsByClass
A map of class to list of queries that need to be invalidated when that class changes. |
| protected AbstractSession | session
A reference to the session owning this manager. |
| protected transient WriteLockManager | writeLockManager
Used to store the write lock manager used for merging. |
| Access | Constructor and Description |
|---|---|
| protected | |
| public |
| Modifier and Type | Method and Description |
|---|---|
| public CacheKey | acquireDeferredLock(Object primaryKey, Class<?> domainClass, ClassDescriptor descriptor, boolean isCacheCheckComplete)
Provides access for setting a deferred lock on an object in the IdentityMap. |
| public CacheKey | acquireLock(Object primaryKey, Class<?> domainClass, boolean forMerge, ClassDescriptor descriptor, boolean isCacheCheckComplete)
Provides access for setting a concurrency lock on an object in the IdentityMap. |
| public CacheKey | acquireLockNoWait(Object primaryKey, Class<?> domainClass, boolean forMerge, ClassDescriptor descriptor)
Provides access for setting a concurrency lock on an object in the IdentityMap. |
| public CacheKey | acquireLockWithWait(Object primaryKey, Class<?> domainClass, boolean forMerge, ClassDescriptor descriptor, int wait)
Provides access for setting a concurrency lock on an object in the IdentityMap. |
| public void | |
| public CacheKey | acquireReadLockOnCacheKey(Object primaryKey, Class<?> domainClass, ClassDescriptor descriptor)
INTERNAL: Find the cachekey for the provided primary key and place a readlock on it. |
| public CacheKey | acquireReadLockOnCacheKeyNoWait(Object primaryKey, Class<?> domainClass, ClassDescriptor descriptor)
INTERNAL: Find the cachekey for the provided primary key and place a readlock on it. |
| public boolean | |
| public IdentityMap | buildNewIdentityMap(ClassDescriptor descriptor)
INTERNAL: (Public to allow testing to access) Return a new empty identity map to cache instances of the class. |
| protected <T extends IdentityMap> IdentityMap | buildNewIdentityMap(final Class<T> identityMapClass, final int size, final ClassDescriptor descriptor, final boolean isIsolated)
INTERNAL: Return a new empty identity map of the class type. |
| protected Object | checkForInheritance(Object domainObject, Class<?> superClass, ClassDescriptor descriptor)
This method is used to resolve the inheritance issues arisen when conforming from the identity map 1. |
| public void | |
| public void | |
| public void | clearLastAccessedIdentityMap()
INTERNAL: Clear the the lastAccessedIdentityMap and the lastAccessedIdentityMapClass |
| public void | |
| public void | |
| public Object | clone()
Overrides java. |
| public boolean | containsKey(Object
is the primary key for the object to search for. key, Class<?> theClass, ClassDescriptor descriptor)Return true if an CacheKey with the primary key is in the map. |
| public Map | Returns: Map of Entity PKs associated to the Entities that were retrievedList of Entity PKs to extract from the cache pkList, ClassDescriptor Descriptor type to be retrieved. descriptor, AbstractSession session)ADVANCED: Using a list of Entity PK this method will attempt to bulk load the entire list from the cache. |
| public Vector | getAllFromIdentityMap(Expression selectionCriteria, Class<?> theClass, DataRecord translationRow, int valueHolderPolicy, boolean shouldReturnInvalidatedObjects)
Query the cache in-memory. |
| public Map | Returns: Map of Entity PKs associated to the Entities that were retrievedList of Entity PKs to extract from the cache pkList, ClassDescriptor Descriptor type to be retrieved. descriptor, AbstractSession session)ADVANCED: Using a list of Entity PK this method will attempt to bulk load the entire list from the cache. |
| public CacheKey | getCacheKeyByIndex(CacheIndex index, CacheId indexValues, boolean shouldCheckExpiry, ClassDescriptor descriptor)
Return the cache key for the cache index or null if not found. |
| public CacheKey | getCacheKeyForObject(Object primaryKey, Class<?> theClass, ClassDescriptor descriptor, boolean forMerge)
Retrieve the cache key for the given identity information. |
| public CacheKey | getCacheKeyForObjectForLock(Object primaryKey, Class<?> theClass, ClassDescriptor descriptor)
Retrieve the cache key for the given identity information. |
| public ConcurrencyManager | |
| public Vector | getClassesRegistered()
This method is used to get a list of those classes with IdentityMaps in the Session. |
| public Object | getFromIdentityMap(Object object)
Get the object from the identity map which has the same identity information as the given object. |
| public Object | getFromIdentityMap(Object key, Class<?> theClass, ClassDescriptor descriptor)
Get the object from the identity map which has the given primary key and class. |
| public Object | getFromIdentityMap(Object key, Class<?> theClass, boolean shouldReturnInvalidatedObjects, ClassDescriptor descriptor)
Get the object from the identity map which has the given primary key and class. |
| public Object | getFromIdentityMap(Expression selectionCriteria, Class<?> theClass, DataRecord translationRow, int valueHolderPolicy, boolean conforming, boolean shouldReturnInvalidatedObjects, ClassDescriptor descriptor)
|
| public Object | getFromIdentityMapWithDeferredLock(Object key, Class<?> theClass, boolean shouldReturnInvalidatedObjects, ClassDescriptor descriptor)
Get the object from the cache with the given primary key and class. |
| public IdentityMap | getIdentityMap(ClassDescriptor descriptor)
INTERNAL: Return the identity map for the class, if missing create a new one. |
| public IdentityMap | getIdentityMap(ClassDescriptor descriptor, boolean
if true return null if no map, otherwise create one. returnNullIfNoMap)INTERNAL: Return the identity map for the class. |
| public Iterator | |
| protected Map | |
| public Object | getQueryResult(ReadQuery query, List<E> parameters, boolean shouldCheckExpiry)
Get the cached results associated with a query. |
| protected AbstractSession | |
| public Object | getWrapper(Object primaryKey, Class<?> theClass)
Get the wrapper object from the cache key associated with the given primary key, this is used for EJB. |
| public WriteLockManager | |
| public Object | getWriteLockValue(Object primaryKey, Class<?> domainClass, ClassDescriptor descriptor)
Retrieve the write lock value of the cache key associated with the given primary key, |
| public void | |
| public void | |
| public void | invalidateObjects(Expression selectionCriteria, Class<?> theClass, DataRecord translationRow, boolean shouldInvalidateOnException)
Invalidate objects meeting selectionCriteria. |
| public void | invalidateQueryCache(Class<?> classThatChanged)
Invalidate/remove any results for the class from the query cache. |
| public void | printIdentityMap(Class<?> businessClass)
Used to print all the objects in the identity map of the passed in class. |
| public void | |
| public void | |
| public void | printLocks(Class<?> theClass)
Used to print all the Locks in the specified identity map in this session. |
| public void | putCacheKeyByIndex(CacheIndex index, CacheId indexValues, CacheKey cacheKey, ClassDescriptor descriptor)
Index the cache key by the index values. |
| public CacheKey | putInIdentityMap(Object domainObject, Object keys, Object writeLockValue, long readTime, ClassDescriptor descriptor)
Register the object with the identity map. |
| public void | |
| protected void | |
| public void | |
| public Object | removeFromIdentityMap(Object key, Class<?> domainClass, ClassDescriptor descriptor, Object objectToRemove)
Remove the object from the object cache. |
| protected void | |
| public void | |
| protected void | |
| public void | setWrapper(Object primaryKey, Class<?> theClass, Object wrapper)
Update the wrapper object the cache key associated with the given primary key, this is used for EJB. |
| public void | setWriteLockValue(Object primaryKey, Class<?> theClass, Object writeLockValue)
Update the write lock value of the cache key associated with the given primary key, |
| cacheIndexes | back to summary |
|---|---|
| protected Map<CacheIndex, IdentityMap> cacheIndexes A map of indexes on the cache. | |
| cacheMutex | back to summary |
|---|---|
| protected transient ConcurrencyManager cacheMutex Ensure mutual exclusion depending on the cache isolation. | |
| identityMaps | back to summary |
|---|---|
| protected Map<Class<?>, IdentityMap> identityMaps A table of identity maps with the key being the domain Class. | |
| isCacheAccessPreCheckRequired | back to summary |
|---|---|
| protected boolean isCacheAccessPreCheckRequired PERF: Used to avoid readLock and profiler checks to improve performance. | |
| lastAccessedIdentityMap | back to summary |
|---|---|
| protected IdentityMap lastAccessedIdentityMap PERF: Optimize the object retrieval from the identity map. | |
| MONITOR_PREFIX | back to summary |
|---|---|
| protected static final String MONITOR_PREFIX | |
| queryResults | back to summary |
|---|---|
| protected Map<Object, IdentityMap> queryResults A table of identity maps with the key being the query | |
| queryResultsInvalidationsByClass | back to summary |
|---|---|
| protected Map<Class<?>, Set<E>> queryResultsInvalidationsByClass A map of class to list of queries that need to be invalidated when that class changes. | |
| session | back to summary |
|---|---|
| protected AbstractSession session A reference to the session owning this manager. | |
| writeLockManager | back to summary |
|---|---|
| protected transient WriteLockManager writeLockManager Used to store the write lock manager used for merging. | |
| IdentityMapManager | back to summary |
|---|---|
| protected IdentityMapManager() | |
| IdentityMapManager | back to summary |
|---|---|
| public IdentityMapManager(AbstractSession session) | |
| acquireDeferredLock | back to summary |
|---|---|
| public CacheKey acquireDeferredLock(Object primaryKey, Class<?> domainClass, ClassDescriptor descriptor, boolean isCacheCheckComplete) Provides access for setting a deferred lock on an object in the IdentityMap. | |
| acquireLock | back to summary |
|---|---|
| public CacheKey acquireLock(Object primaryKey, Class<?> domainClass, boolean forMerge, ClassDescriptor descriptor, boolean isCacheCheckComplete) Provides access for setting a concurrency lock on an object in the IdentityMap. called with true from the merge process, if true then the refresh will not refresh the object. | |
| acquireLockNoWait | back to summary |
|---|---|
| public CacheKey acquireLockNoWait(Object primaryKey, Class<?> domainClass, boolean forMerge, ClassDescriptor descriptor) Provides access for setting a concurrency lock on an object in the IdentityMap. called with true from the merge process, if true then the refresh will not refresh the object. | |
| acquireLockWithWait | back to summary |
|---|---|
| public CacheKey acquireLockWithWait(Object primaryKey, Class<?> domainClass, boolean forMerge, ClassDescriptor descriptor, int wait) Provides access for setting a concurrency lock on an object in the IdentityMap. called with true from the merge process, if true then the refresh will not refresh the object. | |
| acquireReadLock | back to summary |
|---|---|
| public void acquireReadLock() Provides access for setting a concurrency lock on an IdentityMap. | |
| acquireReadLockOnCacheKey | back to summary |
|---|---|
| public CacheKey acquireReadLockOnCacheKey(Object primaryKey, Class<?> domainClass, ClassDescriptor descriptor) INTERNAL: Find the cachekey for the provided primary key and place a readlock on it. This will allow multiple users to read the same object but prevent writes to the object while the read lock is held. | |
| acquireReadLockOnCacheKeyNoWait | back to summary |
|---|---|
| public CacheKey acquireReadLockOnCacheKeyNoWait(Object primaryKey, Class<?> domainClass, ClassDescriptor descriptor) INTERNAL: Find the cachekey for the provided primary key and place a readlock on it. This will allow multiple users to read the same object but prevent writes to the object while the read lock is held. If no readlock can be acquired then do not wait but return null. | |
| acquireWriteLock | back to summary |
|---|---|
| public boolean acquireWriteLock() Lock the entire cache if the cache isolation requires. By default concurrent reads and writes are allowed. By write, unit of work merge is meant. | |
| buildNewIdentityMap | back to summary |
|---|---|
| public IdentityMap buildNewIdentityMap(ClassDescriptor descriptor) INTERNAL: (Public to allow testing to access) Return a new empty identity map to cache instances of the class. | |
| buildNewIdentityMap | back to summary |
|---|---|
| protected <T extends IdentityMap> IdentityMap buildNewIdentityMap(final Class<T> identityMapClass, final int size, final ClassDescriptor descriptor, final boolean isIsolated) throws DescriptorException INTERNAL: Return a new empty identity map of the class type. | |
| checkForInheritance | back to summary |
|---|---|
| protected Object checkForInheritance(Object domainObject, Class<?> superClass, ClassDescriptor descriptor) This method is used to resolve the inheritance issues arisen when conforming from the identity map 1. Avoid reading the unintended subclass during in-memory query(e.g. when querying on large project, do not want to check small project, both are inherited from the project, and stored in the same identity map). 2. EJB container-generated classes broke the inheritance hierarchy. Need to use associated descriptor to track the relationship. CR4005-2612426, King-Sept-18-2002 | |
| checkIsCacheAccessPreCheckRequired | back to summary |
|---|---|
| public void checkIsCacheAccessPreCheckRequired() PERF: Used to micro optimize cache access. Avoid the readLock and profile checks if not required. | |
| clearCacheIndexes | back to summary |
|---|---|
| public void clearCacheIndexes() Clear all index caches. | |
| clearLastAccessedIdentityMap | back to summary |
|---|---|
| public void clearLastAccessedIdentityMap() INTERNAL: Clear the the lastAccessedIdentityMap and the lastAccessedIdentityMapClass | |
| clearQueryCache | back to summary |
|---|---|
| public void clearQueryCache() Clear all the query caches. | |
| clearQueryCache | back to summary |
|---|---|
| public void clearQueryCache(ReadQuery query) Remove the cache key related to a query. Note this method is not synchronized and care should be taken to ensure there are no other threads accessing the cache key. This is used to clean up cached clones of queries. | |
| clone | back to summary |
|---|---|
| public Object clone() Overrides java. INTERNAL: Clones itself, used for uow commit and resume on failure.
| |
| containsKey | back to summary |
|---|---|
| public boolean containsKey(Object key, Class<?> theClass, ClassDescriptor descriptor) Return true if an CacheKey with the primary key is in the map. User API.
| |
| getAllCacheKeysFromIdentityMapWithEntityPK | back to summary |
|---|---|
| public Map ADVANCED: Using a list of Entity PK this method will attempt to bulk load the entire list from the cache. In certain circumstances this can have large performance improvements over loading each item individually.
| |
| getAllFromIdentityMap | back to summary |
|---|---|
| public Vector Query the cache in-memory. | |
| getAllFromIdentityMapWithEntityPK | back to summary |
|---|---|
| public Map ADVANCED: Using a list of Entity PK this method will attempt to bulk load the entire list from the cache. In certain circumstances this can have large performance improvements over loading each item individually.
| |
| getCacheKeyByIndex | back to summary |
|---|---|
| public CacheKey getCacheKeyByIndex(CacheIndex index, CacheId indexValues, boolean shouldCheckExpiry, ClassDescriptor descriptor) Return the cache key for the cache index or null if not found. | |
| getCacheKeyForObject | back to summary |
|---|---|
| public CacheKey getCacheKeyForObject(Object primaryKey, Class<?> theClass, ClassDescriptor descriptor, boolean forMerge) Retrieve the cache key for the given identity information. | |
| getCacheKeyForObjectForLock | back to summary |
|---|---|
| public CacheKey getCacheKeyForObjectForLock(Object primaryKey, Class<?> theClass, ClassDescriptor descriptor) Retrieve the cache key for the given identity information. | |
| getCacheMutex | back to summary |
|---|---|
| public ConcurrencyManager getCacheMutex() Return the cache mutex. This allows for the entire cache to be locked. This is done for transaction isolations on merges, although never locked by default. | |
| getClassesRegistered | back to summary |
|---|---|
| public Vector This method is used to get a list of those classes with IdentityMaps in the Session. | |
| getFromIdentityMap | back to summary |
|---|---|
| public Object getFromIdentityMap(Object object) Get the object from the identity map which has the same identity information as the given object. | |
| getFromIdentityMap | back to summary |
|---|---|
| public Object getFromIdentityMap(Object key, Class<?> theClass, ClassDescriptor descriptor) Get the object from the identity map which has the given primary key and class. | |
| getFromIdentityMap | back to summary |
|---|---|
| public Object getFromIdentityMap(Object key, Class<?> theClass, boolean shouldReturnInvalidatedObjects, ClassDescriptor descriptor) Get the object from the identity map which has the given primary key and class. Only return the object if it has not been invalidated. | |
| getFromIdentityMap | back to summary |
|---|---|
| public Object getFromIdentityMap(Expression selectionCriteria, Class<?> theClass, DataRecord translationRow, int valueHolderPolicy, boolean conforming, boolean shouldReturnInvalidatedObjects, ClassDescriptor descriptor) | |
| getFromIdentityMapWithDeferredLock | back to summary |
|---|---|
| public Object getFromIdentityMapWithDeferredLock(Object key, Class<?> theClass, boolean shouldReturnInvalidatedObjects, ClassDescriptor descriptor) Get the object from the cache with the given primary key and class. Do not return the object if it was invalidated. | |
| getIdentityMap | back to summary |
|---|---|
| public IdentityMap getIdentityMap(ClassDescriptor descriptor) INTERNAL: Return the identity map for the class, if missing create a new one. | |
| getIdentityMap | back to summary |
|---|---|
| public IdentityMap getIdentityMap(ClassDescriptor descriptor, boolean returnNullIfNoMap) INTERNAL: Return the identity map for the class.
| |
| getIdentityMapClasses | back to summary |
|---|---|
| public Iterator Return an iterator of the classes in the identity map. | |
| getIdentityMaps | back to summary |
|---|---|
| protected Map | |
| getQueryResult | back to summary |
|---|---|
| public Object getQueryResult(ReadQuery query, List<E> parameters, boolean shouldCheckExpiry) Get the cached results associated with a query. Results are cached by the values of the parameters to the query so different parameters will have different cached results. | |
| getSession | back to summary |
|---|---|
| protected AbstractSession getSession() | |
| getWrapper | back to summary |
|---|---|
| public Object getWrapper(Object primaryKey, Class<?> theClass) Get the wrapper object from the cache key associated with the given primary key, this is used for EJB. | |
| getWriteLockManager | back to summary |
|---|---|
| public WriteLockManager getWriteLockManager() Returns the single write Lock manager for this session | |
| getWriteLockValue | back to summary |
|---|---|
| public Object getWriteLockValue(Object primaryKey, Class<?> domainClass, ClassDescriptor descriptor) Retrieve the write lock value of the cache key associated with the given primary key, | |
| initializeIdentityMap | back to summary |
|---|---|
| public void initializeIdentityMap(Class<?> theClass) throws EclipseLinkException Reset the identity map for only the instances of the class. For inheritance the user must make sure that they only use the root class. | |
| initializeIdentityMaps | back to summary |
|---|---|
| public void initializeIdentityMaps() | |
| invalidateObjects | back to summary |
|---|---|
| public void invalidateObjects(Expression selectionCriteria, Class<?> theClass, DataRecord translationRow, boolean shouldInvalidateOnException) Invalidate objects meeting selectionCriteria. | |
| invalidateQueryCache | back to summary |
|---|---|
| public void invalidateQueryCache(Class<?> classThatChanged) Invalidate/remove any results for the class from the query cache. This is used to invalidate the query cache on any change. | |
| printIdentityMap | back to summary |
|---|---|
| public void printIdentityMap(Class<?> businessClass) Used to print all the objects in the identity map of the passed in class. The output of this method will be logged to this session's SessionLog at SEVERE level. | |
| printIdentityMaps | back to summary |
|---|---|
| public void printIdentityMaps() Used to print all the objects in every identity map in this session. The output of this method will be logged to this session's SessionLog at SEVERE level. | |
| printLocks | back to summary |
|---|---|
| public void printLocks() Used to print all the Locks in every identity map in this session. The output of this method will be logged to this session's SessionLog at FINEST level. | |
| printLocks | back to summary |
|---|---|
| public void printLocks(Class<?> theClass) Used to print all the Locks in the specified identity map in this session. The output of this method will be logged to this session's SessionLog at FINEST level. | |
| putCacheKeyByIndex | back to summary |
|---|---|
| public void putCacheKeyByIndex(CacheIndex index, CacheId indexValues, CacheKey cacheKey, ClassDescriptor descriptor) Index the cache key by the index values. | |
| putInIdentityMap | back to summary |
|---|---|
| public CacheKey putInIdentityMap(Object domainObject, Object keys, Object writeLockValue, long readTime, ClassDescriptor descriptor) Register the object with the identity map. The object must always be registered with its version number if optimistic locking is used. The readTime may also be included in the cache key as it is constructed | |
| putQueryResult | back to summary |
|---|---|
| public void putQueryResult(ReadQuery query, List<E> parameters, Object results) Set the results for a query. Query results are cached based on the parameter values provided to the query different parameter values access different caches. | |
| releaseReadLock | back to summary |
|---|---|
| protected void releaseReadLock() Read-release the local-map and the entire cache. | |
| releaseWriteLock | back to summary |
|---|---|
| public void releaseWriteLock() Lock the entire cache if the cache isolation requires. By default concurrent reads and writes are allowed. By write, unit of work merge is meant. | |
| removeFromIdentityMap | back to summary |
|---|---|
| public Object removeFromIdentityMap(Object key, Class<?> domainClass, ClassDescriptor descriptor, Object objectToRemove) Remove the object from the object cache. | |
| setCacheMutex | back to summary |
|---|---|
| protected void setCacheMutex(ConcurrencyManager cacheMutex) Set the cache mutex. This allows for the entire cache to be locked. This is done for transaction isolations on merges, although never locked by default. | |
| setIdentityMaps | back to summary |
|---|---|
| public void setIdentityMaps(ConcurrentMap<K, V> identityMaps) | |
| setSession | back to summary |
|---|---|
| protected void setSession(AbstractSession session) | |
| setWrapper | back to summary |
|---|---|
| public void setWrapper(Object primaryKey, Class<?> theClass, Object wrapper) Update the wrapper object the cache key associated with the given primary key, this is used for EJB. | |
| setWriteLockValue | back to summary |
|---|---|
| public void setWriteLockValue(Object primaryKey, Class<?> theClass, Object writeLockValue) Update the write lock value of the cache key associated with the given primary key, | |