Class BaseCache

java.lang.Object
com.sun.appserv.util.cache.BaseCache
All Implemented Interfaces:
Cache
Direct Known Subclasses:
LruCache, MultiLruCache

public class BaseCache extends Object implements Cache
BaseCache Generic in-memory, abstract cache
  • Field Details

    • maxEntries

      protected int maxEntries
    • entryCount

      protected int entryCount
    • threshold

      protected int threshold
      threshold for the cache; once the threshold is reached entries are removed to accomodate newer inserts
    • hitCount

      protected int hitCount
    • missCount

      protected int missCount
    • removalCount

      protected int removalCount
    • maxBuckets

      protected int maxBuckets
    • buckets

      protected BaseCache.CacheItem[] buckets
    • bucketLocks

      protected Object[] bucketLocks
    • refreshFlags

      protected boolean[] refreshFlags
    • listeners

      protected ArrayList listeners
  • Constructor Details

    • BaseCache

      public BaseCache()
      default constructor for the basic cache
  • Method Details

    • init

      public void init(int maxEntries, Properties props) throws Exception
      initialize the cache
      Specified by:
      init in interface Cache
      Parameters:
      maxEntries - maximum number of entries expected in the cache
      props - opaque list of properties for a given cache implementation
      Throws:
      a - generic Exception if the initialization failed
      Exception
    • init

      public void init(int maxEntries, float loadFactor, Properties props)
      initialize the cache
      Specified by:
      init in interface Cache
      Parameters:
      maxEntries - maximum number of entries expected in the cache
      loadFactor - the load factor
      props - opaque list of properties for a given cache implementation
      Throws:
      a - generic Exception if the initialization failed
    • addCacheListener

      public void addCacheListener(CacheListener listener)
      add the cache module listener
      Specified by:
      addCacheListener in interface Cache
      Parameters:
      listener - CacheListener implementation
    • hash

      protected int hash(Object x)
      Returns a hash code for non-null Object x.
    • eq

      protected boolean eq(Object x, Object y)
      Check for equality of non-null reference x and possibly-null y.
    • handleOverflow

      protected void handleOverflow()
      increase the threshold
    • itemAdded

      protected BaseCache.CacheItem itemAdded(BaseCache.CacheItem item)
      this item is just added to the cache
      Parameters:
      item - CacheItem that was created
      Returns:
      a overflow item; may be null Cache bucket is already synchronized by the caller Here, if cache is overflowing (i.e. reached threshold); this class simply makes the cache unbounded by raising the threshold. Subclasses are expected to provide a robust cache replacement algorithm. Subclasses should enhance this implemntation.
    • itemAccessed

      protected void itemAccessed(BaseCache.CacheItem item)
      this item is accessed
      Parameters:
      item - CacheItem accessed Cache bucket is already synchronized by the caller
    • itemRefreshed

      protected void itemRefreshed(BaseCache.CacheItem item, int oldSize)
      item value has been refreshed
      Parameters:
      item - CacheItem that was refreshed
      oldSize - size of the previous value that was refreshed Cache bucket is already synchronized by the caller
    • itemRemoved

      protected void itemRemoved(BaseCache.CacheItem item)
      item value has been removed from the cache
      Parameters:
      item - CacheItem that was just removed Cache bucket is already synchronized by the caller
    • loadValue

      protected Object loadValue(Object key, int hashCode)
      Cannot find an item with the given key and hashCode
      Parameters:
      key - Object that is not found
      hashCode - int its hashCode
    • createItem

      protected BaseCache.CacheItem createItem(int hashCode, Object key, Object value, int size)
      create new item
      Parameters:
      hashCode - for the entry
      key - Object key
      value - Object value
      size - size in bytes of the item subclasses may override to provide their own CacheItem extensions e.g. one that permits persistence.
    • isThresholdReached

      protected boolean isThresholdReached()
      has cache reached its threshold
      Returns:
      true when the cache reached its threshold
    • getIndex

      protected final int getIndex(int hashCode)
      get the index of the item in the cache
      Parameters:
      hashCode - of the entry
      Returns:
      the index to be used in the cache
    • getIndex

      public final int getIndex(Object key)
      get the index of the item given a key
      Specified by:
      getIndex in interface Cache
      Parameters:
      key - of the entry
      Returns:
      the index to be used in the cache
    • get

      public Object get(Object key)
      get the item stored at the key.
      Specified by:
      get in interface Cache
      Parameters:
      key - lookup key
    • get

      public Object get(int hashCode, Object key)
      get the item stored at the given pre-computed hash code and the key.
      Parameters:
      key - lookup key
    • contains

      public boolean contains(Object key)
      check if the cache contains the item at the key
      Specified by:
      contains in interface Cache
      Parameters:
      key - lookup key
    • getAll

      public Iterator getAll(Object key)
      get all the items stored at the key.
      Specified by:
      getAll in interface Cache
      Parameters:
      key - lookup key
    • keys

      public Iterator keys()
      get an Iterator for the keys stored in the cache
      Specified by:
      keys in interface Cache
    • elements

      public Enumeration elements()
      get an Enumeration for the keys stored in the cache
      Specified by:
      elements in interface Cache
    • values

      public Iterator values()
      get an Iterator for the values stored in the cache
      Specified by:
      values in interface Cache
    • put

      public Object put(Object key, Object value)
      /** cache the given value at the specified key and return previous value
      Specified by:
      put in interface Cache
      Parameters:
      key - lookup key
      object - item value to be stored
    • put

      public Object put(Object key, Object value, int size)
      cache the given value at the specified key and return previous value
      Specified by:
      put in interface Cache
      Parameters:
      key - lookup key
      object - item value to be stored
      size - in bytes of the value being cached
    • add

      public void add(Object key, Object value)
      add the given value to the cache at the specified key
      Specified by:
      add in interface Cache
      Parameters:
      key - lookup key
      object - item value to be stored
    • add

      public void add(Object key, Object value, int size)
      add the given value with specified size to the cache at specified key
      Specified by:
      add in interface Cache
      Parameters:
      key - lookup key
      object - item value to be stored
      size - in bytes of the value being added This function is suitable for multi-valued keys.
    • _put

      protected Object _put(int hashCode, Object key, Object value, int size, boolean addValue)
      cache the given value at the specified key and return previous value
      Parameters:
      hashCode - previously computed hashCode for the key
      key - lookup key
      object - item value to be stored
      size - in bytes of the value being cached
      addValue - treate this operation to add (default is to replace)
    • remove

      public Object remove(Object key)
      remove the item stored at the key.
      Specified by:
      remove in interface Cache
      Parameters:
      key - lookup key
    • remove

      public Object remove(int hashCode, Object key)
      remove the item stored at the key.
      Parameters:
      hashCode - a precomputed hashCode
      key - lookup key
    • remove

      public Object remove(Object key, Object value)
      remove the given value stored at the key; value-specific removals.
      Specified by:
      remove in interface Cache
      Parameters:
      key - lookup key
      value - to match (for a multi-valued keys)
    • _remove

      protected BaseCache.CacheItem _remove(int hashCode, Object key, Object value)
      remove the item stored at the key.
      Parameters:
      hashCode - a precomputed hashCode
      key - lookup key
      value - of the item to be matched
    • _removeItem

      protected BaseCache.CacheItem _removeItem(BaseCache.CacheItem ritem)
      remove the item stored at the key.
      Parameters:
      item - CacheItem to be removed
      Returns:
      the item stored at the key; null if not found.
    • removeAll

      public void removeAll(Object key)
      remove all the item with the given key.
      Specified by:
      removeAll in interface Cache
      Parameters:
      key - lookup key
    • trimItem

      protected void trimItem(BaseCache.CacheItem item)
      trim the item from the cache and notify listeners
      Parameters:
      item - to be trimmed
    • waitRefresh

      public boolean waitRefresh(int index)
      wait for a refresh on the object associated with the key
      Specified by:
      waitRefresh in interface Cache
      Parameters:
      key - lookup key
    • notifyRefresh

      public void notifyRefresh(int index)
      notify threads waiting for a refresh on the object associated with the key
      Specified by:
      notifyRefresh in interface Cache
      Parameters:
      key - lookup key
    • clear

      public int clear()
      clear all the entries from the cache.
      Specified by:
      clear in interface Cache
    • trimExpiredEntries

      public void trimExpiredEntries(int maxCount)
      trim the expired entries from the cache.
      Specified by:
      trimExpiredEntries in interface Cache
      Parameters:
      maxCount - maximum number of invalid entries to trim specify Integer.MAX_VALUE to trim all timedout entries This call is to be scheduled by a thread managed by the container.
    • getEntryCount

      public int getEntryCount()
      get the number of entries in the cache
      Specified by:
      getEntryCount in interface Cache
      Returns:
      the number of entries the cache currently holds
    • isEmpty

      public boolean isEmpty()
      is this cache empty?
      Specified by:
      isEmpty in interface Cache
    • incrementEntryCount

      protected final void incrementEntryCount()
      synchronized counter updates
    • decrementEntryCount

      protected final void decrementEntryCount()
    • incrementHitCount

      protected final void incrementHitCount()
    • incrementMissCount

      protected final void incrementMissCount()
    • incrementRemovalCount

      protected final void incrementRemovalCount()
    • incrementRefreshCount

      protected final void incrementRefreshCount()
    • incrementAddCount

      protected final void incrementAddCount()
    • incrementOverflowCount

      protected final void incrementOverflowCount()
    • getStatByName

      public Object getStatByName(String key)
      get the desired statistic counter
      Specified by:
      getStatByName in interface Cache
      Parameters:
      key - to corresponding stat
      Returns:
      an Object corresponding to the stat See also: Constant.java for the key
    • getStats

      public Map getStats()
      get the stats snapshot
      Specified by:
      getStats in interface Cache
      Returns:
      a Map of stats See also: Constant.java for the keys
    • destroy

      public void destroy()
      Sets all references to null. This method should be called at the end of this object's life cycle.
      Specified by:
      destroy in interface Cache
    • clearStats

      public void clearStats()
      clear the stats
      Specified by:
      clearStats in interface Cache