// load the tx interceptor
if (configuration.transaction().transactionMode().isTransactional())
interceptorChain.appendInterceptor(createInterceptor(new TxInterceptor(), TxInterceptor.class), false);
if (isUsingMarshalledValues(configuration)) {
CommandInterceptor interceptor;
if (configuration.storeAsBinary().defensive()) {
interceptor = createInterceptor(
new DefensiveMarshalledValueInterceptor(), DefensiveMarshalledValueInterceptor.class);
} else {
interceptor = createInterceptor(
new MarshalledValueInterceptor(), MarshalledValueInterceptor.class);
}
interceptorChain.appendInterceptor(interceptor, false);
}
interceptorChain.appendInterceptor(createInterceptor(new NotificationInterceptor(), NotificationInterceptor.class), false);
if (configuration.transaction().useEagerLocking()) {
configuration.transaction().lockingMode(LockingMode.PESSIMISTIC);
}
//the total order protocol doesn't need locks
if (!isTotalOrder) {
if (configuration.transaction().transactionMode().isTransactional()) {
if (configuration.transaction().lockingMode() == LockingMode.PESSIMISTIC) {
interceptorChain.appendInterceptor(createInterceptor(new PessimisticLockingInterceptor(), PessimisticLockingInterceptor.class), false);
} else {
interceptorChain.appendInterceptor(createInterceptor(new OptimisticLockingInterceptor(), OptimisticLockingInterceptor.class), false);
}
} else {
if (configuration.locking().supportsConcurrentUpdates())
interceptorChain.appendInterceptor(createInterceptor(new NonTransactionalLockingInterceptor(), NonTransactionalLockingInterceptor.class), false);
}
}
if (configuration.sites().hasEnabledBackups() && !configuration.sites().disableBackups()) {
if ((configuration.transaction().transactionMode() == TransactionMode.TRANSACTIONAL)) {
if (configuration.transaction().lockingMode() == LockingMode.OPTIMISTIC) {
interceptorChain.appendInterceptor(createInterceptor(new OptimisticBackupInterceptor(), OptimisticBackupInterceptor.class), false);
} else {
interceptorChain.appendInterceptor(createInterceptor(new PessimisticBackupInterceptor(), PessimisticBackupInterceptor.class), false);
}
} else {
interceptorChain.appendInterceptor(createInterceptor(new NonTransactionalBackupInterceptor(), NonTransactionalBackupInterceptor.class), false);
}
}
if (needsVersionAwareComponents && configuration.clustering().cacheMode().isClustered()) {
if (isTotalOrder) {
interceptorChain.appendInterceptor(createInterceptor(new TotalOrderVersionedEntryWrappingInterceptor(),
TotalOrderVersionedEntryWrappingInterceptor.class), false);
} else {
interceptorChain.appendInterceptor(createInterceptor(new VersionedEntryWrappingInterceptor(), VersionedEntryWrappingInterceptor.class), false);
}
} else
interceptorChain.appendInterceptor(createInterceptor(new EntryWrappingInterceptor(), EntryWrappingInterceptor.class), false);
if (configuration.loaders().usingCacheLoaders()) {
if (configuration.loaders().passivation()) {
if (configuration.clustering().cacheMode().isClustered())
interceptorChain.appendInterceptor(createInterceptor(new ClusteredActivationInterceptor(), ClusteredActivationInterceptor.class), false);
else
interceptorChain.appendInterceptor(createInterceptor(new ActivationInterceptor(), ActivationInterceptor.class), false);
interceptorChain.appendInterceptor(createInterceptor(new PassivationInterceptor(), PassivationInterceptor.class), false);
} else {
if (configuration.clustering().cacheMode().isClustered())
interceptorChain.appendInterceptor(createInterceptor(new ClusteredCacheLoaderInterceptor(), ClusteredCacheLoaderInterceptor.class), false);
else
interceptorChain.appendInterceptor(createInterceptor(new CacheLoaderInterceptor(), CacheLoaderInterceptor.class), false);
switch (configuration.clustering().cacheMode()) {
case DIST_SYNC:
case DIST_ASYNC:
interceptorChain.appendInterceptor(createInterceptor(new DistCacheStoreInterceptor(), DistCacheStoreInterceptor.class), false);
break;
default:
interceptorChain.appendInterceptor(createInterceptor(new CacheStoreInterceptor(), CacheStoreInterceptor.class), false);
break;
}
}
}
if (configuration.deadlockDetection().enabled() && !isTotalOrder) {
interceptorChain.appendInterceptor(createInterceptor(new DeadlockDetectingInterceptor(), DeadlockDetectingInterceptor.class), false);
}
if (configuration.clustering().l1().enabled() && !configuration.transaction().transactionMode().isTransactional()) {
interceptorChain.appendInterceptor(createInterceptor(new L1NonTxInterceptor(), L1NonTxInterceptor.class), false);
}
switch (configuration.clustering().cacheMode()) {
case REPL_SYNC:
if (needsVersionAwareComponents) {
//added custom interceptor to replace the original
if (isTotalOrder) {
interceptorChain.appendInterceptor(createInterceptor(new TotalOrderVersionedReplicationInterceptor(),
TotalOrderVersionedReplicationInterceptor.class), false);
} else {
interceptorChain.appendInterceptor(createInterceptor(new VersionedReplicationInterceptor(), VersionedReplicationInterceptor.class), false);
}
break;
}
case REPL_ASYNC:
if (isTotalOrder) {
interceptorChain.appendInterceptor(createInterceptor(new TotalOrderReplicationInterceptor(), TotalOrderReplicationInterceptor.class), false);
} else {
interceptorChain.appendInterceptor(createInterceptor(new ReplicationInterceptor(), ReplicationInterceptor.class), false);
}
break;
case INVALIDATION_SYNC:
case INVALIDATION_ASYNC:
interceptorChain.appendInterceptor(createInterceptor(new InvalidationInterceptor(), InvalidationInterceptor.class), false);
break;
case DIST_SYNC:
if (needsVersionAwareComponents) {
if (isTotalOrder) {
interceptorChain.appendInterceptor(createInterceptor(new TotalOrderVersionedDistributionInterceptor(),
TotalOrderVersionedDistributionInterceptor.class), false);
} else {
interceptorChain.appendInterceptor(createInterceptor(new VersionedDistributionInterceptor(), VersionedDistributionInterceptor.class), false);
}
break;
}
case DIST_ASYNC:
if (configuration.transaction().transactionMode().isTransactional()) {
if (isTotalOrder) {
interceptorChain.appendInterceptor(createInterceptor(new TotalOrderDistributionInterceptor(), TotalOrderDistributionInterceptor.class), false);
} else {
interceptorChain.appendInterceptor(createInterceptor(new TxDistributionInterceptor(), TxDistributionInterceptor.class), false);
}
} else {
if (configuration.locking().supportsConcurrentUpdates()) {
interceptorChain.appendInterceptor(createInterceptor(new NonTxConcurrentDistributionInterceptor(), NonTxConcurrentDistributionInterceptor.class), false);
} else {
interceptorChain.appendInterceptor(createInterceptor(new NonTxDistributionInterceptor(), NonTxDistributionInterceptor.class), false);
}
}
break;
case LOCAL:
//Nothing...
}
CommandInterceptor callInterceptor = createInterceptor(new CallInterceptor(), CallInterceptor.class);
interceptorChain.appendInterceptor(callInterceptor, false);
log.trace("Finished building default interceptor chain.");
buildCustomInterceptors(interceptorChain, configuration.customInterceptors());
return interceptorChain;
}