package org.infinispan.context.impl; import java.util.Collection; import javax.transaction.Status; import javax.transaction.SystemException; import javax.transaction.Transaction; import org.infinispan.remoting.transport.Address; import org.infinispan.transaction.impl.LocalTransaction; /** * Invocation context to be used for locally originated transactions. * * @author Mircea.Markus@jboss.com * @author Galder ZamarreƱo * @author Pedro Ruivo * @since 4.0 */ public class LocalTxInvocationContext extends AbstractTxInvocationContext<LocalTransaction> { public LocalTxInvocationContext(LocalTransaction localTransaction) { super(localTransaction, null); } @Override public final boolean isTransactionValid() { Transaction t = getTransaction(); int status = -1; if (t != null) { try { status = t.getStatus(); } catch (SystemException e) { // no op } } return status == Status.STATUS_ACTIVE || status == Status.STATUS_PREPARING; } @Override public final boolean isImplicitTransaction() { return getCacheTransaction().isImplicitTransaction(); } @Override public final boolean isOriginLocal() { return true; } @Override public final boolean hasLockedKey(Object key) { return getCacheTransaction().ownsLock(key); } public final void remoteLocksAcquired(Collection<Address> nodes) { getCacheTransaction().locksAcquired(nodes); } public final Collection<Address> getRemoteLocksAcquired() { return getCacheTransaction().getRemoteLocksAcquired(); } @Override public final Transaction getTransaction() { return getCacheTransaction().getTransaction(); } }