public interface Level2Cache extends Serializable
JDO and JPA allow the use of a level 2 (L2) cache, with the cache shared between PersistenceManagers/EntityManagers. The objects in the level 2 cache don't pertain to any one manager. The L2 cache in DataNucleus is as follows :-
The L2 cache stores an object of type org.datanucleus.cache.CachedPC and is keyed by the identity of the object. The CachedPC contains a persistable object (not connected to an ObjectProvider), together with the indicators for which fields are loaded, as well as values for any relation fields. The persistable object will have values as null for any relation fields, and it is these relation field values stored in the CachedPC that provide linkage to other objects.
The relation field values also do not store actual objects; they store the identities of the related objects. For example if an object X has a 1-1 relation with another persistable object Y then in the relation field values for X for that field we store the identity of Y. Similarly if the field is a Collection, then the relation field values will be a Collection of identities of the related objects. This provides isolation of each object in the L2 cache (so objects aren't storing references to other objects and so allowing garbage collection etc).
Objects are stored in the L2 cache in the following situations
Each class can be configured to be cacheable or not. The default for a persistable class is to be cacheable. Configuration is performed via annotations or XML metadata. If a class is not cacheable then objects of that type aren't stored in the L2 cache.
Modifier and Type | Interface and Description |
---|---|
static class |
Level2Cache.PinnedClass
Representation of a class whose objects will be pinned when put into the L2 cache.
|
Modifier and Type | Method and Description |
---|---|
void |
close()
Method to close the cache when no longer needed.
|
boolean |
containsOid(Object oid)
Accessor for whether an object with the specified id is in the cache
|
void |
evict(Object oid)
Evict the parameter instance from the second-level cache.
|
void |
evictAll()
Evict the parameter instances from the second-level cache.
|
void |
evictAll(Class pcClass,
boolean subclasses)
Evict the parameter instances from the second-level cache.
|
void |
evictAll(Collection oids)
Evict the parameter instances from the second-level cache.
|
void |
evictAll(Object[] oids)
Evict the parameter instances from the second-level cache.
|
CachedPC |
get(Object oid)
Accessor for an object from the cache.
|
Map<Object,CachedPC> |
getAll(Collection oids)
Accessor for a collection of objects from the cache.
|
int |
getNumberOfPinnedObjects()
Accessor for the number of pinned objects in the cache.
|
int |
getNumberOfUnpinnedObjects()
Accessor for the number of unpinned objects in the cache.
|
int |
getSize()
Accessor for the total number of objects in the L2 cache.
|
boolean |
isEmpty()
Accessor for whether the cache is empty.
|
void |
pin(Object oid)
Pin the parameter instance in the second-level cache.
|
void |
pinAll(Class pcClass,
boolean subclasses)
Pin instances in the second-level cache.
|
void |
pinAll(Collection oids)
Pin the parameter instances in the second-level cache.
|
void |
pinAll(Object[] oids)
Pin the parameter instances in the second-level cache.
|
CachedPC |
put(Object oid,
CachedPC pc)
Method to put an object in the cache.
|
void |
putAll(Map<Object,CachedPC> objs)
Method to put several objects into the cache.
|
void |
unpin(Object oid)
Unpin the parameter instance from the second-level cache.
|
void |
unpinAll(Class pcClass,
boolean subclasses)
Unpin instances from the second-level cache.
|
void |
unpinAll(Collection oids)
Unpin the parameter instances from the second-level cache.
|
void |
unpinAll(Object[] oids)
Unpin the parameter instance from the second-level cache.
|
void close()
void evict(Object oid)
oid
- the object id of the instance to evict.void evictAll()
void evictAll(Object[] oids)
oids
- the object ids of the instance to evict.void evictAll(Collection oids)
oids
- the object ids of the instance to evict.void evictAll(Class pcClass, boolean subclasses)
pcClass
- the class of instances to evictsubclasses
- if true, evict instances of subclasses alsovoid pin(Object oid)
oid
- the object id of the instance to pin.void pinAll(Collection oids)
oids
- the object ids of the instances to pin.void pinAll(Object[] oids)
oids
- the object ids of the instances to pin.void pinAll(Class pcClass, boolean subclasses)
pcClass
- the class of instances to pinsubclasses
- if true, pin instances of subclasses alsovoid unpin(Object oid)
oid
- the object id of the instance to unpin.void unpinAll(Collection oids)
oids
- the object ids of the instance to evict.void unpinAll(Object[] oids)
oids
- the object id of the instance to evict.void unpinAll(Class pcClass, boolean subclasses)
pcClass
- the class of instances to unpinsubclasses
- if true, unpin instances of subclasses alsoint getNumberOfPinnedObjects()
int getNumberOfUnpinnedObjects()
int getSize()
CachedPC get(Object oid)
oid
- The Object IDMap<Object,CachedPC> getAll(Collection oids)
oids
- The Object IDsCachedPC put(Object oid, CachedPC pc)
oid
- The Object id for this objectpc
- The L2 cacheable persistable objectvoid putAll(Map<Object,CachedPC> objs)
objs
- Map of cacheable object keyed by its oid.boolean isEmpty()
boolean containsOid(Object oid)
oid
- The object idCopyright © 2017. All rights reserved.