Class TimedCachePolicy

  • All Implemented Interfaces:
    java.lang.Runnable, CachePolicy

    public class TimedCachePolicy
    extends java.util.TimerTask
    implements CachePolicy
    An implementation of a timed cache. This is a cache whose entries have a limited lifetime with the ability to refresh their lifetime. The entries managed by the cache implement the TimedCachePolicy.TimedEntry interface. If an object inserted into the cache does not implement this interface, it will be wrapped in a DefaultTimedEntry and will expire without the possibility of refresh after getDefaultLifetime() seconds. This is a lazy cache policy in that objects are not checked for expiration until they are accessed.
    Version:
    $Revision$
    • Constructor Summary

      Constructors 
      Constructor Description
      TimedCachePolicy()
      Creates a new TimedCachePolicy with a default entry lifetime of 30 mins that does not synchronized access to its policy store and uses a 60 second resolution.
      TimedCachePolicy​(int defaultLifetime)
      Creates a new TimedCachePolicy with the given default entry lifetime that does not synchronized access to its policy store and uses a 60 second resolution.
      TimedCachePolicy​(int defaultLifetime, boolean threadSafe, int resolution)
      Creates a new TimedCachePolicy with the given default entry lifetime that does/does not synchronized access to its policy store depending on the value of threadSafe.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void create()
      Initializes the cache for use.
      long currentTimeMillis()
      Get the cache time.
      void destroy()
      Clears the cache of all entries.
      void flush()
      Remove all entries from the cache.
      java.lang.Object get​(java.lang.Object key)
      Get the cache value for key if it has not expired.
      int getDefaultLifetime()
      Get the default lifetime of cache entries.
      int getResolution()
      Get the frequency of the current time snapshot.
      java.util.List getValidKeys()
      Get the list of keys for entries that are not expired.
      void insert​(java.lang.Object key, java.lang.Object value)
      Insert a value into the cache.
      java.lang.Object peek​(java.lang.Object key)
      Get the cache value for key.
      TimedCachePolicy.TimedEntry peekEntry​(java.lang.Object key)
      Get the raw TimedEntry for key without performing any expiration check.
      void remove​(java.lang.Object key)
      Remove the entry associated with key and call destroy on the entry if found.
      void run()
      The TimerTask run method.
      void setDefaultLifetime​(int defaultLifetime)
      Set the default lifetime of cache entries for new values added to the cache.
      void setResolution​(int resolution)
      Set the cache timer resolution
      int size()  
      void start()
      Schedules this with the class resolutionTimer Timer object for execution every resolution seconds.
      void stop()
      Stop cancels the resolution timer and flush()es the cache.
      • Methods inherited from class java.util.TimerTask

        cancel, scheduledExecutionTime
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • TIMER_CLASSLOADER_PROPERTY

        public static final java.lang.String TIMER_CLASSLOADER_PROPERTY
        Name of system property that this class consults to determine what classloader to assign to its static Timer's thread.
        See Also:
        Constant Field Values
      • TIMER_CLASSLOADER_SYSTEM

        public static final java.lang.String TIMER_CLASSLOADER_SYSTEM
        Value for TIMER_CLASSLOADER_PROPERTY indicating the system classloader should be used. This is the default value if the system property is not set.
        See Also:
        Constant Field Values
      • TIMER_CLASSLOADER_CONTEXT

        public static final java.lang.String TIMER_CLASSLOADER_CONTEXT
        Value for TIMER_CLASSLOADER_PROPERTY indicating the thread context classloader in effect when this class is loaded should be used.
        See Also:
        Constant Field Values
      • log

        private static final org.jboss.logging.Logger log
      • resolutionTimer

        protected static java.util.Timer resolutionTimer
      • entryMap

        protected java.util.Map entryMap
        The map of cached TimedEntry objects.
      • defaultLifetime

        protected int defaultLifetime
        The lifetime in seconds to use for objects inserted that do not implement the TimedEntry interface.
      • threadSafe

        protected boolean threadSafe
        A flag indicating if entryMap should be synchronized
      • now

        protected long now
        The caches notion of the current time
      • resolution

        protected int resolution
        The resolution in seconds of the cach current time
    • Constructor Detail

      • TimedCachePolicy

        public TimedCachePolicy()
        Creates a new TimedCachePolicy with a default entry lifetime of 30 mins that does not synchronized access to its policy store and uses a 60 second resolution.
      • TimedCachePolicy

        public TimedCachePolicy​(int defaultLifetime)
        Creates a new TimedCachePolicy with the given default entry lifetime that does not synchronized access to its policy store and uses a 60 second resolution.
        Parameters:
        defaultLifetime -
      • TimedCachePolicy

        public TimedCachePolicy​(int defaultLifetime,
                                boolean threadSafe,
                                int resolution)
        Creates a new TimedCachePolicy with the given default entry lifetime that does/does not synchronized access to its policy store depending on the value of threadSafe.
        Parameters:
        defaultLifetime - - the lifetime in seconds to use for objects inserted that do not implement the TimedEntry interface.
        threadSafe - - a flag indicating if the cach store should be synchronized to allow correct operation under multi-threaded access. If true, the cache store is synchronized. If false the cache store is unsynchronized and the cache is not thread safe.
        resolution - - the resolution in seconds of the cache timer. A cache does not query the system time on every get() invocation. Rather the cache updates its notion of the current time every 'resolution' seconds.
    • Method Detail

      • create

        public void create()
        Initializes the cache for use. Prior to this the cache has no store.
        Specified by:
        create in interface CachePolicy
      • start

        public void start()
        Schedules this with the class resolutionTimer Timer object for execution every resolution seconds.
        Specified by:
        start in interface CachePolicy
      • stop

        public void stop()
        Stop cancels the resolution timer and flush()es the cache.
        Specified by:
        stop in interface CachePolicy
      • destroy

        public void destroy()
        Clears the cache of all entries.
        Specified by:
        destroy in interface CachePolicy
      • get

        public java.lang.Object get​(java.lang.Object key)
        Get the cache value for key if it has not expired. If the TimedEntry is expired its destroy method is called and then removed from the cache.
        Specified by:
        get in interface CachePolicy
        Parameters:
        key - the key paired with the object
        Returns:
        the TimedEntry value or the original value if it was not an instance of TimedEntry if key is in the cache, null otherwise.
        See Also:
        CachePolicy.peek(java.lang.Object)
      • peek

        public java.lang.Object peek​(java.lang.Object key)
        Get the cache value for key. This method does not check to see if the entry has expired.
        Specified by:
        peek in interface CachePolicy
        Parameters:
        key - the key paired with the object
        Returns:
        the TimedEntry value or the original value if it was not an instancee of TimedEntry if key is in the cache, null otherwise.
        See Also:
        CachePolicy.get(java.lang.Object)
      • insert

        public void insert​(java.lang.Object key,
                           java.lang.Object value)
        Insert a value into the cache. In order to have the cache entry reshresh itself value would have to implement TimedEntry and implement the required refresh() method logic.
        Specified by:
        insert in interface CachePolicy
        Parameters:
        key - - the key for the cache entry
        value - - Either an instance of TimedEntry that will be inserted without change, or an abitrary value that will be wrapped in a non-refreshing TimedEntry.
        See Also:
        CachePolicy.remove(java.lang.Object)
      • flush

        public void flush()
        Remove all entries from the cache.
        Specified by:
        flush in interface CachePolicy
      • size

        public int size()
        Specified by:
        size in interface CachePolicy
        Returns:
        the size of the cache
      • getValidKeys

        public java.util.List getValidKeys()
        Get the list of keys for entries that are not expired.
        Returns:
        A List of the keys corresponding to valid entries
      • getDefaultLifetime

        public int getDefaultLifetime()
        Get the default lifetime of cache entries.
        Returns:
        default lifetime in seconds of cache entries.
      • setDefaultLifetime

        public void setDefaultLifetime​(int defaultLifetime)
        Set the default lifetime of cache entries for new values added to the cache.
        Parameters:
        defaultLifetime - - lifetime in seconds of cache values that do not implement TimedEntry.
      • getResolution

        public int getResolution()
        Get the frequency of the current time snapshot.
        Returns:
        the current timer resolution in seconds.
      • setResolution

        public void setResolution​(int resolution)
        Set the cache timer resolution
        Parameters:
        resolution - - the resolution in seconds of the cache timer. A cache does not query the system time on every get() invocation. Rather the cache updates its notion of the current time every 'resolution' seconds.
      • run

        public void run()
        The TimerTask run method. It updates the cache time to the current system time.
        Specified by:
        run in interface java.lang.Runnable
        Specified by:
        run in class java.util.TimerTask
      • currentTimeMillis

        public long currentTimeMillis()
        Get the cache time.
        Returns:
        the cache time last obtained from System.currentTimeMillis()
      • peekEntry

        public TimedCachePolicy.TimedEntry peekEntry​(java.lang.Object key)
        Get the raw TimedEntry for key without performing any expiration check.
        Parameters:
        key -
        Returns:
        the TimedEntry value associated with key if one exists, null otherwise.