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

net.sf.ehcache.writer.CacheWriter Maven / Gradle / Ivy

There is a newer version: 2.10.9.2
Show newest version
/**
 *  Copyright Terracotta, Inc.
 *
 *  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.writer;

import net.sf.ehcache.CacheEntry;
import net.sf.ehcache.CacheException;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
import net.sf.ehcache.writer.writebehind.operations.SingleOperationType;

import java.util.Collection;

/**
 * A CacheWriter is an interface used for write-through and write-behind caching to a underlying resource.
 * 

* If configured for a cache, CacheWriter's methods will be called on a cache operation. A cache put will cause a CacheWriter write * and a cache remove will cause a writer delete. *

* Implementers should create an implementation which handles storing and deleting to an underlying resource. *

*

Write-Through

* In write-through mode, the cache operation will occur and the writer operation will occur before CacheEventListeners are notified. If * the write operation fails an exception will be thrown. This can result in a cache which is inconsistent with the underlying resource. * To avoid this, the cache and the underlying resource should be configured to participate in a transaction. In the event of a failure * a rollback can return all components to a consistent state. *

*

Write-Behind

* In write-behind mode, writes are written to a write-behind queue. They are written by a separate execution thread in a configurable * way. When used with Terracotta Server Array, the queue is highly available. In addition any node in the cluster may perform the * write-behind operations. *

* It's important to note that the operations that are handled by the {@code CacheWriter} don't have any guaranteed ordering in write-behind mode. * The processing ordering can be different than the scheduling ordering, so your application needs to be written with this * in mind. More information in the CacheWriter chapter of the documentation. *

*

Creation and Configuration

* CacheWriters can be created using the CacheWriterFactory or explicitly by instantiating them through Java code, giving * you access to local resources. *

* The manner upon which a CacheWriter is actually called is determined by the {@link net.sf.ehcache.config.CacheWriterConfiguration} that is set up for cache * that is using the CacheWriter. *

* See the CacheWriter chapter in the documentation for more information on how to use writers. * * @author Greg Luck * @author Geert Bevin * @version $Id: CacheWriter.java 5594 2012-05-07 16:04:31Z cdennis $ */ public interface CacheWriter { /** * Creates a clone of this writer. This method will only be called by ehcache before a * cache is initialized. *

* Implementations should throw CloneNotSupportedException if they do not support clone * but that will stop them from being used with defaultCache. * * @return a clone * @throws CloneNotSupportedException if the extension could not be cloned. */ public CacheWriter clone(Ehcache cache) throws CloneNotSupportedException; /** * Notifies writer to initialise themselves. *

* This method is called during the Cache's initialise method after it has changed it's * status to alive. Cache operations are legal in this method. If you register a cache writer * manually after a cache has been initialised already, this method will be called on the * cache writer as soon as it has been registered. *

* Note that if you reuse cache writer instances or create a factory that returns the * same cache writer instance as a singleton, your init method should be able * to handle that situation. Unless you perform this multiple usage of a cache writer yourself, * Ehcache will not do this though. So in the majority of the use cases, you don't need to do * anything special. * * @throws net.sf.ehcache.CacheException */ void init(); /** * Providers may be doing all sorts of exotic things and need to be able to clean up on * dispose. *

* Cache operations are illegal when this method is called. The cache itself is partly * disposed when this method is called. */ void dispose() throws CacheException; /** * Write the specified value under the specified key to the underlying store. * This method is intended to support both key/value creation and value update for a specific key. * * @param element the element to be written */ void write(Element element) throws CacheException; /** * Write the specified Elements to the underlying store. This method is intended to support both insert and update. * If this operation fails (by throwing an exception) after a partial success, * the convention is that entries which have been written successfully are to be removed from the specified mapEntries, * indicating that the write operation for the entries left in the map has failed or has not been attempted. * * @param elements the Elements to be written */ void writeAll(Collection elements) throws CacheException; /** * Delete the cache entry from the store * * @param entry the cache entry that is used for the delete operation */ void delete(CacheEntry entry) throws CacheException; /** * Remove data and keys from the underlying store for the given collection of keys, if present. If this operation fails * (by throwing an exception) after a partial success, the convention is that keys which have been erased successfully * are to be removed from the specified keys, indicating that the erase operation for the keys left in the collection * has failed or has not been attempted. * * @param entries the entries that have been removed from the cache */ void deleteAll(Collection entries) throws CacheException; /** * This method will be called, whenever an Element couldn't be handled by the writer and all * the {@link net.sf.ehcache.config.CacheWriterConfiguration#getRetryAttempts() retryAttempts} have been tried. *

When batching is enabled all the elements in the failing batch will be passed to this methods *

Try to not throw RuntimeExceptions from this method. Should an Exception occur, it will be logged, but * the element will be lost anyways. * @param element the Element that triggered the failure, or one of the elements part of the batch that failed * @param operationType the operation we tried to execute * @param e the RuntimeException thrown by the Writer when the last retry attempt was being executed */ void throwAway(Element element, SingleOperationType operationType, RuntimeException e); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy