public interface CacheWriter<K,V> extends CacheCallback
RegionAttributes
that is
called synchronously before a region or entry in the cache is
modified. The typical use for a CacheWriter
is to update a database.
Application writers should implement these methods to execute
application-specific behavior before the cache is modified.
Before the region is updated via a put, create, or destroy operation,
GemFire will call a CacheWriter
that is installed anywhere in any
participating cache for that region, preferring a local CacheWriter
if there is one. Usually there will be only one CacheWriter
in
the distributed system. If there are multiple CacheWriter
s
available in the distributed system, the GemFire
implementation always prefers one that is stored locally, or else picks one
arbitrarily; in any case only one CacheWriter
will be invoked.
The CacheWriter
is capable of aborting the update to the cache by throwing
a CacheWriterException
. This exception or any runtime exception
thrown by the CacheWriter
will abort the operation and the
exception will be propagated to the initiator of the operation, regardless
of whether the initiator is in the same VM as the CacheWriter
.
Modifier and Type | Method and Description |
---|---|
void |
beforeCreate(EntryEvent<K,V> event)
Called before an entry is created.
|
void |
beforeDestroy(EntryEvent<K,V> event)
Called before an entry is destroyed.
|
void |
beforeRegionClear(RegionEvent<K,V> event)
Called before a region is cleared.
|
void |
beforeRegionDestroy(RegionEvent<K,V> event)
Called before a region is destroyed.
|
void |
beforeUpdate(EntryEvent<K,V> event)
Called before an entry is updated.
|
close
void beforeUpdate(EntryEvent<K,V> event) throws CacheWriterException
put
or a get
that causes the loader to update an existing entry.
The entry previously existed in the cache where the operation was
initiated, although the old value may have been null. The entry being
updated may or may not exist in the local cache where the CacheWriter is
installed.event
- an EntryEvent that provides information about the operation in progressCacheWriterException
- if thrown will abort the operation in progress,
and the exception will be propagated back to caller that initiated
the operationRegion.put(Object, Object)
,
Region.get(Object)
void beforeCreate(EntryEvent<K,V> event) throws CacheWriterException
create
, a put
, or a get
.
The CacheWriter
can determine whether this value comes from a
get
or not by evaluating the Operation
's Operation.isLoad()
method.
The entry being created may already exist in the local cache where this CacheWriter
is installed, but it does not yet exist in the cache where the operation was initiated.event
- an EntryEvent that provides information about the operation in progressCacheWriterException
- if thrown will abort the operation in progress,
and the exception will be propagated back to caller that initiated
the operationRegion.create(Object, Object)
,
Region.put(Object, Object)
,
Region.get(Object)
void beforeDestroy(EntryEvent<K,V> event) throws CacheWriterException
Region.localDestroy(Object)
.event
- an EntryEvent that provides information about the operation in progressCacheWriterException
- if thrown will abort the operation in progress,
and the exception will be propagated back to caller that initiated
the operationRegion.destroy(Object)
void beforeRegionDestroy(RegionEvent<K,V> event) throws CacheWriterException
CacheWriter
will not additionally be called for each entry that is destroyed
in the region as a result of a region destroy. If the region's
subregions have CacheWriter
s installed, then they
will be called for the cascading subregion destroys.
This method is not called as a result of
Region.close()
, Cache.close(boolean)
, or Region.localDestroyRegion()
. However, the
Region.close()
method is invoked regardless of whether a
region is destroyed locally. A non-local region destroy results
in an invocation of beforeRegionDestroy(com.gemstone.gemfire.cache.RegionEvent<K, V>)
followed by an
invocation of Region.close()
.
WARNING: This method should not destroy or create any regions itself or a deadlock will occur.
event
- a RegionEvent that provides information about the operationCacheWriterException
- if thrown, will abort the operation in progress, and the
exception will be propagated back to the caller that
initiated the operationRegion.destroyRegion()
void beforeRegionClear(RegionEvent<K,V> event) throws CacheWriterException
CacheWriter
will not additionally be called for each entry that is cleared
in the region as a result of a region clear.
WARNING: This method should not clear/destroy any regions
event
- a RegionEvent that provides information about the operationCacheWriterException
- if thrown, will abort the operation in progress, and the
exception will be propagated back to the caller that
initiated the operationRegion.clear()
Copyright © 1997-2017 Pivotal Software, Inc. All rights reserved.