org.jboss.cache.interceptors
Class InvalidationInterceptor

java.lang.Object
  extended by org.jboss.cache.interceptors.Interceptor
      extended by org.jboss.cache.interceptors.BaseRpcInterceptor
          extended by org.jboss.cache.interceptors.InvalidationInterceptor
All Implemented Interfaces:
InterceptorMBean, InvalidationInterceptorMBean

public class InvalidationInterceptor
extends BaseRpcInterceptor
implements InvalidationInterceptorMBean

This interceptor acts as a replacement to the replication interceptor when the CacheImpl is configured with ClusteredSyncMode as INVALIDATE.

The idea is that rather than replicating changes to all caches in a cluster when CRUD (Create, Remove, Update, Delete) methods are called, simply call evict(Fqn) on the remote caches for each changed node. This allows the remote node to look up the value in a shared cache loader which would have been updated with the changes.

Author:
Manik Surtani (manik@jboss.org)

Field Summary
protected  boolean optimistic
           
protected  Map<GlobalTransaction,List<MethodCall>> txMods
           
protected  TransactionTable txTable
           
 
Fields inherited from class org.jboss.cache.interceptors.BaseRpcInterceptor
defaultSynchronous
 
Fields inherited from class org.jboss.cache.interceptors.Interceptor
cache, configuration, last, log, next
 
Constructor Summary
InvalidationInterceptor()
           
 
Method Summary
 Map<String,Object> dumpStatistics()
          This implementation returns an empty Map.
protected  void findAndAddFqns(Object[] objects, Set<Fqn> fqns, boolean isMove)
           
 long getInvalidations()
          Returns the number of cache invalidations
protected  DataVersion getNodeVersion(TransactionWorkspace w, Fqn f)
           
protected  TransactionWorkspace getWorkspace(GlobalTransaction gtx)
           
protected  void invalidateAcrossCluster(Fqn fqn, TransactionWorkspace workspace, boolean synchronous, InvocationContext ctx)
           
protected  void invalidateAcrossCluster(Fqn fqn, TransactionWorkspace workspace, InvocationContext ctx)
          Deprecated. use {@link #invalidateAcrossCluster(Fqn,TransactionWorkspace,boolean,InvocationContext)
protected  void invalidateModifications(List<MethodCall> modifications, TransactionWorkspace workspace, boolean synchronous, InvocationContext ctx)
           
protected  void invalidateModifications(List<MethodCall> modifications, TransactionWorkspace workspace, InvocationContext ctx)
          Deprecated. use invalidateAcrossCluster(org.jboss.cache.Fqn,org.jboss.cache.optimistic.TransactionWorkspace,boolean,InvocationContext)
 Object invoke(InvocationContext ctx)
           
protected  Set<Fqn> optimisedIterator(List<MethodCall> list)
          Removes non-crud methods, plus clobs together common calls to Fqn's.
 void resetStatistics()
          This implementation is a no-op.
 void setCache(CacheSPI cache)
           
 
Methods inherited from class org.jboss.cache.interceptors.BaseRpcInterceptor
containsModifications, checkResponses, isSynchronous, putCallOnAsyncReplicationQueue, replicateCall, replicateCall
 
Methods inherited from class org.jboss.cache.interceptors.Interceptor
getLast, getNext, getStatisticsEnabled, isActive, isOnePhaseCommitPrepareMehod, isPreparing, isValid, setLast, setNext, setStatisticsEnabled, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.jboss.cache.interceptors.InterceptorMBean
getStatisticsEnabled, setStatisticsEnabled
 

Field Detail

txTable

protected TransactionTable txTable

txMods

protected Map<GlobalTransaction,List<MethodCall>> txMods

optimistic

protected boolean optimistic
Constructor Detail

InvalidationInterceptor

public InvalidationInterceptor()
Method Detail

setCache

public void setCache(CacheSPI cache)
Overrides:
setCache in class BaseRpcInterceptor

invoke

public Object invoke(InvocationContext ctx)
              throws Throwable
Overrides:
invoke in class Interceptor
Throws:
Throwable

getInvalidations

public long getInvalidations()
Description copied from interface: InvalidationInterceptorMBean
Returns the number of cache invalidations

Specified by:
getInvalidations in interface InvalidationInterceptorMBean
Returns:
the number of invalidations

resetStatistics

public void resetStatistics()
Description copied from class: Interceptor
This implementation is a no-op. If individual Interceptors wish to expose statistics, they can override this method.

Specified by:
resetStatistics in interface InterceptorMBean
Overrides:
resetStatistics in class Interceptor

dumpStatistics

public Map<String,Object> dumpStatistics()
Description copied from class: Interceptor
This implementation returns an empty Map. If individual Interceptors wish to expose statistics, they can override this method.

Specified by:
dumpStatistics in interface InterceptorMBean
Overrides:
dumpStatistics in class Interceptor
Returns:
a map containing statistics

invalidateAcrossCluster

protected void invalidateAcrossCluster(Fqn fqn,
                                       TransactionWorkspace workspace,
                                       InvocationContext ctx)
                                throws Throwable
Deprecated. use {@link #invalidateAcrossCluster(Fqn,TransactionWorkspace,boolean,InvocationContext)

Same as invalidateAcrossCluster(fqn, workspace, defaultSynchronous)

Throws:
Throwable

invalidateAcrossCluster

protected void invalidateAcrossCluster(Fqn fqn,
                                       TransactionWorkspace workspace,
                                       boolean synchronous,
                                       InvocationContext ctx)
                                throws Throwable
Throws:
Throwable

getNodeVersion

protected DataVersion getNodeVersion(TransactionWorkspace w,
                                     Fqn f)

invalidateModifications

protected void invalidateModifications(List<MethodCall> modifications,
                                       TransactionWorkspace workspace,
                                       InvocationContext ctx)
                                throws Throwable
Deprecated. use invalidateAcrossCluster(org.jboss.cache.Fqn,org.jboss.cache.optimistic.TransactionWorkspace,boolean,InvocationContext)

Same as invalidateModifications(modifications, workspace, defaultSynchronous)

Throws:
Throwable

invalidateModifications

protected void invalidateModifications(List<MethodCall> modifications,
                                       TransactionWorkspace workspace,
                                       boolean synchronous,
                                       InvocationContext ctx)
                                throws Throwable
Throws:
Throwable

getWorkspace

protected TransactionWorkspace getWorkspace(GlobalTransaction gtx)

findAndAddFqns

protected void findAndAddFqns(Object[] objects,
                              Set<Fqn> fqns,
                              boolean isMove)

optimisedIterator

protected Set<Fqn> optimisedIterator(List<MethodCall> list)
Removes non-crud methods, plus clobs together common calls to Fqn's. E.g, if we have put("/a/b", "1", "2") followed by a put("/a/b", "3", "4") we should only evict "/a/b" once.

Parameters:
list -
Returns:
Iterator containing a unique set of Fqns of crud methods in this tx


Copyright © 2007 JBoss, a division of Red Hat. All Rights Reserved.