package org.infinispan.context.impl; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import org.infinispan.commands.write.WriteCommand; import org.infinispan.container.entries.CacheEntry; import org.infinispan.remoting.transport.Address; import org.infinispan.transaction.impl.AbstractCacheTransaction; import org.infinispan.transaction.xa.GlobalTransaction; /** * Support class for {@link org.infinispan.context.impl.TxInvocationContext}. * * @author Mircea.Markus@jboss.com * @author Galder ZamarreƱo * @author Pedro Ruivo * @since 4.0 */ public abstract class AbstractTxInvocationContext<T extends AbstractCacheTransaction> extends AbstractInvocationContext implements TxInvocationContext<T> { private final T cacheTransaction; protected AbstractTxInvocationContext(T cacheTransaction, Address origin) { super(origin); if (cacheTransaction == null) { throw new NullPointerException("CacheTransaction cannot be null"); } this.cacheTransaction = cacheTransaction; } @Override public Object getLockOwner() { //not final because the test suite overwrite it... return cacheTransaction.getGlobalTransaction(); } @Override public void setLockOwner(Object lockOwner) { /*no-op. the global transaction is the lock owner and it can't be changed*/ } @Override public final Set<Object> getLockedKeys() { return cacheTransaction.getLockedKeys(); } @Override public final void addLockedKey(Object key) { cacheTransaction.registerLockedKey(key); } @Override public final GlobalTransaction getGlobalTransaction() { return cacheTransaction.getGlobalTransaction(); } @Override public final boolean hasModifications() { List<WriteCommand> replicableModifications = getModifications(); return replicableModifications != null && !replicableModifications.isEmpty(); } @Override public final List<WriteCommand> getModifications() { return cacheTransaction.getModifications(); } @Override public final CacheEntry lookupEntry(Object key) { return cacheTransaction.lookupEntry(key); } @Override public final Map<Object, CacheEntry> getLookedUpEntries() { return cacheTransaction.getLookedUpEntries(); } @Override public final Set<Object> getAffectedKeys() { return cacheTransaction.getAffectedKeys(); } @Override public final void addAllAffectedKeys(Collection<?> keys) { if (keys != null && !keys.isEmpty()) { cacheTransaction.addAllAffectedKeys(keys); } } @Override public final void addAffectedKey(Object key) { cacheTransaction.addAffectedKey(key); } @Override public final void putLookedUpEntry(Object key, CacheEntry e) { cacheTransaction.putLookedUpEntry(key, e); } @Override public final void removeLookedUpEntry(Object key) { cacheTransaction.removeLookedUpEntry(key); } @Override public final boolean isInTxScope() { return true; } @Override public final void clearLockedKeys() { cacheTransaction.clearLockedKeys(); } @Override public final T getCacheTransaction() { return cacheTransaction; } }