Implementing a Cache Exception Handler Factory and Cache Exception Handler
A CacheExceptionHandlerFactory is an abstract factory for creating cache exception handlers. Implementers should provide their own concrete factory, extending this abstract factory. It can then be configured in ehcache.xml.
Note: | Your implementations need to be placed in the classpath accessible to Ehcache. For information about how class loading is handled, see Class Loading. |
The factory class needs to be a concrete subclass of the abstract factory class CacheExceptionHandlerFactory, which is reproduced below.
/**
* An abstract factory for creating <code>CacheExceptionHandler</code>s at
* configuration time, in ehcache.xml.
* <p/>
* Extend to create a concrete factory
*
*/
public abstract class CacheExceptionHandlerFactory {
/**
* Create an <code>CacheExceptionHandler</code>
*
* @param properties implementation specific properties. These are configured
* as comma separated name value pairs in ehcache.xml
* @return a constructed CacheExceptionHandler
*/
public abstract CacheExceptionHandler createExceptionHandler(Properties properties);
}
The factory creates a concrete implementation of the CacheExceptionHandler interface, which is reproduced below:
/**
* A handler which may be registered with an Ehcache, to handle exception on
* Cache operations.
*
* Handlers may be registered at configuration time in ehcache.xml, using a
* CacheExceptionHandlerFactory, or set at runtime (a strategy).
*
* If an exception handler is registered, the default behaviour of throwing the
* exception will not occur. The handler method on Exception will be called.
* Of course, if the handler decides to throw the exception, it will propagate
* up through the call stack. If the handler does not, it won't.
*
* Some common Exceptions thrown, and which therefore should be considered when
* implementing this class, are listed below:
* <ul>
* <li>{@link IllegalStateException} if the cache is not
* {@link net.sf.ehcache.Status#STATUS_ALIVE}
* <li>{@link IllegalArgumentException} if an attempt is made to put a null
* element into a cache
* <li>{@link net.sf.ehcache.distribution.RemoteCacheException} if an issue
* occurs in remote synchronous replication
* <li>
* <li>
* </ul>
*
*/
public interface CacheExceptionHandler {
/**
* Called if an Exception occurs in a Cache method. This method is not
* called if an Error occurs.
*
* @param Ehcache the cache in which the Exception occurred
* @param key the key used in the operation, or null if the operation
* does not use a key or the key was null
* @param exception the exception caught
*/
void onException(Ehcache ehcache, Object key, Exception exception);
}