JBoss API: Class TimedCachePolicy

org.jboss.util
Class TimedCachePolicy

java.lang.Object
  |
  +--java.util.TimerTask
        |
        +--org.jboss.util.TimedCachePolicy
All Implemented Interfaces:
CachePolicy, java.lang.Runnable, Service

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: 1.1.6.1 $
Author:
Scott_Stark@displayscape.com

Inner Class Summary
static interface TimedCachePolicy.TimedEntry
          The interface that cache entries support.
 
Field Summary
protected  int defaultLifetime
          The lifetime in seconds to use for objects inserted that do not implement the TimedEntry interface.
protected  java.util.Map entryMap
          The map of cached TimedEntry objects.
protected  long now
          The caches notion of the current time
protected  int resolution
          The resolution in seconds of the cach current time
protected static java.util.Timer resolutionTimer
           
protected  boolean threadSafe
          A flag indicating if entryMap should be synchronized
 
Constructor Summary
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
 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.
 void init()
          Initializes the cache for use.
 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.
 void run()
          The TimerTask run method.
 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

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.

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

init

public void init()
Initializes the cache for use. Prior to this the cache has no store.
Specified by:
init in interface Service

start

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

stop

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

destroy

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

get

public java.lang.Object get(java.lang.Object key)
Get the cache value for key if it has not expired.
Specified by:
get in interface CachePolicy
Following copied from interface: org.jboss.util.CachePolicy
Parameters:
key - the key paired with the object
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
Following copied from interface: org.jboss.util.CachePolicy
Parameters:
key - the key paired with the object
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.

remove

public void remove(java.lang.Object key)
Remove the entry associated with key.
Specified by:
remove in interface CachePolicy
Following copied from interface: org.jboss.util.CachePolicy
Parameters:
key - the key paired with the object
See Also:
CachePolicy.insert(java.lang.Object, java.lang.Object)

flush

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

run

public void run()
The TimerTask run method. It updates the cache time to the current system time.
Overrides:
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.
Returns:
the TimedEntry value associated with key if one exists, null otherwise.


Copyright © 2000 The JBoss Organization. All Rights Reserved.