net.sf.ehcache.distribution

Class RMISynchronousCacheReplicator

public class RMISynchronousCacheReplicator extends Object implements CacheReplicator

Listens to CacheManager and Cache events and propagates those to CachePeer peers of the Cache.

Version: $Id: RMISynchronousCacheReplicator.java 52 2006-04-24 14:50:03Z gregluck $

Author: Greg Luck

Field Summary
protected booleanreplicatePuts
Whether to replicate puts.
protected booleanreplicateRemovals
Whether to replicate removes
protected booleanreplicateUpdates
Whether to replicate updates.
protected booleanreplicateUpdatesViaCopy
Whether an update (a put) should be by copy or by invalidation, (a remove).
protected Statusstatus
The status of the replicator.
Constructor Summary
protected RMISynchronousCacheReplicator(boolean replicatePuts, boolean replicateUpdates, boolean replicateUpdatesViaCopy, boolean replicateRemovals)
Constructor for internal and subclass use
Method Summary
booleanalive()
Checks that the replicator is is STATUS_ALIVE.
voiddispose()
Give the replicator a chance to cleanup and free resources when no longer needed
booleanisReplicateUpdatesViaCopy()
static ListlistRemoteCachePeers(Cache cache)
Package protected List of cache peers
booleannotAlive()
Asserts that the replicator is active.
voidnotifyElementExpired(Cache cache, Element element)
{@inheritDoc }

This implementation does not propagate expiries.

voidnotifyElementPut(Cache cache, Element element)
Called immediately after an element has been put into the cache.
voidnotifyElementRemoved(Cache cache, Element element)
Called immediately after an element has been removed.
voidnotifyElementUpdated(Cache cache, Element element)
Called immediately after an element has been put into the cache and the element already existed in the cache.

Field Detail

replicatePuts

protected final boolean replicatePuts
Whether to replicate puts.

replicateRemovals

protected final boolean replicateRemovals
Whether to replicate removes

replicateUpdates

protected final boolean replicateUpdates
Whether to replicate updates.

replicateUpdatesViaCopy

protected final boolean replicateUpdatesViaCopy
Whether an update (a put) should be by copy or by invalidation, (a remove).

By copy is best when the entry is expensive to produce. By invalidation is best when we are really trying to force other caches to sync back to a canonical source like a database. An example of a latter usage would be a read/write cache being used in Hibernate.

This setting only has effect if #replicateUpdates is true.

status

protected Status status
The status of the replicator. Only replicates when STATUS_ALIVE

Constructor Detail

RMISynchronousCacheReplicator

protected RMISynchronousCacheReplicator(boolean replicatePuts, boolean replicateUpdates, boolean replicateUpdatesViaCopy, boolean replicateRemovals)
Constructor for internal and subclass use

Parameters: replicatePuts replicateUpdates replicateUpdatesViaCopy replicateRemovals

Method Detail

alive

public final boolean alive()
Checks that the replicator is is STATUS_ALIVE.

dispose

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

isReplicateUpdatesViaCopy

public final boolean isReplicateUpdatesViaCopy()

Returns: whether update is through copy or invalidate

listRemoteCachePeers

static List listRemoteCachePeers(Cache cache)
Package protected List of cache peers

Parameters: cache

notAlive

public final boolean notAlive()
Asserts that the replicator is active.

Returns: true if the status is not STATUS_ALIVE

notifyElementExpired

public final void notifyElementExpired(Cache cache, Element element)
{@inheritDoc }

This implementation does not propagate expiries. It does not need to do anything because the element will expire in the remote cache at the same time. If the remote peer is not configured the same way they should not be in an cache cluster.

notifyElementPut

public void notifyElementPut(Cache cache, Element element)
Called immediately after an element has been put into the cache. The put 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.

Parameters: cache the cache emitting the notification element the element which was just put into the cache.

notifyElementRemoved

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

Ehcache does not check for

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

Parameters: cache the cache emitting the notification element just deleted

notifyElementUpdated

public void notifyElementUpdated(Cache cache, Element element)
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 put 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.

Parameters: cache the cache emitting the notification element the element which was just put into the cache.