ehcache]]>

net.sf.ehcache.jcache
Class JCacheListenerAdaptor

java.lang.Object
  extended by net.sf.ehcache.jcache.JCacheListenerAdaptor
All Implemented Interfaces:
java.lang.Cloneable, CacheEventListener

public class JCacheListenerAdaptor
extends java.lang.Object
implements CacheEventListener

This adaptor permits JCACHE CacheListeners to be registered as Ehcache CacheEventListeners.

Version:
$Id: JCacheListenerAdaptor.java 512 2007-07-10 09:18:45Z gregluck $
Author:
Greg Luck

Constructor Summary
JCacheListenerAdaptor(net.sf.jsr107cache.CacheListener cacheListener)
          Creates an adaptor that delegates to a CacheListener
 
Method Summary
 java.lang.Object clone()
          Creates a clone of this listener.
 void dispose()
          Give the listener a chance to cleanup and free resources when no longer needed.
 net.sf.jsr107cache.CacheListener getCacheListener()
          Gets the underlying CacheListener
 void notifyElementEvicted(Ehcache cache, Element element)
          Called immediately after an element is evicted from the cache.
 void notifyElementExpired(Ehcache cache, Element element)
          Called immediately after an element is found to be expired.
 void notifyElementPut(Ehcache cache, Element element)
          Called immediately after an element has been put into the cache.
 void notifyElementRemoved(Ehcache cache, Element element)
          Called immediately after an element has been removed.
 void notifyElementUpdated(Ehcache cache, Element element)
          Called immediately after an element has been put into the cache and the element already existed in the cache.
 void notifyRemoveAll(Ehcache cache)
          Called during Ehcache.removeAll() to indicate that the all elements have been removed from the cache in a bulk operation.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JCacheListenerAdaptor

public JCacheListenerAdaptor(net.sf.jsr107cache.CacheListener cacheListener)
Creates an adaptor that delegates to a CacheListener

Parameters:
cacheListener - the JCACHE listener.
Method Detail

notifyElementRemoved

public void notifyElementRemoved(Ehcache cache,
                                 Element element)
                          throws CacheException
Called immediately after an element has been removed. The remove method will block until this method returns.

As the Element has been removed, only what was the key of the element is known.

This method delegates to onRemove. After the last element is removed, a call to onClear is also made.

Specified by:
notifyElementRemoved in interface CacheEventListener
Parameters:
cache - the cache emitting the notification
element - just deleted
Throws:
CacheException

notifyElementPut

public void notifyElementPut(Ehcache cache,
                             Element element)
                      throws CacheException
Called immediately after an element has been put into the cache. The Cache.put(net.sf.ehcache.Element) method will block until this method returns.

Implementers may wish to have access to the Element's fields, including value, so the element is provided. Implementers should be careful not to modify the element. The effect of any modifications is undefined.

Specified by:
notifyElementPut in interface CacheEventListener
Parameters:
cache - the cache emitting the notification
element - the element which was just put into the cache.
Throws:
CacheException

notifyElementUpdated

public void notifyElementUpdated(Ehcache cache,
                                 Element element)
                          throws CacheException
Called immediately after an element has been put into the cache and the element already existed in the cache. This is thus an update.

The Cache.put(net.sf.ehcache.Element) method will block until this method returns.

Implementers may wish to have access to the Element's fields, including value, so the element is provided. Implementers should be careful not to modify the element. The effect of any modifications is undefined.

This method delegates to onPut in the underlying CacheListener, because JCACHE CacheListener does not have update notifications.

Specified by:
notifyElementUpdated in interface CacheEventListener
Parameters:
cache - the cache emitting the notification
element - the element which was just put into the cache.
Throws:
CacheException

notifyElementExpired

public void notifyElementExpired(Ehcache cache,
                                 Element element)
Called immediately after an element is found to be expired. The Cache.remove(Object) method will block until this method returns.

As the Element has been expired, only what was the key of the element is known.

Elements are checked for expiry in ehcache at the following times:

If an element is found to be expired, it is deleted and this method is notified.

JCACHE CacheListener does not support an expiry notification, so onEvict is called instead. Expiry is a type of eviction.

Specified by:
notifyElementExpired in interface CacheEventListener
Parameters:
cache - the cache emitting the notification
element - the element that has just expired

Deadlock Warning: expiry will often come from the DiskStore expiry thread. It holds a lock to the DiskStorea the time the notification is sent. If the implementation of this method calls into a synchronized Cache method and that subsequently calls into DiskStore a deadlock will result. Accordingly implementers of this method should not call back into Cache.


notifyElementEvicted

public void notifyElementEvicted(Ehcache cache,
                                 Element element)
Called immediately after an element is evicted from the cache. Evicted in this sense means evicted from one store and not moved to another, so that it exists nowhere in the local cache.

In a sense the Element has been removed from the cache, but it is different, thus the separate notification.

Specified by:
notifyElementEvicted in interface CacheEventListener
Parameters:
cache - the cache emitting the notification
element - the element that has just been evicted

notifyRemoveAll

public void notifyRemoveAll(Ehcache cache)
Called during Ehcache.removeAll() to indicate that the all elements have been removed from the cache in a bulk operation. The usual notifyElementRemoved(net.sf.ehcache.Ehcache,net.sf.ehcache.Element) is not called.

This notification exists because clearing a cache is a special case. It is often not practical to serially process notifications where potentially millions of elements have been bulk deleted.

Note: There is no analogue in JCACHE to this method. It is not possible to know what elements were removed. Accordingly, no notification is done.

Specified by:
notifyRemoveAll in interface CacheEventListener
Parameters:
cache - the cache emitting the notification

dispose

public void dispose()
Give the listener a chance to cleanup and free resources when no longer needed.

JCACHE CacheListener does not support on dispose. This method does not delegate to anything. JCACHE CacheListener implementations should consider registering a CacheManagerEventListener so that they know when a cache is removed and they can perform an cleanup required.

Specified by:
dispose in interface CacheEventListener

getCacheListener

public net.sf.jsr107cache.CacheListener getCacheListener()
Gets the underlying CacheListener

Returns:
the underlying CacheListener

clone

public java.lang.Object clone()
                       throws java.lang.CloneNotSupportedException
Creates a clone of this listener. This method will only be called by ehcache before a cache is initialized.

This may not be possible for listeners after they have been initialized. Implementations should throw CloneNotSupportedException if they do not support clone.

Specified by:
clone in interface CacheEventListener
Overrides:
clone in class java.lang.Object
Returns:
a clone
Throws:
java.lang.CloneNotSupportedException - if the listener could not be cloned.

ehcache]]>