package org.infinispan.context.impl; import java.util.Collection; import java.util.List; import java.util.Set; import javax.transaction.Transaction; import org.infinispan.commands.write.WriteCommand; import org.infinispan.context.InvocationContext; import org.infinispan.transaction.impl.AbstractCacheTransaction; import org.infinispan.transaction.xa.GlobalTransaction; /** * Interface defining additional functionality for invocation contexts that propagate within a transaction's scope. * * @author Mircea.Markus@jboss.com * @since 4.0 */ public interface TxInvocationContext<T extends AbstractCacheTransaction> extends InvocationContext { /** * Checks if there are modifications performed within the tx's scope. Any modifications having Flag.CACHE_MODE_LOCAL are ignored. */ boolean hasModifications(); /** * Returns the set of keys that are affected by this transaction. Used to generate appropriate recipient groups * for cluster-wide prepare and commit calls. */ Set<Object> getAffectedKeys(); /** * Returns the id of the transaction associated with the current call. */ GlobalTransaction getGlobalTransaction(); /** * Returns the modifications performed in the scope of the current transaction. Any modifications having Flag.CACHE_MODE_LOCAL are ignored. * The returned list can be null. */ List<WriteCommand> getModifications(); /** * Returns the tx associated with the current thread. This method MUST be guarded with a call to {@link * #isOriginLocal()}, as {@link javax.transaction.Transaction} are not propagated from the node where tx was * started. * @throws IllegalStateException if the call is performed from a {@link #isOriginLocal()}==false context. */ Transaction getTransaction(); /** * Registers a new participant with the transaction. */ void addAllAffectedKeys(Collection<?> keys); void addAffectedKey(Object key); /** * * @return true if the current transaction is in a valid state to perform operations on (i.e.,RUNNING or PREPARING) * or false otherwise. */ boolean isTransactionValid(); boolean isImplicitTransaction(); T getCacheTransaction(); }