All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.net.sf.ehcache.event.CacheEventListener Maven / Gradle / Ivy

There is a newer version: 4.2.4
Show newest version
/**
 *  Copyright 2003-2006 Greg Luck
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package net.sf.ehcache.event;

import net.sf.ehcache.CacheException;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;

/**
 * Allows implementers to register callback methods that will be executed when a cache event
 * occurs.
 * The events include:
 * 
    *
  1. put Element *
  2. update Element *
  3. remove Element *
  4. evict Element *
  5. an Element expires, either because timeToLive or timeToIdle has been reached. *
  6. removeAll, which causes all elements to be cleared from the cache *
*

* Callbacks to these methods are synchronous and unsynchronized. It is the responsibility of * the implementer to safely handle the potential performance and thread safety issues * depending on what their listener is doing. *

* Cache also has putQuiet and removeQuiet methods which do not notify listeners. * * @author Greg Luck * @version $Id: CacheEventListener.java 181 2006-08-27 22:42:39Z gregluck $ * @see CacheManagerEventListener * @since 1.2 */ public interface CacheEventListener extends Cloneable { /** * Called immediately after an attempt to remove an element. The remove method will block until * this method returns. *

* This notification is received regardless of whether the cache had an element matching * the removal key or not. If an element was removed, the element is passed to this method, * otherwise a synthetic element, with only the key set is passed in. *

* This notification is not called for the following special cases: *

    *
  1. removeAll was called. See {@link #notifyRemoveAll(net.sf.ehcache.Ehcache)} *
  2. An element was evicted from the cache. * See {@link #notifyElementEvicted(net.sf.ehcache.Ehcache, net.sf.ehcache.Element)} *
* * @param cache the cache emitting the notification * @param element the element just deleted, or a synthetic element with just the key set if * no element was removed. */ void notifyElementRemoved(final Ehcache cache, final Element element) throws CacheException; /** * Called immediately after an element has been put into the cache. The * {@link net.sf.ehcache.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. * * @param cache the cache emitting the notification * @param element the element which was just put into the cache. */ void notifyElementPut(final Ehcache cache, final 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 {@link net.sf.ehcache.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. * * @param cache the cache emitting the notification * @param element the element which was just put into the cache. */ void notifyElementUpdated(final Ehcache cache, final Element element) throws CacheException; /** * Called immediately after an element is found to be expired. The * {@link net.sf.ehcache.Cache#remove(Object)} method will block until this method returns. *

* As the {@link 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: *

    *
  • When a get request is made *
  • When an element is spooled to the diskStore in accordance with a MemoryStore * eviction policy *
  • In the DiskStore when the expiry thread runs, which by default is * {@link net.sf.ehcache.Cache#DEFAULT_EXPIRY_THREAD_INTERVAL_SECONDS} *
* If an element is found to be expired, it is deleted and this method is notified. * * @param cache the cache emitting the notification * @param 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. */ void notifyElementExpired(final Ehcache cache, final 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. * * @param cache the cache emitting the notification * @param element the element that has just been evicted */ void notifyElementEvicted(final Ehcache cache, final Element element); /** * Called during {@link net.sf.ehcache.Ehcache#removeAll()} to indicate that the all * elements have been removed from the cache in a bulk operation. The usual * {@link #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. * @param cache the cache emitting the notification */ void notifyRemoveAll(final Ehcache cache); /** * Give the replicator a chance to cleanup and free resources when no longer needed */ void dispose(); /** * 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. * * @return a clone * @throws CloneNotSupportedException if the listener could not be cloned. */ public Object clone() throws CloneNotSupportedException; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy