Class AbstractReferencedLevel2Cache

java.lang.Object
org.datanucleus.cache.AbstractReferencedLevel2Cache
All Implemented Interfaces:
Serializable, Level2Cache
Direct Known Subclasses:
SoftLevel2Cache, WeakLevel2Cache

public abstract class AbstractReferencedLevel2Cache extends Object implements Level2Cache
Abstract referenced implementation of a Level 2 cache, to be used as the base for weak/soft variants.

Operates with 3 maps internally. One stores all pinned objects that have been selected to be retained by user's application. The second stores all other objects, and is the default location where objects are placed when being added here, using weak references meaning that they can get garbage collected as necessary by the JVM. The third stores objects keyed by the unique key that they relate to.

Maintains collections of the classes and the identities that are to be pinned if they ever are put into the cache. These are defined by the pinAll(), pin() methods.

All mutating methods, and the get method have been synchronized to prevent conflicts.

See Also:
  • Field Details

  • Constructor Details

    • AbstractReferencedLevel2Cache

      protected AbstractReferencedLevel2Cache()
    • AbstractReferencedLevel2Cache

      public AbstractReferencedLevel2Cache(NucleusContext nucleusCtx)
      Constructor.
      Parameters:
      nucleusCtx - Context
  • Method Details

    • initialiseCaches

      protected abstract void initialiseCaches()
    • close

      public void close()
      Method to close the cache when no longer needed. Provides a hook to release resources etc.
      Specified by:
      close in interface Level2Cache
    • evict

      public void evict(Object oid)
      Method to evict an object from the cache.
      Specified by:
      evict in interface Level2Cache
      Parameters:
      oid - The id of the object to evict
    • evictAll

      public void evictAll()
      Method to evict all objects from the L2 cache.
      Specified by:
      evictAll in interface Level2Cache
    • evictAll

      public void evictAll(Class pcClass, boolean subclasses)
      Method to evict all objects of the given types from the cache.
      Specified by:
      evictAll in interface Level2Cache
      Parameters:
      pcClass - The class to evict
      subclasses - Whether to also evict subclasses
    • evictAll

      public void evictAll(Collection oids)
      Method to evict the objects with the specified ids.
      Specified by:
      evictAll in interface Level2Cache
      Parameters:
      oids - The ids of the objects to evict
    • evictAll

      public void evictAll(Object[] oids)
      Method to evict the objects with the specified ids.
      Specified by:
      evictAll in interface Level2Cache
      Parameters:
      oids - The ids of the objects to evict
    • get

      public CachedPC get(Object oid)
      Accessor for an object from the cache. The returned object will not have a StateManager connected. This is because data stored in the Level 2 cache is StateManager and PersistenceManager independent.
      Specified by:
      get in interface Level2Cache
      Parameters:
      oid - The Object ID
      Returns:
      The L2 cacheable object
    • getAll

      public Map<Object,CachedPC> getAll(Collection oids)
      Description copied from interface: Level2Cache
      Accessor for a collection of objects from the cache.
      Specified by:
      getAll in interface Level2Cache
      Parameters:
      oids - The Object IDs
      Returns:
      Map of the objects, keyed by the oids that are found
    • getNumberOfPinnedObjects

      public int getNumberOfPinnedObjects()
      Accessor for the number of pinned objects in the cache.
      Specified by:
      getNumberOfPinnedObjects in interface Level2Cache
      Returns:
      Number of pinned objects
    • getNumberOfUnpinnedObjects

      public int getNumberOfUnpinnedObjects()
      Accessor for the number of unpinned objects in the cache.
      Specified by:
      getNumberOfUnpinnedObjects in interface Level2Cache
      Returns:
      Number of unpinned objects
    • getSize

      public int getSize()
      Accessor for the total number of objects in the L2 cache.
      Specified by:
      getSize in interface Level2Cache
      Returns:
      Number of objects
    • putAll

      public void putAll(Map<Object,CachedPC> objs)
      Description copied from interface: Level2Cache
      Method to put several objects into the cache.
      Specified by:
      putAll in interface Level2Cache
      Parameters:
      objs - Map of cacheable object keyed by its oid.
    • put

      public CachedPC put(Object oid, CachedPC pc)
      Method to put an object in the cache.
      Specified by:
      put in interface Level2Cache
      Parameters:
      oid - The Object id for this object
      pc - The cacheable object
      Returns:
      The value previously associated with this oid
    • containsOid

      public boolean containsOid(Object oid)
      Method to check if an object with the specified id is in the cache
      Specified by:
      containsOid in interface Level2Cache
      Parameters:
      oid - The object ID
      Returns:
      Whether it is present
    • isEmpty

      public boolean isEmpty()
      Accessor for whether the cache is empty.
      Specified by:
      isEmpty in interface Level2Cache
      Returns:
      Whether it is empty.
    • getUnique

      public CachedPC getUnique(CacheUniqueKey key)
      Description copied from interface: Level2Cache
      Method to retrieve the id represented by the specified unique key.
      Specified by:
      getUnique in interface Level2Cache
      Parameters:
      key - Unique key
      Returns:
      The "identity" of the object that this unique key represents
    • putUnique

      public CachedPC putUnique(CacheUniqueKey key, CachedPC pc)
      Description copied from interface: Level2Cache
      Method to store a persistable object for this unique key.
      Specified by:
      putUnique in interface Level2Cache
      Parameters:
      key - The unique key
      pc - The representation of the persistable object to cache
      Returns:
      The previous object for this unique key if one was present, otherwise null
    • putUniqueAll

      public void putUniqueAll(Map<CacheUniqueKey,CachedPC> objs)
      Description copied from interface: Level2Cache
      Method to put several objects into the cache.
      Specified by:
      putUniqueAll in interface Level2Cache
      Parameters:
      objs - Map of cacheable object keyed by the unique keys.
    • removeUnique

      public void removeUnique(CacheUniqueKey key)
      Description copied from interface: Level2Cache
      Method to remove any object cached against the provided unique key.
      Specified by:
      removeUnique in interface Level2Cache
      Parameters:
      key - Unique key
    • writeObject

      private void writeObject(ObjectOutputStream out) throws IOException
      Throws:
      IOException
    • readObject

      private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
      Throws:
      IOException
      ClassNotFoundException
    • pin

      public void pin(Object oid)
      Method to pin an object to the cache.
      Specified by:
      pin in interface Level2Cache
      Parameters:
      oid - The id of the object to pin
    • pinAll

      public void pinAll(Class cls, boolean subs)
      Method to pin all objects of the given types.
      Specified by:
      pinAll in interface Level2Cache
      Parameters:
      cls - The class
      subs - Whether to include subclasses
    • pinAll

      public void pinAll(Collection oids)
      Method to pin all of the supplied objects
      Specified by:
      pinAll in interface Level2Cache
      Parameters:
      oids - The Object ids to pin
    • pinAll

      public void pinAll(Object[] oids)
      Method to pin all of the supplied objects
      Specified by:
      pinAll in interface Level2Cache
      Parameters:
      oids - The object ids to pin
    • unpin

      public void unpin(Object oid)
      Method to unpin an object
      Specified by:
      unpin in interface Level2Cache
      Parameters:
      oid - The object id
    • unpinAll

      public void unpinAll(Class cls, boolean subs)
      Method to unpin all objects of the specified types.
      Specified by:
      unpinAll in interface Level2Cache
      Parameters:
      cls - Base class
      subs - Whether to include subclasses
    • unpinAll

      public void unpinAll(Collection oids)
      Method to unpin all of the supplied objects
      Specified by:
      unpinAll in interface Level2Cache
      Parameters:
      oids - The object ids to unpin
    • unpinAll

      public void unpinAll(Object[] oids)
      Method to unpin all of the specified objects
      Specified by:
      unpinAll in interface Level2Cache
      Parameters:
      oids - The object ids to unpin