[jbosscache-commits] JBoss Cache SVN: r6038 - in core/trunk/src: main/java/org/jboss/cache/interceptors and 6 other directories.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Wed Jun 25 11:33:13 EDT 2008


Author: manik.surtani at jboss.com
Date: 2008-06-25 11:33:13 -0400 (Wed, 25 Jun 2008)
New Revision: 6038

Added:
   core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionContext.java
   core/trunk/src/main/java/org/jboss/cache/transaction/TransactionContext.java
Removed:
   core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionEntry.java
   core/trunk/src/main/java/org/jboss/cache/transaction/TransactionEntry.java
Modified:
   core/trunk/src/main/java/org/jboss/cache/InvocationContext.java
   core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/ActivationInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/BaseTransactionalContextInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/CacheStoreInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/CallInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/InvalidationInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticLockingInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticTxInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/ReplicationInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/TxInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/lock/LockUtil.java
   core/trunk/src/main/java/org/jboss/cache/transaction/TransactionTable.java
   core/trunk/src/test/java/org/jboss/cache/api/NodeAPITest.java
   core/trunk/src/test/java/org/jboss/cache/invocationcontext/TransactionTest.java
   core/trunk/src/test/java/org/jboss/cache/lock/AbstractLockManagerRecordingTest.java
   core/trunk/src/test/java/org/jboss/cache/transaction/AbortionTest.java
   core/trunk/src/test/java/org/jboss/cache/transaction/NotifyingTransactionManager.java
Log:
Renamed TransactionEntry to TransactionContext

Modified: core/trunk/src/main/java/org/jboss/cache/InvocationContext.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/InvocationContext.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/InvocationContext.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -13,7 +13,7 @@
 import org.jboss.cache.lock.NodeLock;
 import org.jboss.cache.marshall.MethodCall;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 import org.jboss.cache.transaction.TransactionTable;
 
 import javax.transaction.Transaction;
@@ -37,7 +37,7 @@
 
    private Transaction transaction;
    private GlobalTransaction globalTransaction;
-   private TransactionEntry transactionEntry;
+   private TransactionContext transactionContext;
    private Option optionOverrides;
    // defaults to true.
    private boolean originLocal = true;
@@ -109,20 +109,20 @@
     * @return the transaction entry associated with the current transaction, or null if the current thread is not associated with a transaction.
     * @since 2.2.0
     */
-   public TransactionEntry getTransactionEntry()
+   public TransactionContext getTransactionContext()
    {
-      return transactionEntry;
+      return transactionContext;
    }
 
    /**
     * Sets the transaction entry to be associated with the current thread.
     *
-    * @param transactionEntry transaction entry to set
+    * @param transactionContext transaction entry to set
     * @since 2.2.0
     */
-   public void setTransactionEntry(TransactionEntry transactionEntry)
+   public void setTransactionContext(TransactionContext transactionContext)
    {
-      this.transactionEntry = transactionEntry;
+      this.transactionContext = transactionContext;
    }
 
    /**
@@ -187,7 +187,7 @@
    /**
     * Returns an immutable,  defensive copy of the List of locks currently maintained for the current scope.
     * <p/>
-    * Note that if a transaction is in scope, these locks are retrieved from the {@link org.jboss.cache.transaction.TransactionEntry} rather than
+    * Note that if a transaction is in scope, these locks are retrieved from the {@link org.jboss.cache.transaction.TransactionContext} rather than
     * this {@link org.jboss.cache.InvocationContext}.  Retrieving locks from here will ensure they are retrieved from  the appropriate
     * scope.
     * <p/>
@@ -201,14 +201,14 @@
    public List getLocks()
    {
       // first check transactional scope
-      if (transactionEntry != null) return transactionEntry.getLocks();
+      if (transactionContext != null) return transactionContext.getLocks();
       return Collections.unmodifiableList(new ArrayList(invocationLocks));
    }
 
    /**
     * Adds a List of locks to the currently maintained collection of locks acquired.
     * <p/>
-    * Note that if a transaction is in scope, these locks are recorded on the {@link org.jboss.cache.transaction.TransactionEntry} rather than
+    * Note that if a transaction is in scope, these locks are recorded on the {@link org.jboss.cache.transaction.TransactionContext} rather than
     * this {@link org.jboss.cache.InvocationContext}.  Adding locks here will ensure they are promoted to the appropriate
     * scope.
     * <p/>
@@ -222,9 +222,9 @@
    public void addAllLocks(List locks)
    {
       // first check transactional scope
-      if (transactionEntry != null)
+      if (transactionContext != null)
       {
-         transactionEntry.addAllLocks(locks);
+         transactionContext.addAllLocks(locks);
       }
       else
       {
@@ -237,7 +237,7 @@
    /**
     * Adds a lock to the currently maintained collection of locks acquired.
     * <p/>
-    * Note that if a transaction is in scope, this lock is recorded on the {@link org.jboss.cache.transaction.TransactionEntry} rather than
+    * Note that if a transaction is in scope, this lock is recorded on the {@link org.jboss.cache.transaction.TransactionContext} rather than
     * this {@link org.jboss.cache.InvocationContext}.  Adding a lock here will ensure it is promoted to the appropriate
     * scope.
     * <p/>
@@ -251,9 +251,9 @@
    public void addLock(Object lock)
    {
       // first check transactional scope
-      if (transactionEntry != null)
+      if (transactionContext != null)
       {
-         transactionEntry.addLock(lock);
+         transactionContext.addLock(lock);
       }
       else
       {
@@ -266,7 +266,7 @@
    /**
     * Removes a lock from the currently maintained collection of locks acquired.
     * <p/>
-    * Note that if a transaction is in scope, this lock is removed from the {@link org.jboss.cache.transaction.TransactionEntry} rather than
+    * Note that if a transaction is in scope, this lock is removed from the {@link org.jboss.cache.transaction.TransactionContext} rather than
     * this {@link org.jboss.cache.InvocationContext}.  Removing a lock here will ensure it is removed in the appropriate
     * scope.
     * <p/>
@@ -280,9 +280,9 @@
    public void removeLock(Object lock)
    {
       // first check transactional scope
-      if (transactionEntry != null)
+      if (transactionContext != null)
       {
-         transactionEntry.removeLock(lock);
+         transactionContext.removeLock(lock);
       }
       else
       {
@@ -294,7 +294,7 @@
    /**
     * Clears all locks from the currently maintained collection of locks acquired.
     * <p/>
-    * Note that if a transaction is in scope, locks are cleared from the {@link org.jboss.cache.transaction.TransactionEntry} rather than
+    * Note that if a transaction is in scope, locks are cleared from the {@link org.jboss.cache.transaction.TransactionContext} rather than
     * this {@link org.jboss.cache.InvocationContext}.  Clearing locks here will ensure they are cleared in the appropriate
     * scope.
     * <p/>
@@ -305,9 +305,9 @@
    public void clearLocks()
    {
       // first check transactional scope
-      if (transactionEntry != null)
+      if (transactionContext != null)
       {
-         transactionEntry.clearLocks();
+         transactionContext.clearLocks();
       }
       else
       {
@@ -397,7 +397,7 @@
       copy.optionOverrides = optionOverrides == null ? null : optionOverrides.copy();
       copy.originLocal = originLocal;
       copy.transaction = transaction;
-      copy.transactionEntry = transactionEntry;
+      copy.transactionContext = transactionContext;
       copy.txHasMods = txHasMods;
       return null;
    }

Modified: core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -281,7 +281,7 @@
                if (gtx != null)
                {
                   CreateNodeCommand createNodeCommand = commandsFactory.buildCreateNodeCommand(child_fqn);
-                  ctx.getTransactionEntry().addModification(createNodeCommand);
+                  ctx.getTransactionContext().addModification(createNodeCommand);
                }
             }
          }

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/ActivationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/ActivationInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/ActivationInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -21,7 +21,7 @@
 import org.jboss.cache.factories.annotations.Inject;
 import org.jboss.cache.factories.annotations.Start;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 
 import javax.transaction.SystemException;
 import javax.transaction.TransactionManager;
@@ -290,14 +290,14 @@
    private void prepareCacheLoader(InvocationContext ctx) throws Throwable
    {
       GlobalTransaction gtx = ctx.getGlobalTransaction();
-      TransactionEntry entry = ctx.getTransactionEntry();
-      if (entry == null)
+      TransactionContext tCtx = ctx.getTransactionContext();
+      if (tCtx == null)
       {
-         throw new Exception("entry for transaction " + gtx + " not found in transaction table");
+         throw new Exception("tCtx for transaction " + gtx + " not found in transaction table");
       }
       List<Modification> cacheLoaderModifications = new ArrayList<Modification>();
 
-      builder.visitCollection(ctx, entry.getModifications());
+      builder.visitCollection(ctx, tCtx.getModifications());
       if (cacheLoaderModifications.size() > 0)
       {
          loader.prepare(gtx, cacheLoaderModifications, false);

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/BaseRpcInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -15,7 +15,7 @@
 import org.jboss.cache.factories.annotations.Start;
 import org.jboss.cache.interceptors.base.CommandInterceptor;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 import org.jboss.cache.transaction.TransactionTable;
 import org.jgroups.Address;
 
@@ -106,11 +106,11 @@
       Transaction tx = ctx.getTransaction();
       if (tx != null)
       {
-         TransactionEntry te = ctx.getTransactionEntry();
-         if (te != null)
+         TransactionContext transactionContext = ctx.getTransactionContext();
+         if (transactionContext != null)
          {
-            if (te.isForceAsyncReplication()) sync = false;
-            else if (te.isForceSyncReplication()) sync = true;
+            if (transactionContext.isForceAsyncReplication()) sync = false;
+            else if (transactionContext.isForceSyncReplication()) sync = true;
          }
       }
 

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/BaseTransactionalContextInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/BaseTransactionalContextInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/BaseTransactionalContextInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -5,7 +5,7 @@
 import org.jboss.cache.factories.annotations.Inject;
 import org.jboss.cache.interceptors.base.CommandInterceptor;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 import org.jboss.cache.transaction.TransactionTable;
 
 import javax.transaction.Status;
@@ -32,18 +32,18 @@
 
    protected void copyInvocationScopeOptionsToTxScope(InvocationContext ctx)
    {
-      // notify the transaction entry that this override is in place.
-      TransactionEntry entry = txTable.get(ctx.getGlobalTransaction());
-      if (entry != null)
+      // notify the transaction tCtx that this override is in place.
+      TransactionContext tCtx = txTable.get(ctx.getGlobalTransaction());
+      if (tCtx != null)
       {
          Option txScopeOption = new Option();
          txScopeOption.setCacheModeLocal(ctx.getOptionOverrides() != null && ctx.getOptionOverrides().isCacheModeLocal());
          txScopeOption.setSkipCacheStatusCheck(ctx.getOptionOverrides() != null && ctx.getOptionOverrides().isSkipCacheStatusCheck());
-         entry.setOption(txScopeOption);
+         tCtx.setOption(txScopeOption);
       }
    }
 
-   protected void setTransactionalContext(Transaction tx, GlobalTransaction gtx, TransactionEntry entry, InvocationContext ctx)
+   protected void setTransactionalContext(Transaction tx, GlobalTransaction gtx, TransactionContext tCtx, InvocationContext ctx)
    {
       if (trace)
       {
@@ -52,21 +52,21 @@
       }
       ctx.setTransaction(tx);
       ctx.setGlobalTransaction(gtx);
-      if (entry == null)
+      if (tCtx == null)
       {
          if (gtx != null)
          {
-            ctx.setTransactionEntry(txTable.get(gtx));
+            ctx.setTransactionContext(txTable.get(gtx));
          }
          else if (tx == null)
          {
-            // then nullify the transaction entry as well
-            ctx.setTransactionEntry(null);
+            // then nullify the transaction tCtx as well
+            ctx.setTransactionContext(null);
          }
       }
       else
       {
-         ctx.setTransactionEntry(entry);
+         ctx.setTransactionContext(tCtx);
       }
    }
 

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -30,7 +30,7 @@
 import org.jboss.cache.lock.LockType;
 import org.jboss.cache.lock.TimeoutException;
 import org.jboss.cache.notifications.Notifier;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 import org.jboss.cache.transaction.TransactionTable;
 
 import java.util.Collections;
@@ -93,7 +93,7 @@
    {
       if (command.getFqn() != null)
       {
-         loadIfNeeded(ctx, command.getFqn(), null, false, true, false, ctx.getTransactionEntry(), false, false, false);
+         loadIfNeeded(ctx, command.getFqn(), null, false, true, false, ctx.getTransactionContext(), false, false, false);
       }
       return invokeNextInterceptor(ctx, command);
    }
@@ -103,7 +103,7 @@
    {
       if (command.getFqn() != null)
       {
-         loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, useCacheStore, !useCacheStore, ctx.getTransactionEntry(), false, false, false);
+         loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, useCacheStore, !useCacheStore, ctx.getTransactionContext(), false, false, false);
       }
       return invokeNextInterceptor(ctx, command);
    }
@@ -121,9 +121,9 @@
       {
          if (command.getTo() != null)
          {
-            loadIfNeeded(ctx, command.getTo(), null, false, false, true, ctx.getTransactionEntry(), false, true, false);
+            loadIfNeeded(ctx, command.getTo(), null, false, false, true, ctx.getTransactionContext(), false, true, false);
          }
-         loadIfNeeded(ctx, command.getFqn(), null, false, false, true, ctx.getTransactionEntry(), true, true, false);
+         loadIfNeeded(ctx, command.getFqn(), null, false, false, true, ctx.getTransactionContext(), true, true, false);
       }
       return invokeNextInterceptor(ctx, command);
    }
@@ -133,7 +133,7 @@
    {
       if (command.getFqn() != null)
       {
-         loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, false, true, ctx.getTransactionEntry(), false, false, false);
+         loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, false, true, ctx.getTransactionContext(), false, false, false);
       }
       return invokeNextInterceptor(ctx, command);
    }
@@ -144,7 +144,7 @@
    {
       if (command.getFqn() != null)
       {
-         loadIfNeeded(ctx, command.getFqn(), null, false, false, true, ctx.getTransactionEntry(), false, false, !usingOptimisticInvalidation);
+         loadIfNeeded(ctx, command.getFqn(), null, false, false, true, ctx.getTransactionContext(), false, false, !usingOptimisticInvalidation);
       }
       return invokeNextInterceptor(ctx, command);
    }
@@ -155,7 +155,7 @@
       Fqn fqn = command.getFqn();
       if (fqn != null)
       {
-         loadIfNeeded(ctx, fqn, null, false, false, false, ctx.getTransactionEntry(), false, false, true);
+         loadIfNeeded(ctx, fqn, null, false, false, false, ctx.getTransactionContext(), false, false, true);
          NodeSPI n = dataContainer.peek(fqn, true, true);
          loadChildren(fqn, n, false, false, ctx);
       }
@@ -168,7 +168,7 @@
    {
       if (command.getFqn() != null)
       {
-         loadIfNeeded(ctx, command.getFqn(), null, true, false, true, ctx.getTransactionEntry(), false, false, false);
+         loadIfNeeded(ctx, command.getFqn(), null, true, false, true, ctx.getTransactionContext(), false, false, false);
       }
       return invokeNextInterceptor(ctx, command);
    }
@@ -178,7 +178,7 @@
    {
       if (command.getFqn() != null)
       {
-         loadIfNeeded(ctx, command.getFqn(), null, true, false, true, ctx.getTransactionEntry(), false, false, false);
+         loadIfNeeded(ctx, command.getFqn(), null, true, false, true, ctx.getTransactionContext(), false, false, false);
       }
       return invokeNextInterceptor(ctx, command);
    }
@@ -190,7 +190,7 @@
       if (trace) log.trace("Removing temporarily created nodes from treecache");
 
       // this needs to be done in reverse order.
-      List list = ctx.getTransactionEntry().getDummyNodesCreatedByCacheLoader();
+      List list = ctx.getTransactionContext().getDummyNodesCreatedByCacheLoader();
       if (list != null && list.size() > 0)
       {
          ListIterator i = list.listIterator(list.size());
@@ -215,7 +215,7 @@
    {
       if (configuration.isNodeLockingOptimistic() && command.getFqn() != null)
       {
-         loadIfNeeded(ctx, command.getFqn(), null, false, false, false, ctx.getTransactionEntry(), false, false, false);
+         loadIfNeeded(ctx, command.getFqn(), null, false, false, false, ctx.getTransactionContext(), false, false, false);
       }
       return invokeNextInterceptor(ctx, command);
    }
@@ -225,7 +225,7 @@
    {
       if (command.getFqn() != null && !useCacheStore)
       {
-         loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, false, false, ctx.getTransactionEntry(), false, false, false);
+         loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, false, false, ctx.getTransactionContext(), false, false, false);
       }
       return invokeNextInterceptor(ctx, command);
    }
@@ -236,12 +236,12 @@
       Fqn fqn = command.getFqn();
       if (fqn != null && !useCacheStore)
       {
-         loadIfNeeded(ctx, fqn, null, false, true, false, ctx.getTransactionEntry(), false, false, false);
+         loadIfNeeded(ctx, fqn, null, false, true, false, ctx.getTransactionContext(), false, false, false);
       }
       return invokeNextInterceptor(ctx, command);
    }
 
-   private void loadIfNeeded(InvocationContext ctx, Fqn fqn, Object key, boolean allKeys, boolean initNode, boolean acquireLock, TransactionEntry entry, boolean recursive, boolean isMove, boolean bypassLoadingData) throws Throwable
+   private void loadIfNeeded(InvocationContext ctx, Fqn fqn, Object key, boolean allKeys, boolean initNode, boolean acquireLock, TransactionContext transactionContext, boolean recursive, boolean isMove, boolean bypassLoadingData) throws Throwable
    {
       NodeSPI n = dataContainer.peek(fqn, true, true);
       Object lockOwner = lockManager.getLockOwner(ctx);
@@ -269,7 +269,7 @@
       {
          if (initNode)
          {
-            n = createTempNode(fqn, entry);
+            n = createTempNode(fqn, transactionContext);
          }
 
          // Only attempt to acquire this lock if we need to - i.e., if
@@ -297,12 +297,12 @@
                if (n == null && loader.exists(fqn))
                {
                   // just create a dummy node in memory
-                  n = createTempNode(fqn, entry);
+                  n = createTempNode(fqn, transactionContext);
                }
             }
             else
             {
-               n = loadNode(ctx, fqn, n, entry);
+               n = loadNode(ctx, fqn, n, transactionContext);
             }
          }
       }
@@ -470,10 +470,10 @@
     */
    private boolean wasRemovedInTx(Fqn fqn, InvocationContext ctx)
    {
-      TransactionEntry entry = ctx.getTransactionEntry();
-      if (entry == null) return false;
+      TransactionContext transactionContext = ctx.getTransactionContext();
+      if (transactionContext == null) return false;
 
-      for (ReversibleCommand txCacheCommand : entry.getModifications())
+      for (ReversibleCommand txCacheCommand : transactionContext.getModifications())
       {
          if (txCacheCommand instanceof RemoveNodeCommand && fqn.isChildOrEquals(txCacheCommand.getFqn())) return true;
       }
@@ -485,7 +485,7 @@
     * If it doesn't exist on disk but in memory, clears the
     * uninitialized flag, otherwise returns null.
     */
-   private NodeSPI loadNode(InvocationContext ctx, Fqn fqn, NodeSPI n, TransactionEntry entry) throws Exception
+   private NodeSPI loadNode(InvocationContext ctx, Fqn fqn, NodeSPI n, TransactionContext transactionContext) throws Exception
    {
       if (trace) log.trace("loadNode " + fqn);
       Map nodeData = loadData(fqn);
@@ -499,7 +499,7 @@
             notifier.notifyNodeActivated(fqn, true, Collections.emptyMap(), ctx);
          }
 
-         n = createNodes(fqn, entry);
+         n = createNodes(fqn, transactionContext);
 //         n.clearDataDirect();
          n.setInternalState(nodeData);
 
@@ -523,9 +523,9 @@
    /**
     * Creates a new memory node in preparation for storage.
     */
-   private NodeSPI createTempNode(Fqn fqn, TransactionEntry entry) throws Exception
+   private NodeSPI createTempNode(Fqn fqn, TransactionContext transactionContext) throws Exception
    {
-      NodeSPI n = createNodes(fqn, entry);
+      NodeSPI n = createNodes(fqn, transactionContext);
       n.setDataLoaded(false);
       if (trace)
       {
@@ -535,7 +535,7 @@
    }
 
    @SuppressWarnings("unchecked")
-   private NodeSPI createNodes(Fqn fqn, TransactionEntry entry) throws Exception
+   private NodeSPI createNodes(Fqn fqn, TransactionContext transactionContext) throws Exception
    {
       Object[] results = dataContainer.createNodes(fqn);
       List<NodeSPI> createdNodes = (List<NodeSPI>) results[0];
@@ -544,9 +544,9 @@
       for (NodeSPI node : createdNodes)
       {
          node.setDataLoaded(false);
-         if (entry != null)
+         if (transactionContext != null)
          {
-            entry.loadUninitialisedNode(node.getFqn());
+            transactionContext.loadUninitialisedNode(node.getFqn());
          }
          lastCreated = node;
       }

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/CacheStoreInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/CacheStoreInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/CacheStoreInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -27,7 +27,7 @@
 import org.jboss.cache.loader.CacheLoader;
 import org.jboss.cache.loader.CacheLoaderManager;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 
 import javax.transaction.SystemException;
 import javax.transaction.TransactionManager;
@@ -182,7 +182,7 @@
       if (inTransaction())
       {
          if (trace) log.trace("transactional so don't put stuff in the cloader yet.");
-         prepareCacheLoader(command.getGlobalTransaction(), ctx.getTransactionEntry(), command.isOnePhaseCommit());
+         prepareCacheLoader(command.getGlobalTransaction(), ctx.getTransactionContext(), command.isOnePhaseCommit());
       }
       return invokeNextInterceptor(ctx, command);
    }
@@ -333,13 +333,13 @@
       return retval;
    }
 
-   private void prepareCacheLoader(GlobalTransaction gtx, TransactionEntry entry, boolean onePhase) throws Throwable
+   private void prepareCacheLoader(GlobalTransaction gtx, TransactionContext transactionContext, boolean onePhase) throws Throwable
    {
-      if (entry == null)
+      if (transactionContext == null)
       {
-         throw new Exception("entry for transaction " + gtx + " not found in transaction table");
+         throw new Exception("transactionContext for transaction " + gtx + " not found in transaction table");
       }
-      List<ReversibleCommand> modifications = entry.getModifications();
+      List<ReversibleCommand> modifications = transactionContext.getModifications();
       if (modifications.size() == 0)
       {
          if (trace) log.trace("Transaction has not logged any modifications!");

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/CallInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/CallInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/CallInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -8,11 +8,11 @@
 import org.jboss.cache.commands.tx.OptimisticPrepareCommand;
 import org.jboss.cache.commands.tx.PrepareCommand;
 import org.jboss.cache.commands.tx.RollbackCommand;
+import org.jboss.cache.commands.write.ClearDataCommand;
 import org.jboss.cache.commands.write.MoveCommand;
 import org.jboss.cache.commands.write.PutDataMapCommand;
 import org.jboss.cache.commands.write.PutForExternalReadCommand;
 import org.jboss.cache.commands.write.PutKeyValueCommand;
-import org.jboss.cache.commands.write.ClearDataCommand;
 import org.jboss.cache.commands.write.RemoveKeyCommand;
 import org.jboss.cache.commands.write.RemoveNodeCommand;
 import org.jboss.cache.factories.annotations.Inject;
@@ -171,7 +171,7 @@
          }
          else
          {
-            ctx.getTransactionEntry().addModification(command);
+            ctx.getTransactionContext().addModification(command);
          }
       }
       return result;

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/InvalidationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/InvalidationInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/InvalidationInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -15,7 +15,15 @@
 import org.jboss.cache.commands.tx.OptimisticPrepareCommand;
 import org.jboss.cache.commands.tx.PrepareCommand;
 import org.jboss.cache.commands.tx.RollbackCommand;
-import org.jboss.cache.commands.write.*;
+import org.jboss.cache.commands.write.ClearDataCommand;
+import org.jboss.cache.commands.write.InvalidateCommand;
+import org.jboss.cache.commands.write.MoveCommand;
+import org.jboss.cache.commands.write.OptimisticInvalidateCommand;
+import org.jboss.cache.commands.write.PutDataMapCommand;
+import org.jboss.cache.commands.write.PutForExternalReadCommand;
+import org.jboss.cache.commands.write.PutKeyValueCommand;
+import org.jboss.cache.commands.write.RemoveKeyCommand;
+import org.jboss.cache.commands.write.RemoveNodeCommand;
 import org.jboss.cache.config.Option;
 import org.jboss.cache.factories.CommandsFactory;
 import org.jboss.cache.factories.annotations.Inject;
@@ -25,8 +33,8 @@
 import org.jboss.cache.optimistic.TransactionWorkspace;
 import org.jboss.cache.optimistic.WorkspaceNode;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.OptimisticTransactionEntry;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.OptimisticTransactionContext;
+import org.jboss.cache.transaction.TransactionContext;
 import org.jboss.cache.transaction.TransactionTable;
 
 import javax.transaction.SystemException;
@@ -81,7 +89,7 @@
    public Object visitPutForExternalReadCommand(InvocationContext ctx, PutForExternalReadCommand command) throws Throwable
    {
       // these are always local more, as far as invalidation is concerned
-      if (ctx.getTransaction() != null) ctx.getTransactionEntry().addLocalModification(command);
+      if (ctx.getTransaction() != null) ctx.getTransactionContext().addLocalModification(command);
       return invokeNextInterceptor(ctx, command);
    }
 
@@ -125,16 +133,17 @@
          if (trace) log.trace("Entering InvalidationInterceptor's prepare phase");
          // fetch the modifications before the transaction is committed (and thus removed from the txTable)
          GlobalTransaction gtx = ctx.getGlobalTransaction();
-         TransactionEntry entry = ctx.getTransactionEntry();
-         if (entry == null) throw new IllegalStateException("cannot find transaction entry for " + gtx);
+         TransactionContext transactionContext = ctx.getTransactionContext();
+         if (transactionContext == null)
+            throw new IllegalStateException("cannot find transaction transactionContext for " + gtx);
 
-         if (entry.hasModifications())
+         if (transactionContext.hasModifications())
          {
             List<ReversibleCommand> mods;
-            if (entry.hasLocalModifications())
+            if (transactionContext.hasLocalModifications())
             {
                mods = new ArrayList<ReversibleCommand>(command.getModifications());
-               mods.removeAll(entry.getLocalModifications());
+               mods.removeAll(transactionContext.getLocalModifications());
             }
             else
             {
@@ -159,13 +168,14 @@
       {
          // here we just record the modifications but actually do the invalidate in commit.
          GlobalTransaction gtx = ctx.getGlobalTransaction();
-         TransactionEntry entry = ctx.getTransactionEntry();
-         if (entry == null) throw new IllegalStateException("cannot find transaction entry for " + gtx);
+         TransactionContext transactionContext = ctx.getTransactionContext();
+         if (transactionContext == null)
+            throw new IllegalStateException("cannot find transaction transactionContext for " + gtx);
 
-         if (entry.hasModifications())
+         if (transactionContext.hasModifications())
          {
-            List<ReversibleCommand> mods = new ArrayList<ReversibleCommand>(entry.getModifications());
-            if (entry.hasLocalModifications()) mods.removeAll(entry.getLocalModifications());
+            List<ReversibleCommand> mods = new ArrayList<ReversibleCommand>(transactionContext.getModifications());
+            if (transactionContext.hasLocalModifications()) mods.removeAll(transactionContext.getLocalModifications());
             txMods.put(gtx, mods);
          }
       }
@@ -229,7 +239,7 @@
          }
          else
          {
-            if (isLocalModeForced(ctx)) ctx.getTransactionEntry().addLocalModification((ReversibleCommand) command);
+            if (isLocalModeForced(ctx)) ctx.getTransactionContext().addLocalModification((ReversibleCommand) command);
          }
       }
       return retval;
@@ -396,7 +406,7 @@
 
    protected TransactionWorkspace getWorkspace(InvocationContext ctx)
    {
-      OptimisticTransactionEntry entry = (OptimisticTransactionEntry) ctx.getTransactionEntry();
+      OptimisticTransactionContext entry = (OptimisticTransactionContext) ctx.getTransactionContext();
       return entry.getTransactionWorkSpace();
    }
 }

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -19,7 +19,7 @@
 import org.jboss.cache.optimistic.TransactionWorkspace;
 import org.jboss.cache.optimistic.WorkspaceNode;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.OptimisticTransactionEntry;
+import org.jboss.cache.transaction.OptimisticTransactionContext;
 import org.jboss.cache.transaction.TransactionTable;
 
 import javax.transaction.Transaction;
@@ -47,15 +47,15 @@
 
    protected TransactionWorkspace getTransactionWorkspace(InvocationContext ctx) throws CacheException
    {
-      OptimisticTransactionEntry transactionEntry = (OptimisticTransactionEntry) ctx.getTransactionEntry();
+      OptimisticTransactionContext transactionContext = (OptimisticTransactionContext) ctx.getTransactionContext();
 
-      if (transactionEntry == null)
+      if (transactionContext == null)
       {
          throw new CacheException("Unable to map global transaction " + ctx.getGlobalTransaction() + " to transaction entry when trying to retrieve transaction workspace.");
       }
 
       // try and get the workspace from the transaction
-      return transactionEntry.getTransactionWorkSpace();
+      return transactionContext.getTransactionWorkSpace();
    }
 
    /**

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticLockingInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticLockingInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticLockingInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -19,7 +19,7 @@
 import org.jboss.cache.optimistic.TransactionWorkspace;
 import org.jboss.cache.optimistic.WorkspaceNode;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 
 /**
  * Locks nodes during transaction boundaries.  Only affects prepare/commit/rollback method calls; other method calls
@@ -30,14 +30,11 @@
  */
 public class OptimisticLockingInterceptor extends OptimisticInterceptor
 {
-   private long lockAcquisitionTimeout;
-
    @Start
    private void init()
    {
       if (txManager == null)
          log.fatal("No transaction manager lookup class has been defined. Transactions cannot be used and thus OPTIMISTIC locking cannot be used!  Expect errors!!");
-      lockAcquisitionTimeout = configuration.getLockAcquisitionTimeout();
    }
 
    @Override
@@ -125,8 +122,8 @@
    {
       try
       {
-         TransactionEntry entry = ctx.getTransactionEntry();
-         if (entry != null)
+         TransactionContext transactionContext = ctx.getTransactionContext();
+         if (transactionContext != null)
          {
             lockManager.unlock(ctx);
          }

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -346,7 +346,7 @@
    private void addToModificationList(ReversibleCommand command, InvocationContext ctx)
    {
       Option opt = ctx.getOptionOverrides();
-      ctx.getTransactionEntry().addModification(command);
+      ctx.getTransactionContext().addModification(command);
       if (log.isDebugEnabled()) log.debug("Adding command " + command + " to modification list");
    }
 

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticReplicationInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -33,8 +33,8 @@
 import org.jboss.cache.optimistic.TransactionWorkspace;
 import org.jboss.cache.optimistic.WorkspaceNode;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.OptimisticTransactionEntry;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.OptimisticTransactionContext;
+import org.jboss.cache.transaction.TransactionContext;
 import org.jboss.cache.util.concurrent.ConcurrentHashSet;
 
 import java.util.ArrayList;
@@ -75,11 +75,11 @@
       if (!skipReplicationOfTransactionMethod(ctx))
       {
          GlobalTransaction gtx = getGlobalTransaction(ctx);
-         TransactionEntry te = ctx.getTransactionEntry();
-         if (te.hasLocalModifications())
+         TransactionContext transactionContext = ctx.getTransactionContext();
+         if (transactionContext.hasLocalModifications())
          {
             OptimisticPrepareCommand replicablePrepareCommand = command.copy(); // makre sure we remove any "local" transactions
-            replicablePrepareCommand.removeModifications(te.getLocalModifications());
+            replicablePrepareCommand.removeModifications(transactionContext.getLocalModifications());
             command = replicablePrepareCommand;
          }
 
@@ -147,14 +147,14 @@
    @Override
    public Object visitPutForExternalReadCommand(InvocationContext ctx, PutForExternalReadCommand command) throws Throwable
    {
-      ctx.getTransactionEntry().setForceAsyncReplication(true);
+      ctx.getTransactionContext().setForceAsyncReplication(true);
       return handleDefault(ctx, command);
    }
 
    public Object handleDefault(InvocationContext ctx, VisitableCommand command) throws Throwable
    {
       if (isLocalModeForced(ctx) && command instanceof ReversibleCommand)
-         ctx.getTransactionEntry().addLocalModification((ReversibleCommand) command);
+         ctx.getTransactionContext().addLocalModification((ReversibleCommand) command);
       return invokeNextInterceptor(ctx, command);
    }
 
@@ -378,13 +378,13 @@
 
    protected TransactionWorkspace getTransactionWorkspace(InvocationContext ctx) throws CacheException
    {
-      OptimisticTransactionEntry transactionEntry = (OptimisticTransactionEntry) ctx.getTransactionEntry();
-      if (transactionEntry == null)
+      OptimisticTransactionContext transactionContext = (OptimisticTransactionContext) ctx.getTransactionContext();
+      if (transactionContext == null)
       {
          throw new CacheException("unable to map global transaction " + ctx + " to transaction entry");
       }
       // try and get the workspace from the transaction
-      return transactionEntry.getTransactionWorkSpace();
+      return transactionContext.getTransactionWorkSpace();
    }
 
 }
\ No newline at end of file

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticTxInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticTxInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/OptimisticTxInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -13,8 +13,8 @@
 import org.jboss.cache.commands.write.RemoveNodeCommand;
 import org.jboss.cache.config.Option;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.OptimisticTransactionEntry;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.OptimisticTransactionContext;
+import org.jboss.cache.transaction.TransactionContext;
 
 import javax.transaction.Transaction;
 import java.util.List;
@@ -99,13 +99,13 @@
       if (optionOverride != null
             && (optionOverride.isForceAsynchronous() || optionOverride.isForceSynchronous()))
       {
-         TransactionEntry entry = ctx.getTransactionEntry();
-         if (entry != null)
+         TransactionContext transactionContext = ctx.getTransactionContext();
+         if (transactionContext != null)
          {
             if (optionOverride.isForceAsynchronous())
-               entry.setForceAsyncReplication(true);
+               transactionContext.setForceAsyncReplication(true);
             else
-               entry.setForceSyncReplication(true);
+               transactionContext.setForceSyncReplication(true);
          }
       }
    }
@@ -143,17 +143,17 @@
    protected void cleanupStaleLocks(InvocationContext ctx) throws Throwable
    {
       super.cleanupStaleLocks(ctx);
-      TransactionEntry entry = ctx.getTransactionEntry();
-      if (entry != null)
+      TransactionContext transactionContext = ctx.getTransactionContext();
+      if (transactionContext != null)
       {
-         ((OptimisticTransactionEntry) entry).getTransactionWorkSpace().clearNodes();
+         ((OptimisticTransactionContext) transactionContext).getTransactionWorkSpace().clearNodes();
       }
    }
 
    @Override
-   protected TransactionEntry createNewTransactionEntry(Transaction tx) throws Exception
+   protected TransactionContext createNewTransactionContext(Transaction tx) throws Exception
    {
-      return new OptimisticTransactionEntry(tx);
+      return new OptimisticTransactionContext(tx);
    }
 
    private class ModificationsReplayVisitor extends AbstractVisitor

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/PessimisticLockInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -37,7 +37,7 @@
 import org.jboss.cache.lock.LockUtil;
 import org.jboss.cache.lock.PessimisticNodeBasedLockManager;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -125,7 +125,7 @@
       if (!command.isOnePhaseCommit()) return invokeNextInterceptor(ctx, command);
 
       // commit propagated up from the tx interceptor
-      commit(ctx.getTransactionEntry(), ctx.getGlobalTransaction());
+      commit(ctx.getTransactionContext(), ctx.getGlobalTransaction());
       Object retVal = invokeNextInterceptor(ctx, command);
       lockManager.unlock(ctx);
       return retVal;
@@ -134,7 +134,7 @@
    @Override
    protected Object handleCommitCommand(InvocationContext ctx, CommitCommand command) throws Throwable
    {
-      commit(ctx.getTransactionEntry(), command.getGlobalTransaction());
+      commit(ctx.getTransactionContext(), command.getGlobalTransaction());
       if (trace) log.trace("bypassed locking as method commit() doesn't require locking");
       Object retVal = invokeNextInterceptor(ctx, command);
       lockManager.unlock(ctx);
@@ -144,23 +144,23 @@
    @Override
    protected Object handleRollbackCommand(InvocationContext ctx, RollbackCommand command) throws Throwable
    {
-      TransactionEntry entry = ctx.getTransactionEntry();
+      TransactionContext transactionContext = ctx.getTransactionContext();
       if (trace)
       {
          log.trace("called to rollback cache with GlobalTransaction=" + command.getGlobalTransaction());
       }
-      if (entry == null)
+      if (transactionContext == null)
       {
-         log.error("entry for transaction " + command.getGlobalTransaction() + " not found (transaction has possibly already been rolled back)");
+         log.error("transactionContext for transaction " + command.getGlobalTransaction() + " not found (transaction has possibly already been rolled back)");
       }
       else
       {
-         for (Fqn fqn : entry.getRemovedNodes())
+         for (Fqn fqn : transactionContext.getRemovedNodes())
          {
             dataContainer.removeFromDataStructure(fqn, false);
          }
          // 1. Revert the modifications by running the undo-op list in reverse. This *cannot* throw any exceptions !
-         entry.undoOperations();
+         transactionContext.undoOperations();
       }
       if (trace)
       {
@@ -183,7 +183,7 @@
          lockManager.lockPessimistically(ctx, command.getFqn(), WRITE, false, false, true, false, null, false);
          if (ctx.getGlobalTransaction() != null)
          {
-            ctx.getTransactionEntry().addRemovedNode(command.getFqn());
+            ctx.getTransactionContext().addRemovedNode(command.getFqn());
          }
          lockManager.lockAllAndRecord(dataContainer.peek(command.getFqn(), true, false), WRITE, ctx);
       }
@@ -215,19 +215,19 @@
       // we need to mark new nodes created as deleted since they are only created to form a path to the node being removed, to
       // create a lock.
       boolean created = lockManager.lockPessimistically(ctx, command.getFqn(), WRITE, true, false, true, true, createdNodes, true);
-      TransactionEntry entry = null;
+      TransactionContext transactionContext = null;
       if (ctx.getGlobalTransaction() != null)
       {
-         entry = ctx.getTransactionEntry();
-         entry.addRemovedNode(command.getFqn());
+         transactionContext = ctx.getTransactionContext();
+         transactionContext.addRemovedNode(command.getFqn());
          for (NodeSPI nodeSPI : createdNodes)
          {
-            entry.addRemovedNode(nodeSPI.getFqn());
+            transactionContext.addRemovedNode(nodeSPI.getFqn());
             nodeSPI.markAsDeleted(true);
          }
       }
 
-      lockAllForRemoval(dataContainer.peek(command.getFqn(), false, false), ctx, entry);
+      lockAllForRemoval(dataContainer.peek(command.getFqn(), false, false), ctx, transactionContext);
 
       if (!createdNodes.isEmpty())
       {
@@ -256,19 +256,19 @@
    /**
     * Acquires write locks on the node and all child nodes, adding children to the list of removed nodes in the context.
     *
-    * @param node  node to inspect
-    * @param ctx   invocation context
-    * @param entry transaction entry
+    * @param node               node to inspect
+    * @param ctx                invocation context
+    * @param transactionContext transaction entry
     * @throws InterruptedException in the event of interruption
     */
-   public void lockAllForRemoval(NodeSPI node, InvocationContext ctx, TransactionEntry entry) throws InterruptedException
+   public void lockAllForRemoval(NodeSPI node, InvocationContext ctx, TransactionContext transactionContext) throws InterruptedException
    {
       if (node == null) return;
       // lock node
       lockManager.lockAndRecord(node, WRITE, ctx);
 
       // add to deleted list
-      if (entry != null) entry.addRemovedNode(node.getFqn());
+      if (transactionContext != null) transactionContext.addRemovedNode(node.getFqn());
 
       // now children.
       Map<Object, NodeSPI> children = node.getChildrenMapDirect();
@@ -277,7 +277,7 @@
          for (NodeSPI child : children.values())
          {
             // lock child.
-            lockAllForRemoval(child, ctx, entry);
+            lockAllForRemoval(child, ctx, transactionContext);
          }
       }
    }
@@ -340,16 +340,16 @@
    /**
     * Remove all locks held by <tt>tx</tt>, remove the transaction from the transaction table
     */
-   private void commit(TransactionEntry entry, GlobalTransaction gtx)
+   private void commit(TransactionContext transactionContext, GlobalTransaction gtx)
    {
       if (trace) log.trace("committing cache with gtx " + gtx);
-      if (entry == null)
+      if (transactionContext == null)
       {
-         log.error("entry for transaction " + gtx + " not found (maybe already committed)");
+         log.error("transactionContext for transaction " + gtx + " not found (maybe already committed)");
          return;
       }
       // first remove nodes that should be deleted.
-      for (Fqn fqn : entry.getRemovedNodes())
+      for (Fqn fqn : transactionContext.getRemovedNodes())
       {
          dataContainer.removeFromDataStructure(fqn, false);
       }

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/ReplicationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/ReplicationInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/ReplicationInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -15,7 +15,7 @@
 import org.jboss.cache.commands.write.RemoveNodeCommand;
 import org.jboss.cache.config.Configuration;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 
 /**
  * Takes care of replicating modifications to other nodes in a cluster. Also
@@ -40,11 +40,11 @@
    public Object visitPrepareCommand(InvocationContext ctx, PrepareCommand command) throws Throwable
    {
       Object retVal = invokeNextInterceptor(ctx, command);
-      TransactionEntry te = ctx.getTransactionEntry();
-      if (te.hasLocalModifications())
+      TransactionContext transactionContext = ctx.getTransactionContext();
+      if (transactionContext.hasLocalModifications())
       {
          PrepareCommand replicablePrepareCommand = command.copy(); // makre sure we remove any "local" transactions
-         replicablePrepareCommand.removeModifications(te.getLocalModifications());
+         replicablePrepareCommand.removeModifications(transactionContext.getLocalModifications());
          command = replicablePrepareCommand;
       }
 
@@ -70,8 +70,8 @@
       if (isTransactionalAndLocal(ctx))
       {
          Object returnValue = invokeNextInterceptor(ctx, command);
-         ctx.getTransactionEntry().setForceAsyncReplication(true);
-         if (local) ctx.getTransactionEntry().addLocalModification(command);
+         ctx.getTransactionContext().setForceAsyncReplication(true);
+         if (local) ctx.getTransactionContext().addLocalModification(command);
          return returnValue;
       }
       else
@@ -140,7 +140,7 @@
       }
       else
       {
-         if (local) ctx.getTransactionEntry().addLocalModification((ReversibleCommand) command);
+         if (local) ctx.getTransactionContext().addLocalModification((ReversibleCommand) command);
       }
       return returnValue;
    }

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/TxInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/TxInterceptor.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/TxInterceptor.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -33,7 +33,7 @@
 import org.jboss.cache.lock.LockManager;
 import org.jboss.cache.notifications.Notifier;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 import org.jboss.cache.transaction.TransactionTable;
 import org.jboss.cache.util.concurrent.ConcurrentHashSet;
 
@@ -359,22 +359,22 @@
          // at this point we have a non-null ltx
 
          // Asssociate the local TX with the global TX. Create new
-         // entry for TX in txTable, the modifications
-         // below will need this entry to add their modifications
+         // transactionContext for TX in txTable, the modifications
+         // below will need this transactionContext to add their modifications
          // under the GlobalTx key
-         TransactionEntry entry = txTable.get(gtx);
-         if (entry == null)
+         TransactionContext transactionContext = txTable.get(gtx);
+         if (transactionContext == null)
          {
-            // create a new transaction entry
-            if (log.isDebugEnabled()) log.debug("creating new tx entry");
-            entry = createNewTransactionEntry(ltx);
-            txTable.put(gtx, entry);
+            // create a new transaction transactionContext
+            if (log.isDebugEnabled()) log.debug("creating new tx transactionContext");
+            transactionContext = createNewTransactionContext(ltx);
+            txTable.put(gtx, transactionContext);
          }
 
-         setTransactionalContext(ltx, gtx, entry, ctx);
+         setTransactionalContext(ltx, gtx, transactionContext, ctx);
 
          // register a sync handler for this tx.
-         registerHandler(ltx, new RemoteSynchronizationHandler(gtx, ltx, entry), ctx);
+         registerHandler(ltx, new RemoteSynchronizationHandler(gtx, ltx, transactionContext), ctx);
 
          success = false;
 
@@ -448,9 +448,9 @@
       return retval;
    }
 
-   protected TransactionEntry createNewTransactionEntry(Transaction tx) throws Exception
+   protected TransactionContext createNewTransactionContext(Transaction tx) throws Exception
    {
-      return new TransactionEntry(tx);
+      return new TransactionContext(tx);
    }
 
    private ReplicableCommand attachGlobalTransaction(InvocationContext ctx, Transaction tx, VisitableCommand command) throws Throwable
@@ -599,8 +599,8 @@
 
    protected void cleanupStaleLocks(InvocationContext ctx) throws Throwable
    {
-      TransactionEntry entry = ctx.getTransactionEntry();
-      if (entry != null) lockManager.unlock(ctx);
+      TransactionContext transactionContext = ctx.getTransactionContext();
+      if (transactionContext != null) lockManager.unlock(ctx);
    }
 
    /**
@@ -736,16 +736,16 @@
       if (TransactionTable.isValid(tx) && transactions.add(tx))
       {
          gtx = txTable.getCurrentTransaction(tx, true);
-         TransactionEntry entry;
+         TransactionContext transactionContext;
          if (ctx.getGlobalTransaction() == null)
          {
             ctx.setGlobalTransaction(gtx);
-            entry = txTable.get(gtx);
-            ctx.setTransactionEntry(entry);
+            transactionContext = txTable.get(gtx);
+            ctx.setTransactionContext(transactionContext);
          }
          else
          {
-            entry = ctx.getTransactionEntry();
+            transactionContext = ctx.getTransactionContext();
          }
          if (gtx.isRemote())
          {
@@ -757,7 +757,7 @@
             if (trace) log.trace("Registering sync handler for tx " + tx + ", gtx " + gtx);
 
             // see the comment in the LocalSyncHandler for the last isOriginLocal param.
-            LocalSynchronizationHandler myHandler = new LocalSynchronizationHandler(gtx, tx, entry, !ctx.isOriginLocal());
+            LocalSynchronizationHandler myHandler = new LocalSynchronizationHandler(gtx, tx, transactionContext, !ctx.isOriginLocal());
             registerHandler(tx, myHandler, ctx);
          }
       }
@@ -781,7 +781,7 @@
     */
    private void registerHandler(Transaction tx, Synchronization handler, InvocationContext ctx) throws Exception
    {
-      OrderedSynchronizationHandler orderedHandler = ctx.getTransactionEntry().getOrderedSynchronizationHandler(); //OrderedSynchronizationHandler.getInstance(tx);
+      OrderedSynchronizationHandler orderedHandler = ctx.getTransactionContext().getOrderedSynchronizationHandler(); //OrderedSynchronizationHandler.getInstance(tx);
 
       if (trace) log.trace("registering for TX completion: SynchronizationHandler(" + handler + ")");
 
@@ -893,31 +893,32 @@
       Transaction tx = null;
       GlobalTransaction gtx = null;
       List<ReversibleCommand> modifications = null;
-      TransactionEntry entry = null;
+      TransactionContext transactionContext = null;
       protected InvocationContext ctx; // the context for this call.
 
-      RemoteSynchronizationHandler(GlobalTransaction gtx, Transaction tx, TransactionEntry entry)
+      RemoteSynchronizationHandler(GlobalTransaction gtx, Transaction tx, TransactionContext entry)
       {
          this.gtx = gtx;
          this.tx = tx;
-         this.entry = entry;
+         this.transactionContext = entry;
       }
 
       public void beforeCompletion()
       {
          if (trace) log.trace("Running beforeCompletion on gtx " + gtx);
 
-         if (entry == null)
+         if (transactionContext == null)
          {
             log.error("Transaction has a null transaction entry - beforeCompletion() will fail.");
             throw new IllegalStateException("cannot find transaction entry for " + gtx);
          }
 
-         modifications = entry.getModifications();
+         modifications = transactionContext.getModifications();
          ctx = invocationContextContainer.get();
-         setTransactionalContext(tx, gtx, entry, ctx);
+         setTransactionalContext(tx, gtx, transactionContext, ctx);
 
-         if (ctx.isOptionsUninitialised() && entry.getOption() != null) ctx.setOptionOverrides(entry.getOption());
+         if (ctx.isOptionsUninitialised() && transactionContext.getOption() != null)
+            ctx.setOptionOverrides(transactionContext.getOption());
 
          assertCanContinue();
 
@@ -932,12 +933,12 @@
          if (ctx == null)
          {
             ctx = invocationContextContainer.get();
-            setTransactionalContext(tx, gtx, entry, ctx);
+            setTransactionalContext(tx, gtx, transactionContext, ctx);
 
-            if (ctx.isOptionsUninitialised() && entry != null && entry.getOption() != null)
+            if (ctx.isOptionsUninitialised() && transactionContext != null && transactionContext.getOption() != null)
             {
                // use the options from the transaction entry instead
-               ctx.setOptionOverrides(entry.getOption());
+               ctx.setOptionOverrides(transactionContext.getOption());
             }
          }
 
@@ -957,11 +958,11 @@
             if (trace) log.trace("calling aftercompletion for " + gtx);
 
             // set any transaction wide options as current for this thread.
-            if (entry != null)
+            if (transactionContext != null)
             {
                // this should ideally be set in beforeCompletion(), after compacting the list.
-               if (modifications == null) modifications = entry.getModifications();
-               ctx.setOptionOverrides(entry.getOption());
+               if (modifications == null) modifications = transactionContext.getModifications();
+               ctx.setOptionOverrides(transactionContext.getOption());
             }
             if (tx != null) transactions.remove(tx);
 
@@ -1017,8 +1018,8 @@
          tx = null;
          gtx = null;
          modifications = null;
-         if (entry != null) entry.reset();
-         entry = null;
+         if (transactionContext != null) transactionContext.reset();
+         transactionContext = null;
       }
 
       @Override
@@ -1059,9 +1060,9 @@
        * @param tx
        * @param remoteLocal
        */
-      LocalSynchronizationHandler(GlobalTransaction gtx, Transaction tx, TransactionEntry entry, boolean remoteLocal)
+      LocalSynchronizationHandler(GlobalTransaction gtx, Transaction tx, TransactionContext transactionContext, boolean remoteLocal)
       {
-         super(gtx, tx, entry);
+         super(gtx, tx, transactionContext);
          this.remoteLocal = remoteLocal;
       }
 
@@ -1072,8 +1073,8 @@
          ctx.setOriginLocal(!remoteLocal); // this is the LOCAL sync handler after all!
          // fetch the modifications before the transaction is committed
          // (and thus removed from the txTable)
-         setTransactionalContext(tx, gtx, entry, ctx);
-         if (!entry.hasModifications())
+         setTransactionalContext(tx, gtx, transactionContext, ctx);
+         if (!transactionContext.hasModifications())
          {
             if (trace) log.trace("No modifications in this tx.  Skipping beforeCompletion()");
             modifications = Collections.emptyList();
@@ -1082,7 +1083,7 @@
 
          // set any transaction wide options as current for this thread, caching original options that would then be reset
          originalOptions = ctx.getOptionOverrides();
-         transactionalOptions = entry.getOption();
+         transactionalOptions = transactionContext.getOption();
          ctx.setOptionOverrides(transactionalOptions);
 
          try
@@ -1139,7 +1140,7 @@
          // could happen if a rollback is called and beforeCompletion() doesn't get called.
          if (ctx == null) ctx = invocationContextContainer.get();
          ctx.setLocalRollbackOnly(localRollbackOnly);
-         setTransactionalContext(tx, gtx, entry, ctx);
+         setTransactionalContext(tx, gtx, transactionContext, ctx);
          ctx.setOptionOverrides(transactionalOptions);
          try
          {

Modified: core/trunk/src/main/java/org/jboss/cache/lock/LockUtil.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/lock/LockUtil.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/lock/LockUtil.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -9,7 +9,7 @@
 import org.jboss.cache.factories.CommandsFactory;
 import org.jboss.cache.statetransfer.StateTransferManager;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 import org.jboss.cache.transaction.TransactionTable;
 
 import javax.transaction.Status;
@@ -216,15 +216,15 @@
       if (ctx.getGlobalTransaction() != null) //if no tx then reverse remove does not make sense
       {
          Fqn fqn = childNode.getFqn();
-         TransactionEntry entry = ctx.getTransactionEntry();
-         boolean needToReverseRemove = reverseRemoveCheck && childNode.isDeleted() && entry != null && entry.getRemovedNodes().contains(fqn);
+         TransactionContext transactionContext = ctx.getTransactionContext();
+         boolean needToReverseRemove = reverseRemoveCheck && childNode.isDeleted() && transactionContext != null && transactionContext.getRemovedNodes().contains(fqn);
          if (!needToReverseRemove) return;
          childNode.markAsDeleted(false);
          //if we'll rollback the tx data should be added to the node again
          Map oldData = new HashMap(childNode.getDataDirect());
          PutDataMapCommand command = commandsFactory.buildPutDataMapCommand(ctx.getGlobalTransaction(), fqn, oldData);
          // txTable.get(gtx).addUndoOperation(command); --- now need to make sure this is added to the normal mods list instead
-         entry.addModification(command);
+         transactionContext.addModification(command);
          //we're prepared for rollback, now reset the node
          childNode.clearDataDirect();
          if (createdNodes != null)

Copied: core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionContext.java (from rev 6034, core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionEntry.java)
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionContext.java	                        (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionContext.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -0,0 +1,57 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.cache.transaction;
+
+import org.jboss.cache.optimistic.TransactionWorkspace;
+import org.jboss.cache.optimistic.TransactionWorkspaceImpl;
+
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+
+/**
+ * Subclasses the {@link TransactionContext} class to add a {@link TransactionWorkspace}.  Used with optimistic locking
+ * where each call is assigned a trasnaction and a transaction workspace.
+ *
+ * @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
+ * @author <a href="mailto:stevew at jofti.com">Steve Woodcock (stevew at jofti.com)</a>
+ */
+
+public class OptimisticTransactionContext extends TransactionContext
+{
+   private TransactionWorkspace transactionWorkSpace = new TransactionWorkspaceImpl();
+
+   public OptimisticTransactionContext(Transaction tx) throws SystemException, RollbackException
+   {
+      super(tx);
+   }
+
+   @Override
+   public String toString()
+   {
+      StringBuffer sb = new StringBuffer(super.toString());
+      sb.append("\nworkspace: ").append(transactionWorkSpace);
+      return sb.toString();
+   }
+
+   /**
+    * @return Returns the transactionWorkSpace.
+    */
+   public TransactionWorkspace getTransactionWorkSpace()
+   {
+      return transactionWorkSpace;
+   }
+
+   /**
+    * @param transactionWorkSpace The transactionWorkSpace to set.
+    */
+   public void setTransactionWorkSpace(TransactionWorkspace transactionWorkSpace)
+   {
+      this.transactionWorkSpace = transactionWorkSpace;
+   }
+
+}


Property changes on: core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionContext.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Deleted: core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionEntry.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionEntry.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/transaction/OptimisticTransactionEntry.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -1,57 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.cache.transaction;
-
-import org.jboss.cache.optimistic.TransactionWorkspace;
-import org.jboss.cache.optimistic.TransactionWorkspaceImpl;
-
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-
-/**
- * Subclasses the {@link TransactionEntry} class to add a {@link TransactionWorkspace}.  Used with optimistic locking
- * where each call is assigned a trasnaction and a transaction workspace.
- *
- * @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
- * @author <a href="mailto:stevew at jofti.com">Steve Woodcock (stevew at jofti.com)</a>
- */
-
-public class OptimisticTransactionEntry extends TransactionEntry
-{
-   private TransactionWorkspace transactionWorkSpace = new TransactionWorkspaceImpl();
-
-   public OptimisticTransactionEntry(Transaction tx) throws SystemException, RollbackException
-   {
-      super(tx);
-   }
-
-   @Override
-   public String toString()
-   {
-      StringBuffer sb = new StringBuffer(super.toString());
-      sb.append("\nworkspace: ").append(transactionWorkSpace);
-      return sb.toString();
-   }
-
-   /**
-    * @return Returns the transactionWorkSpace.
-    */
-   public TransactionWorkspace getTransactionWorkSpace()
-   {
-      return transactionWorkSpace;
-   }
-
-   /**
-    * @param transactionWorkSpace The transactionWorkSpace to set.
-    */
-   public void setTransactionWorkSpace(TransactionWorkspace transactionWorkSpace)
-   {
-      this.transactionWorkSpace = transactionWorkSpace;
-   }
-
-}

Copied: core/trunk/src/main/java/org/jboss/cache/transaction/TransactionContext.java (from rev 6034, core/trunk/src/main/java/org/jboss/cache/transaction/TransactionEntry.java)
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/transaction/TransactionContext.java	                        (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/transaction/TransactionContext.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -0,0 +1,462 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.cache.transaction;
+
+
+import net.jcip.annotations.ThreadSafe;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.NodeSPI;
+import org.jboss.cache.commands.ReversibleCommand;
+import org.jboss.cache.config.Option;
+import org.jboss.cache.interceptors.OrderedSynchronizationHandler;
+import org.jboss.cache.lock.NodeLock;
+
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+
+/**
+ * Information associated with a {@link GlobalTransaction} about the transaction state.
+ * <p/>
+ * A TransactionContext maintains:
+ * <ul>
+ * <li>Handle to the local Transaction</li>
+ * <li>List of {@link org.jboss.cache.commands.ReversibleCommand}s that make up this transaction</li>
+ * <li>List of locks acquired</li>
+ * <li>Any transaction-scope options</li>
+ * </ul>
+ *
+ * @author <a href="mailto:bela at jboss.org">Bela Ban</a>
+ * @author Manik Surtani
+ * @version $Revision$
+ */
+ at ThreadSafe
+public class TransactionContext
+{
+
+   private static final Log log = LogFactory.getLog(TransactionContext.class);
+   private static final boolean trace = log.isTraceEnabled();
+
+   /**
+    * Local transaction
+    */
+   private Transaction ltx = null;
+   private Option option;
+   private OrderedSynchronizationHandler orderedSynchronizationHandler;
+
+   private boolean forceAsyncReplication = false;
+   private boolean forceSyncReplication = false;
+
+   /**
+    * List&lt;ReversibleCommand&gt; of modifications ({@link ReversibleCommand}). They will be replicated on TX commit
+    */
+   private List<ReversibleCommand> modificationList;
+   /**
+    * A list of modifications that have been encountered with a LOCAL mode option.  These will be removed from the modification list during replication.
+    */
+   private List<ReversibleCommand> localModifications;
+
+   /**
+    * LinkedHashSet of locks acquired by the transaction. We use a LinkedHashSet because we need efficient Set semantics
+    * but also need guaranteed ordering for use by lock release code (see JBCCACHE-874).
+    * <p/>
+    * This needs to be unchecked since we support both MVCC (Fqns held here) or legacy Opt/Pess locking (NodeLocks held here).
+    * once we drop support for opt/pess locks we can genericise this to contain Fqns. - Manik Surtani, June 2008
+    */
+   private LinkedHashSet transactionLocks;
+   private final Map<Fqn, NodeSPI> lookedUpNodes = new HashMap<Fqn, NodeSPI>();
+
+
+   /**
+    * A list of dummy uninitialised nodes created by the cache loader interceptor to load data for a
+    * given node in this tx.
+    */
+   private List<Fqn> dummyNodesCreatedByCacheLoader;
+
+   /**
+    * List<Fqn> of nodes that have been removed by the transaction
+    */
+   private final List<Fqn> removedNodes = new LinkedList<Fqn>();
+
+   public TransactionContext(Transaction tx) throws SystemException, RollbackException
+   {
+      ltx = tx;
+      orderedSynchronizationHandler = new OrderedSynchronizationHandler(tx);
+   }
+
+   /**
+    * Adds a modification to the modification list.
+    */
+   public void addModification(ReversibleCommand command)
+   {
+      if (command == null) return;
+      if (modificationList == null) modificationList = new LinkedList<ReversibleCommand>();
+      modificationList.add(command);
+   }
+
+   /**
+    * Returns all modifications.
+    */
+   public List<ReversibleCommand> getModifications()
+   {
+      if (modificationList == null) return Collections.emptyList();
+      return modificationList;
+   }
+
+   /**
+    * Adds a modification to the local modification list.
+    */
+   public void addLocalModification(ReversibleCommand command)
+   {
+      if (command == null) return;
+      if (localModifications == null) localModifications = new LinkedList<ReversibleCommand>();
+      localModifications.add(command);
+   }
+
+   /**
+    * Returns all modifications that have been invoked with the LOCAL cache mode option.  These will also be in the standard modification list.
+    */
+   public List<ReversibleCommand> getLocalModifications()
+   {
+      if (localModifications == null) return Collections.emptyList();
+      return localModifications;
+   }
+
+
+   /**
+    * Adds the node that has been removed.
+    *
+    * @param fqn
+    */
+   public void addRemovedNode(Fqn fqn)
+   {
+      removedNodes.add(fqn);
+   }
+
+   /**
+    * Gets the list of removed nodes.
+    */
+   public List<Fqn> getRemovedNodes()
+   {
+      return new ArrayList<Fqn>(removedNodes);
+   }
+
+   /**
+    * Sets the local transaction for this entry.
+    */
+   public void setTransaction(Transaction tx)
+   {
+      ltx = tx;
+   }
+
+   /**
+    * Returns a local transaction associated with this TransactionEntry
+    */
+   public Transaction getTransaction()
+   {
+      return ltx;
+   }
+
+   /**
+    * Adds a lock to the currently maintained collection of locks acquired.
+    * <p/>
+    * Most code could not use this method directly, but use {@link org.jboss.cache.InvocationContext#addLock(Object)} instead,
+    * which would delegate to this method if a transaction is in scope or otherwise use invocation-specific locks.
+    * <p/>
+    * Note that currently (as of 3.0.0) this lock is weakly typed.  This is to allow support for both MVCC (which uses {@link Fqn}s as locks)
+    * as well as legacy Optimistic and Pessimistic Locking schemes (which use {@link NodeLock} as locks).  Once support for
+    * legacy node locking schemes are dropped, this method will be more strongly typed to accept {@link Fqn}.
+    *
+    * @param lock lock to add
+    * @see org.jboss.cache.InvocationContext#addLock(Object)
+    */
+   @SuppressWarnings("unchecked")
+   public void addLock(Object lock)
+   {
+      // no need to worry about concurrency here - a context is only valid for a single thread.
+      if (transactionLocks == null) transactionLocks = new LinkedHashSet(5);
+      transactionLocks.add(lock);
+   }
+
+   /**
+    * Removes a lock from the currently maintained collection of locks acquired.
+    * <p/>
+    * Most code could not use this method directly, but use {@link org.jboss.cache.InvocationContext#removeLock(Object)}  instead,
+    * which would delegate to this method if a transaction is in scope or otherwise use invocation-specific locks.
+    * <p/>
+    * Note that currently (as of 3.0.0) this lock is weakly typed.  This is to allow support for both MVCC (which uses {@link Fqn}s as locks)
+    * as well as legacy Optimistic and Pessimistic Locking schemes (which use {@link NodeLock} as locks).  Once support for
+    * legacy node locking schemes are dropped, this method will be more strongly typed to accept {@link Fqn}.
+    *
+    * @param lock lock to remove
+    * @see org.jboss.cache.InvocationContext#removeLock(Object)
+    */
+   @SuppressWarnings("unchecked")
+   public void removeLock(Object lock)
+   {
+      // no need to worry about concurrency here - a context is only valid for a single thread.
+      if (transactionLocks != null) transactionLocks.remove(lock);
+   }
+
+   /**
+    * Clears all locks from the currently maintained collection of locks acquired.
+    * <p/>
+    * Most code could not use this method directly, but use {@link org.jboss.cache.InvocationContext#clearLocks()} instead,
+    * which would delegate to this method if a transaction is in scope or otherwise use invocation-specific locks.
+    * <p/>
+    * Note that currently (as of 3.0.0) this lock is weakly typed.  This is to allow support for both MVCC (which uses {@link Fqn}s as locks)
+    * as well as legacy Optimistic and Pessimistic Locking schemes (which use {@link NodeLock} as locks).  Once support for
+    * legacy node locking schemes are dropped, this method will be more strongly typed to accept {@link Fqn}.
+    *
+    * @see org.jboss.cache.InvocationContext#clearLocks()
+    */
+   public void clearLocks()
+   {
+      if (transactionLocks != null) transactionLocks.clear();
+   }
+
+
+   /**
+    * Adds a List of locks to the currently maintained collection of locks acquired.
+    * <p/>
+    * Most code could not use this method directly, but use {@link org.jboss.cache.InvocationContext#addAllLocks(java.util.List)} instead,
+    * which would delegate to this method if a transaction is in scope or otherwise use invocation-specific locks.
+    * <p/>
+    * Note that currently (as of 3.0.0) this list is unchecked.  This is to allow support for both MVCC (which uses Fqns as locks)
+    * as well as legacy Optimistic and Pessimistic Locking schemes (which use {@link NodeLock} as locks).  Once support for
+    * legacy node locking schemes are dropped, this method will be more strongly typed to accept <tt>List<Fqn></tt>.
+    *
+    * @param newLocks locks to add
+    * @see org.jboss.cache.InvocationContext#addAllLocks(java.util.List)
+    */
+   @SuppressWarnings("unchecked")
+   public void addAllLocks(List newLocks)
+   {
+      // no need to worry about concurrency here - a context is only valid for a single thread.
+      if (transactionLocks == null) transactionLocks = new LinkedHashSet(5);
+      transactionLocks.addAll(newLocks);
+   }
+
+   /**
+    * Returns an immutable,  defensive copy of the List of locks currently maintained for the transaction.
+    * <p/>
+    * Most code could not use this method directly, but use {@link org.jboss.cache.InvocationContext#getLocks()} instead,
+    * which would delegate to this method if a transaction is in scope or otherwise use invocation-specific locks.
+    * <p/>
+    * Note that currently (as of 3.0.0) this list is unchecked.  This is to allow support for both MVCC (which uses Fqns as locks)
+    * as well as legacy Optimistic and Pessimistic Locking schemes (which use {@link NodeLock} as locks).  Once support for
+    * legacy node locking schemes are dropped, this method will be more strongly typed to return <tt>List<Fqn></tt>.
+    *
+    * @return locks held in current scope.
+    * @see org.jboss.cache.InvocationContext#getLocks()
+    */
+   @SuppressWarnings("unchecked")
+   public List getLocks()
+   {
+      return Collections.unmodifiableList(new ArrayList(transactionLocks));
+   }
+
+
+   /**
+    * Gets the value of the forceAsyncReplication flag.  Used by ReplicationInterceptor and OptimisticReplicationInterceptor
+    * when dealing with {@link org.jboss.cache.Cache#putForExternalRead(org.jboss.cache.Fqn,Object,Object)} within
+    * a transactional context.
+    *
+    * @return true if the forceAsyncReplication flag is set to true.
+    */
+   public boolean isForceAsyncReplication()
+   {
+      return forceAsyncReplication;
+   }
+
+   /**
+    * Sets the value of the forceAsyncReplication flag.  Used by ReplicationInterceptor and OptimisticReplicationInterceptor
+    * when dealing with {@link org.jboss.cache.Cache#putForExternalRead(org.jboss.cache.Fqn,Object,Object)} within
+    * a transactional context. Also used by OptimisticReplicationInterceptor when dealing
+    * with {@link org.jboss.cache.config.Option#setForceAsynchronous(boolean)} in a
+    * non-transactional context (i.e. with an implicit transaction).
+    *
+    * @param forceAsyncReplication value of forceAsyncReplication
+    */
+   public void setForceAsyncReplication(boolean forceAsyncReplication)
+   {
+      this.forceAsyncReplication = forceAsyncReplication;
+      if (forceAsyncReplication)
+      {
+         forceSyncReplication = false;
+      }
+   }
+
+   /**
+    * Gets the value of the forceSyncReplication flag.  Used by ReplicationInterceptor and OptimisticReplicationInterceptor
+    * when dealing with {@link org.jboss.cache.Cache#putForExternalRead(org.jboss.cache.Fqn,Object,Object)} within
+    * a transactional context.
+    *
+    * @return true if the forceAsyncReplication flag is set to true.
+    */
+   public boolean isForceSyncReplication()
+   {
+      return forceSyncReplication;
+   }
+
+   /**
+    * Sets the value of the forceSyncReplication flag.  Used by ReplicationInterceptor and OptimisticReplicationInterceptor
+    * when dealing with {@link org.jboss.cache.Cache#putForExternalRead(org.jboss.cache.Fqn,Object,Object)} within
+    * a transactional context.
+    *
+    * @param forceSyncReplication value of forceSyncReplication
+    */
+   public void setForceSyncReplication(boolean forceSyncReplication)
+   {
+      this.forceSyncReplication = forceSyncReplication;
+      if (forceSyncReplication)
+      {
+         forceAsyncReplication = false;
+      }
+   }
+
+
+   /**
+    * Posts all undo operations to the CacheImpl.
+    */
+   public void undoOperations()
+   {
+      if (modificationList == null)
+      {
+         if (trace) log.trace("Modification list is null, no modifications in this transaction!");
+         return;
+      }
+
+      if (trace) log.trace("undoOperations " + modificationList);
+
+      ArrayList<ReversibleCommand> copy;
+//      synchronized (modificationList)
+//      {
+      // no need to sync?  Only one thread would access a transaction at any given time?
+      copy = new ArrayList<ReversibleCommand>(modificationList);
+//      }
+      for (ListIterator i = copy.listIterator(copy.size()); i.hasPrevious();)
+      {
+         Object undoOp = i.previous();
+         ReversibleCommand txCommand = (ReversibleCommand) undoOp;
+         if (log.isDebugEnabled()) log.debug("Calling rollback() on command " + undoOp);
+         txCommand.rollback();
+      }
+   }
+
+   /**
+    * Returns debug information about this transaction.
+    */
+   @Override
+   public String toString()
+   {
+      StringBuilder sb = new StringBuilder();
+      sb.append("TransactionEntry\nmodificationList: ").append(modificationList);
+      return sb.toString();
+   }
+
+   public void loadUninitialisedNode(Fqn fqn)
+   {
+      if (dummyNodesCreatedByCacheLoader == null)
+         dummyNodesCreatedByCacheLoader = new LinkedList<Fqn>();
+      dummyNodesCreatedByCacheLoader.add(fqn);
+   }
+
+   public List<Fqn> getDummyNodesCreatedByCacheLoader()
+   {
+      return dummyNodesCreatedByCacheLoader;
+   }
+
+   /**
+    * Sets a transaction-scope option override
+    *
+    * @param o
+    */
+   public void setOption(Option o)
+   {
+      this.option = o;
+   }
+
+   /**
+    * Retrieves a transaction scope option override
+    */
+   public Option getOption()
+   {
+      return this.option;
+   }
+
+   public OrderedSynchronizationHandler getOrderedSynchronizationHandler()
+   {
+      return orderedSynchronizationHandler;
+   }
+
+   public void setOrderedSynchronizationHandler(OrderedSynchronizationHandler orderedSynchronizationHandler)
+   {
+      this.orderedSynchronizationHandler = orderedSynchronizationHandler;
+   }
+
+   /**
+    * Returns true if modifications were registered to either modificationList or to class loader modifications list.
+    */
+   public boolean hasModifications()
+   {
+      return modificationList != null && !modificationList.isEmpty();
+   }
+
+   /**
+    * @return true if any modifications have been invoked with cache mode being LOCAL.
+    */
+   public boolean hasLocalModifications()
+   {
+      return localModifications != null && !localModifications.isEmpty();
+   }
+
+   public NodeSPI lookUpNode(Fqn fqn)
+   {
+      return lookedUpNodes.get(fqn);
+   }
+
+   public void putLookedUpNode(Fqn f, NodeSPI n)
+   {
+      lookedUpNodes.put(f, n);
+   }
+
+   public void clearLookedUpNodes()
+   {
+      lookedUpNodes.clear();
+   }
+
+   public Map<Fqn, NodeSPI> getLookedUpNodes()
+   {
+      return lookedUpNodes;
+   }
+
+
+   /**
+    * Cleans up internal state
+    */
+   public void reset()
+   {
+      orderedSynchronizationHandler = null;
+      if (modificationList != null) modificationList = null;
+      if (localModifications != null) localModifications = null;
+      option = null;
+      transactionLocks.clear();
+      if (dummyNodesCreatedByCacheLoader != null) dummyNodesCreatedByCacheLoader.clear();
+      removedNodes.clear();
+   }
+}


Property changes on: core/trunk/src/main/java/org/jboss/cache/transaction/TransactionContext.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Deleted: core/trunk/src/main/java/org/jboss/cache/transaction/TransactionEntry.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/transaction/TransactionEntry.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/transaction/TransactionEntry.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -1,465 +0,0 @@
-/*
- * JBoss, the OpenSource J2EE webOS
- *
- * Distributable under LGPL license.
- * See terms of license at gnu.org.
- */
-package org.jboss.cache.transaction;
-
-
-import net.jcip.annotations.ThreadSafe;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.jboss.cache.Fqn;
-import org.jboss.cache.Modification;
-import org.jboss.cache.NodeSPI;
-import org.jboss.cache.commands.ReversibleCommand;
-import org.jboss.cache.config.Option;
-import org.jboss.cache.interceptors.OrderedSynchronizationHandler;
-import org.jboss.cache.lock.IdentityLock;
-import org.jboss.cache.lock.NodeLock;
-
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-
-/**
- * Information associated with a {@link GlobalTransaction} about the transaction state.
- * <p/>
- * A TransactionEntry maintains:
- * <ul>
- * <li>Handle to local Transactions: there can be more than 1 local TX associated with a GlobalTransaction
- * <li>List of modifications ({@link Modification})
- * <li>List of nodes that were created as part of lock acquisition. These nodes can be
- * safely deleted when a transaction is rolled back
- * <li>List of locks ({@link IdentityLock}) that have been acquired by
- * this transaction so far
- * </ul>
- *
- * @author <a href="mailto:bela at jboss.org">Bela Ban</a> Apr 14, 2003
- * @version $Revision$
- */
- at ThreadSafe
-public class TransactionEntry
-{
-
-   private static final Log log = LogFactory.getLog(TransactionEntry.class);
-   private static final boolean trace = log.isTraceEnabled();
-
-   /**
-    * Local transaction
-    */
-   private Transaction ltx = null;
-   private Option option;
-   private OrderedSynchronizationHandler orderedSynchronizationHandler;
-
-   private boolean forceAsyncReplication = false;
-   private boolean forceSyncReplication = false;
-
-   /**
-    * List&lt;ReversibleCommand&gt; of modifications ({@link ReversibleCommand}). They will be replicated on TX commit
-    */
-   private List<ReversibleCommand> modificationList;
-   /**
-    * A list of modifications that have been encountered with a LOCAL mode option.  These will be removed from the modification list during replication.
-    */
-   private List<ReversibleCommand> localModifications;
-
-   /**
-    * LinkedHashSet of locks acquired by the transaction. We use a LinkedHashSet because we need efficient Set semantics
-    * but also need guaranteed ordering for use by lock release code (see JBCCACHE-874).
-    * <p/>
-    * This needs to be unchecked since we support both MVCC (Fqns held here) or legacy Opt/Pess locking (NodeLocks held here).
-    * once we drop support for opt/pess locks we can genericise this to contain Fqns. - Manik Surtani, June 2008
-    */
-   private LinkedHashSet transactionLocks;
-   private final Map<Fqn, NodeSPI> lookedUpNodes = new HashMap<Fqn, NodeSPI>();
-
-
-   /**
-    * A list of dummy uninitialised nodes created by the cache loader interceptor to load data for a
-    * given node in this tx.
-    */
-   private List<Fqn> dummyNodesCreatedByCacheLoader;
-
-   /**
-    * List<Fqn> of nodes that have been removed by the transaction
-    */
-   private final List<Fqn> removedNodes = new LinkedList<Fqn>();
-
-   public TransactionEntry(Transaction tx) throws SystemException, RollbackException
-   {
-      ltx = tx;
-      orderedSynchronizationHandler = new OrderedSynchronizationHandler(tx);
-   }
-
-   /**
-    * Adds a modification to the modification list.
-    */
-   public void addModification(ReversibleCommand command)
-   {
-      if (command == null) return;
-      if (modificationList == null) modificationList = new LinkedList<ReversibleCommand>();
-      modificationList.add(command);
-   }
-
-   /**
-    * Returns all modifications.
-    */
-   public List<ReversibleCommand> getModifications()
-   {
-      if (modificationList == null) return Collections.emptyList();
-      return modificationList;
-   }
-
-   /**
-    * Adds a modification to the local modification list.
-    */
-   public void addLocalModification(ReversibleCommand command)
-   {
-      if (command == null) return;
-      if (localModifications == null) localModifications = new LinkedList<ReversibleCommand>();
-      localModifications.add(command);
-   }
-
-   /**
-    * Returns all modifications that have been invoked with the LOCAL cache mode option.  These will also be in the standard modification list.
-    */
-   public List<ReversibleCommand> getLocalModifications()
-   {
-      if (localModifications == null) return Collections.emptyList();
-      return localModifications;
-   }
-
-
-   /**
-    * Adds the node that has been removed.
-    *
-    * @param fqn
-    */
-   public void addRemovedNode(Fqn fqn)
-   {
-      removedNodes.add(fqn);
-   }
-
-   /**
-    * Gets the list of removed nodes.
-    */
-   public List<Fqn> getRemovedNodes()
-   {
-      return new ArrayList<Fqn>(removedNodes);
-   }
-
-   /**
-    * Sets the local transaction for this entry.
-    */
-   public void setTransaction(Transaction tx)
-   {
-      ltx = tx;
-   }
-
-   /**
-    * Returns a local transaction associated with this TransactionEntry
-    */
-   public Transaction getTransaction()
-   {
-      return ltx;
-   }
-
-   /**
-    * Adds a lock to the currently maintained collection of locks acquired.
-    * <p/>
-    * Most code could not use this method directly, but use {@link org.jboss.cache.InvocationContext#addLock(Object)} instead,
-    * which would delegate to this method if a transaction is in scope or otherwise use invocation-specific locks.
-    * <p/>
-    * Note that currently (as of 3.0.0) this lock is weakly typed.  This is to allow support for both MVCC (which uses {@link Fqn}s as locks)
-    * as well as legacy Optimistic and Pessimistic Locking schemes (which use {@link NodeLock} as locks).  Once support for
-    * legacy node locking schemes are dropped, this method will be more strongly typed to accept {@link Fqn}.
-    *
-    * @param lock lock to add
-    * @see org.jboss.cache.InvocationContext#addLock(Object)
-    */
-   @SuppressWarnings("unchecked")
-   public void addLock(Object lock)
-   {
-      // no need to worry about concurrency here - a context is only valid for a single thread.
-      if (transactionLocks == null) transactionLocks = new LinkedHashSet(5);
-      transactionLocks.add(lock);
-   }
-
-   /**
-    * Removes a lock from the currently maintained collection of locks acquired.
-    * <p/>
-    * Most code could not use this method directly, but use {@link org.jboss.cache.InvocationContext#removeLock(Object)}  instead,
-    * which would delegate to this method if a transaction is in scope or otherwise use invocation-specific locks.
-    * <p/>
-    * Note that currently (as of 3.0.0) this lock is weakly typed.  This is to allow support for both MVCC (which uses {@link Fqn}s as locks)
-    * as well as legacy Optimistic and Pessimistic Locking schemes (which use {@link NodeLock} as locks).  Once support for
-    * legacy node locking schemes are dropped, this method will be more strongly typed to accept {@link Fqn}.
-    *
-    * @param lock lock to remove
-    * @see org.jboss.cache.InvocationContext#removeLock(Object)
-    */
-   @SuppressWarnings("unchecked")
-   public void removeLock(Object lock)
-   {
-      // no need to worry about concurrency here - a context is only valid for a single thread.
-      if (transactionLocks != null) transactionLocks.remove(lock);
-   }
-
-   /**
-    * Clears all locks from the currently maintained collection of locks acquired.
-    * <p/>
-    * Most code could not use this method directly, but use {@link org.jboss.cache.InvocationContext#clearLocks()} instead,
-    * which would delegate to this method if a transaction is in scope or otherwise use invocation-specific locks.
-    * <p/>
-    * Note that currently (as of 3.0.0) this lock is weakly typed.  This is to allow support for both MVCC (which uses {@link Fqn}s as locks)
-    * as well as legacy Optimistic and Pessimistic Locking schemes (which use {@link NodeLock} as locks).  Once support for
-    * legacy node locking schemes are dropped, this method will be more strongly typed to accept {@link Fqn}.
-    *
-    * @see org.jboss.cache.InvocationContext#clearLocks()
-    */
-   public void clearLocks()
-   {
-      if (transactionLocks != null) transactionLocks.clear();
-   }
-
-
-   /**
-    * Adds a List of locks to the currently maintained collection of locks acquired.
-    * <p/>
-    * Most code could not use this method directly, but use {@link org.jboss.cache.InvocationContext#addAllLocks(java.util.List)} instead,
-    * which would delegate to this method if a transaction is in scope or otherwise use invocation-specific locks.
-    * <p/>
-    * Note that currently (as of 3.0.0) this list is unchecked.  This is to allow support for both MVCC (which uses Fqns as locks)
-    * as well as legacy Optimistic and Pessimistic Locking schemes (which use {@link NodeLock} as locks).  Once support for
-    * legacy node locking schemes are dropped, this method will be more strongly typed to accept <tt>List<Fqn></tt>.
-    *
-    * @param newLocks locks to add
-    * @see org.jboss.cache.InvocationContext#addAllLocks(java.util.List)
-    */
-   @SuppressWarnings("unchecked")
-   public void addAllLocks(List newLocks)
-   {
-      // no need to worry about concurrency here - a context is only valid for a single thread.
-      if (transactionLocks == null) transactionLocks = new LinkedHashSet(5);
-      transactionLocks.addAll(newLocks);
-   }
-
-   /**
-    * Returns an immutable,  defensive copy of the List of locks currently maintained for the transaction.
-    * <p/>
-    * Most code could not use this method directly, but use {@link org.jboss.cache.InvocationContext#getLocks()} instead,
-    * which would delegate to this method if a transaction is in scope or otherwise use invocation-specific locks.
-    * <p/>
-    * Note that currently (as of 3.0.0) this list is unchecked.  This is to allow support for both MVCC (which uses Fqns as locks)
-    * as well as legacy Optimistic and Pessimistic Locking schemes (which use {@link NodeLock} as locks).  Once support for
-    * legacy node locking schemes are dropped, this method will be more strongly typed to return <tt>List<Fqn></tt>.
-    *
-    * @return locks held in current scope.
-    * @see org.jboss.cache.InvocationContext#getLocks()
-    */
-   @SuppressWarnings("unchecked")
-   public List getLocks()
-   {
-      return Collections.unmodifiableList(new ArrayList(transactionLocks));
-   }
-
-
-   /**
-    * Gets the value of the forceAsyncReplication flag.  Used by ReplicationInterceptor and OptimisticReplicationInterceptor
-    * when dealing with {@link org.jboss.cache.Cache#putForExternalRead(org.jboss.cache.Fqn,Object,Object)} within
-    * a transactional context.
-    *
-    * @return true if the forceAsyncReplication flag is set to true.
-    */
-   public boolean isForceAsyncReplication()
-   {
-      return forceAsyncReplication;
-   }
-
-   /**
-    * Sets the value of the forceAsyncReplication flag.  Used by ReplicationInterceptor and OptimisticReplicationInterceptor
-    * when dealing with {@link org.jboss.cache.Cache#putForExternalRead(org.jboss.cache.Fqn,Object,Object)} within
-    * a transactional context. Also used by OptimisticReplicationInterceptor when dealing
-    * with {@link org.jboss.cache.config.Option#setForceAsynchronous(boolean)} in a
-    * non-transactional context (i.e. with an implicit transaction).
-    *
-    * @param forceAsyncReplication value of forceAsyncReplication
-    */
-   public void setForceAsyncReplication(boolean forceAsyncReplication)
-   {
-      this.forceAsyncReplication = forceAsyncReplication;
-      if (forceAsyncReplication)
-      {
-         forceSyncReplication = false;
-      }
-   }
-
-   /**
-    * Gets the value of the forceSyncReplication flag.  Used by ReplicationInterceptor and OptimisticReplicationInterceptor
-    * when dealing with {@link org.jboss.cache.Cache#putForExternalRead(org.jboss.cache.Fqn,Object,Object)} within
-    * a transactional context.
-    *
-    * @return true if the forceAsyncReplication flag is set to true.
-    */
-   public boolean isForceSyncReplication()
-   {
-      return forceSyncReplication;
-   }
-
-   /**
-    * Sets the value of the forceSyncReplication flag.  Used by ReplicationInterceptor and OptimisticReplicationInterceptor
-    * when dealing with {@link org.jboss.cache.Cache#putForExternalRead(org.jboss.cache.Fqn,Object,Object)} within
-    * a transactional context.
-    *
-    * @param forceSyncReplication value of forceSyncReplication
-    */
-   public void setForceSyncReplication(boolean forceSyncReplication)
-   {
-      this.forceSyncReplication = forceSyncReplication;
-      if (forceSyncReplication)
-      {
-         forceAsyncReplication = false;
-      }
-   }
-
-
-   /**
-    * Posts all undo operations to the CacheImpl.
-    */
-   public void undoOperations()
-   {
-      if (modificationList == null)
-      {
-         if (trace) log.trace("Modification list is null, no modifications in this transaction!");
-         return;
-      }
-
-      if (trace) log.trace("undoOperations " + modificationList);
-
-      ArrayList<ReversibleCommand> copy;
-//      synchronized (modificationList)
-//      {
-      // no need to sync?  Only one thread would access a transaction at any given time?
-      copy = new ArrayList<ReversibleCommand>(modificationList);
-//      }
-      for (ListIterator i = copy.listIterator(copy.size()); i.hasPrevious();)
-      {
-         Object undoOp = i.previous();
-         ReversibleCommand txCommand = (ReversibleCommand) undoOp;
-         if (log.isDebugEnabled()) log.debug("Calling rollback() on command " + undoOp);
-         txCommand.rollback();
-      }
-   }
-
-   /**
-    * Returns debug information about this transaction.
-    */
-   @Override
-   public String toString()
-   {
-      StringBuilder sb = new StringBuilder();
-      sb.append("TransactionEntry\nmodificationList: ").append(modificationList);
-      return sb.toString();
-   }
-
-   public void loadUninitialisedNode(Fqn fqn)
-   {
-      if (dummyNodesCreatedByCacheLoader == null)
-         dummyNodesCreatedByCacheLoader = new LinkedList<Fqn>();
-      dummyNodesCreatedByCacheLoader.add(fqn);
-   }
-
-   public List<Fqn> getDummyNodesCreatedByCacheLoader()
-   {
-      return dummyNodesCreatedByCacheLoader;
-   }
-
-   /**
-    * Sets a transaction-scope option override
-    *
-    * @param o
-    */
-   public void setOption(Option o)
-   {
-      this.option = o;
-   }
-
-   /**
-    * Retrieves a transaction scope option override
-    */
-   public Option getOption()
-   {
-      return this.option;
-   }
-
-   public OrderedSynchronizationHandler getOrderedSynchronizationHandler()
-   {
-      return orderedSynchronizationHandler;
-   }
-
-   public void setOrderedSynchronizationHandler(OrderedSynchronizationHandler orderedSynchronizationHandler)
-   {
-      this.orderedSynchronizationHandler = orderedSynchronizationHandler;
-   }
-
-   /**
-    * Returns true if modifications were registered to either modificationList or to class loader modifications list.
-    */
-   public boolean hasModifications()
-   {
-      return modificationList != null && !modificationList.isEmpty();
-   }
-
-   /**
-    * @return true if any modifications have been invoked with cache mode being LOCAL.
-    */
-   public boolean hasLocalModifications()
-   {
-      return localModifications != null && !localModifications.isEmpty();
-   }
-
-   public NodeSPI lookUpNode(Fqn fqn)
-   {
-      return lookedUpNodes.get(fqn);
-   }
-
-   public void putLookedUpNode(Fqn f, NodeSPI n)
-   {
-      lookedUpNodes.put(f, n);
-   }
-
-   public void clearLookedUpNodes()
-   {
-      lookedUpNodes.clear();
-   }
-
-   public Map<Fqn, NodeSPI> getLookedUpNodes()
-   {
-      return lookedUpNodes;
-   }
-
-
-   /**
-    * Cleans up internal state
-    */
-   public void reset()
-   {
-      orderedSynchronizationHandler = null;
-      if (modificationList != null) modificationList = null;
-      if (localModifications != null) localModifications = null;
-      option = null;
-      transactionLocks.clear();
-      if (dummyNodesCreatedByCacheLoader != null) dummyNodesCreatedByCacheLoader.clear();
-      removedNodes.clear();
-   }
-}

Modified: core/trunk/src/main/java/org/jboss/cache/transaction/TransactionTable.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/transaction/TransactionTable.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/main/java/org/jboss/cache/transaction/TransactionTable.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -26,7 +26,7 @@
 
 /**
  * Maintains the mapping between a local {@link Transaction} and a {@link GlobalTransaction}.
- * Also stores {@link TransactionEntry} instances under a given transaction.
+ * Also stores {@link TransactionContext} instances under a given transaction.
  *
  * @author <a href="mailto:bela at jboss.org">Bela Ban</a> Apr 14, 2003
  * @version $Revision$
@@ -47,7 +47,7 @@
    /**
     * Mappings between GlobalTransactions and modifications.
     */
-   protected final Map<GlobalTransaction, TransactionEntry> gtx2EntryMap = new ConcurrentHashMap<GlobalTransaction, TransactionEntry>();
+   protected final Map<GlobalTransaction, TransactionContext> gtx2ContextMap = new ConcurrentHashMap<GlobalTransaction, TransactionContext>();
 
    protected final Map<GlobalTransaction, Transaction> gtx2TxMap = new ConcurrentHashMap<GlobalTransaction, Transaction>();
 
@@ -85,7 +85,7 @@
     */
    public int getNumGlobalTransactions()
    {
-      return gtx2EntryMap.size();
+      return gtx2ContextMap.size();
    }
 
    /**
@@ -152,32 +152,32 @@
     * Returns the local transaction entry for the global transaction.
     * Returns null if tx is null or it was not found.
     */
-   public TransactionEntry get(GlobalTransaction gtx)
+   public TransactionContext get(GlobalTransaction gtx)
    {
-      return gtx != null ? gtx2EntryMap.get(gtx) : null;
+      return gtx != null ? gtx2ContextMap.get(gtx) : null;
    }
 
    /**
-    * Associates the global transaction with a transaction entry.
+    * Associates the global transaction with a transaction context.
     */
-   public void put(GlobalTransaction tx, TransactionEntry entry)
+   public void put(GlobalTransaction tx, TransactionContext transactionContext)
    {
       if (tx == null)
       {
          log.error("key (GlobalTransaction) is null");
          return;
       }
-      gtx2EntryMap.put(tx, entry);
+      gtx2ContextMap.put(tx, transactionContext);
    }
 
    /**
     * Removes a global transation, returns the old transaction entry.
     */
-   public TransactionEntry remove(GlobalTransaction tx)
+   public TransactionContext remove(GlobalTransaction tx)
    {
       if (tx == null) return null;
       gtx2TxMap.remove(tx);
-      return gtx2EntryMap.remove(tx);
+      return gtx2ContextMap.remove(tx);
    }
 
    /**
@@ -193,7 +193,7 @@
    public void remove(GlobalTransaction gtx, Transaction tx)
    {
       gtx2TxMap.remove(gtx);
-      gtx2EntryMap.remove(gtx);
+      gtx2ContextMap.remove(gtx);
       tx2gtxMap.remove(tx);
    }
 
@@ -205,7 +205,7 @@
    {
       StringBuffer sb = new StringBuffer();
       sb.append(tx2gtxMap.size()).append(" mappings, ");
-      sb.append(gtx2EntryMap.size()).append(" transactions");
+      sb.append(gtx2ContextMap.size()).append(" transactions");
       return sb.toString();
    }
 
@@ -218,16 +218,16 @@
          return toString();
       StringBuffer sb = new StringBuffer();
       sb.append("LocalTransactions: ").append(tx2gtxMap.size()).append("\n");
-      sb.append("GlobalTransactions: ").append(gtx2EntryMap.size()).append("\n");
+      sb.append("GlobalTransactions: ").append(gtx2ContextMap.size()).append("\n");
       sb.append("tx2gtxMap:\n");
       for (Map.Entry<Transaction, GlobalTransaction> entry : tx2gtxMap.entrySet())
       {
          sb.append(entry.getKey()).append(": ").append(entry.getValue()).append("\n");
       }
       sb.append("gtx2EntryMap:\n");
-      for (Map.Entry<GlobalTransaction, TransactionEntry> entry : gtx2EntryMap.entrySet())
+      for (Map.Entry<GlobalTransaction, TransactionContext> transactionContextEntry : gtx2ContextMap.entrySet())
       {
-         sb.append(entry.getKey()).append(": ").append(entry.getValue()).append("\n");
+         sb.append(transactionContextEntry.getKey()).append(": ").append(transactionContextEntry.getValue()).append("\n");
       }
       return sb.toString();
    }
@@ -398,17 +398,17 @@
          Address addr = rpcManager.getLocalAddress();
          gtx = GlobalTransaction.create(addr);
          put(tx, gtx);
-         TransactionEntry ent;
+         TransactionContext transactionContext;
          try
          {
-            ent = isOptimisticLocking ? new OptimisticTransactionEntry(tx) : new TransactionEntry(tx);
+            transactionContext = isOptimisticLocking ? new OptimisticTransactionContext(tx) : new TransactionContext(tx);
          }
          catch (Exception e)
          {
             throw new CacheException("Unable to create a transaction entry!", e);
          }
 
-         put(gtx, ent);
+         put(gtx, transactionContext);
          if (trace)
          {
             log.trace("created new GTX: " + gtx + ", local TX=" + tx);

Modified: core/trunk/src/test/java/org/jboss/cache/api/NodeAPITest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/NodeAPITest.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/test/java/org/jboss/cache/api/NodeAPITest.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -9,7 +9,7 @@
 import org.jboss.cache.interceptors.PessimisticLockInterceptor;
 import org.jboss.cache.interceptors.base.CommandInterceptor;
 import org.jboss.cache.optimistic.TransactionWorkspace;
-import org.jboss.cache.transaction.OptimisticTransactionEntry;
+import org.jboss.cache.transaction.OptimisticTransactionContext;
 import static org.testng.AssertJUnit.*;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
@@ -323,7 +323,7 @@
    @SuppressWarnings("unchecked")
    private TransactionWorkspace<Object, Object> getTransactionWorkspace() throws Exception
    {
-      return ((OptimisticTransactionEntry) cache.getTransactionTable().get(cache.getTransactionTable().get(tm.getTransaction()))).getTransactionWorkSpace();
+      return ((OptimisticTransactionContext) cache.getTransactionTable().get(cache.getTransactionTable().get(tm.getTransaction()))).getTransactionWorkSpace();
    }
 
    public void testGetChildAPI()

Modified: core/trunk/src/test/java/org/jboss/cache/invocationcontext/TransactionTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/invocationcontext/TransactionTest.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/test/java/org/jboss/cache/invocationcontext/TransactionTest.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -4,7 +4,7 @@
 import org.jboss.cache.DefaultCacheFactory;
 import org.jboss.cache.Fqn;
 import org.jboss.cache.config.Configuration.CacheMode;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 import org.jboss.cache.transaction.TransactionTable;
 import static org.testng.AssertJUnit.*;
 import org.testng.annotations.AfterMethod;
@@ -123,7 +123,7 @@
       assertNotNull("Gtx should have been set up by now", cache.getInvocationContext().getGlobalTransaction());
 
       Transaction tx = tm.getTransaction();
-      TransactionEntry entry = tt.get(tt.get(tx));
+      TransactionContext transactionContext = tt.get(tt.get(tx));
 
       if (commit)
       {
@@ -139,10 +139,10 @@
       assertEquals("Method call should have been scrubbed", null, cache.getInvocationContext().getMethodCall());
       assertEquals("Cache command should have been scrubbed", null, cache.getInvocationContext().getCommand());
 
-      // check that the transaction entry hasn't leaked stuff.
-      assert entry.getModifications().isEmpty() : "Should have scrubbed modifications in transaction entry";
-      assert entry.getLocks().isEmpty() : "Should have scrubbed modifications in transaction entry";
-      assert entry.getOrderedSynchronizationHandler() == null : "Should have removed the ordered sync handler";
+      // check that the transaction transactionContext hasn't leaked stuff.
+      assert transactionContext.getModifications().isEmpty() : "Should have scrubbed modifications in transaction transactionContext";
+      assert transactionContext.getLocks().isEmpty() : "Should have scrubbed modifications in transaction transactionContext";
+      assert transactionContext.getOrderedSynchronizationHandler() == null : "Should have removed the ordered sync handler";
    }
 
    private void setUpOnePhaseCache()

Modified: core/trunk/src/test/java/org/jboss/cache/lock/AbstractLockManagerRecordingTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/lock/AbstractLockManagerRecordingTest.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/test/java/org/jboss/cache/lock/AbstractLockManagerRecordingTest.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -10,7 +10,7 @@
 import org.jboss.cache.transaction.DummyTransaction;
 import org.jboss.cache.transaction.DummyTransactionManager;
 import org.jboss.cache.transaction.GlobalTransaction;
-import org.jboss.cache.transaction.TransactionEntry;
+import org.jboss.cache.transaction.TransactionContext;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.Test;
 
@@ -52,12 +52,12 @@
       InvocationContext ctx = icc.get();
       ctx.setGlobalTransaction(new GlobalTransaction());
       ctx.setTransaction(new DummyTransaction(DummyTransactionManager.getInstance()));
-      ctx.setTransactionEntry(new TransactionEntry(ctx.getTransaction()));
+      ctx.setTransactionContext(new TransactionContext(ctx.getTransaction()));
 
       // lock and record.
       lm.lockAndRecord(node, WRITE, ctx);
       assert ctx.getLocks().contains(fqnBasedLocking ? fqn : node.getLock());
-      assert ctx.getTransactionEntry().getLocks().size() == 1;
+      assert ctx.getTransactionContext().getLocks().size() == 1;
       assert lm.isLocked(node) : "Should be locked";
       lm.unlock(ctx);
       assert !lm.isLocked(node) : "Should not be locked";

Modified: core/trunk/src/test/java/org/jboss/cache/transaction/AbortionTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/transaction/AbortionTest.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/test/java/org/jboss/cache/transaction/AbortionTest.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -8,9 +8,9 @@
 
 import org.jboss.cache.CacheSPI;
 import org.jboss.cache.DefaultCacheFactory;
-import org.jboss.cache.util.TestingUtil;
 import org.jboss.cache.interceptors.OrderedSynchronizationHandler;
 import org.jboss.cache.transaction.NotifyingTransactionManager.Notification;
+import org.jboss.cache.util.TestingUtil;
 import org.jgroups.JChannel;
 import static org.testng.AssertJUnit.*;
 import org.testng.annotations.AfterMethod;
@@ -152,9 +152,9 @@
          this.abortBeforeCompletion = abortBeforeCompletion;
       }
 
-      public void notify(Transaction tx, TransactionEntry entry) throws SystemException, RollbackException
+      public void notify(Transaction tx, TransactionContext transactionContext) throws SystemException, RollbackException
       {
-         OrderedSynchronizationHandler osh = entry.getOrderedSynchronizationHandler();
+         OrderedSynchronizationHandler osh = transactionContext.getOrderedSynchronizationHandler();
 
          final Transaction finalTx = tx;
          System.out.println("Notify called.");

Modified: core/trunk/src/test/java/org/jboss/cache/transaction/NotifyingTransactionManager.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/transaction/NotifyingTransactionManager.java	2008-06-25 15:10:47 UTC (rev 6037)
+++ core/trunk/src/test/java/org/jboss/cache/transaction/NotifyingTransactionManager.java	2008-06-25 15:33:13 UTC (rev 6038)
@@ -66,7 +66,7 @@
 
    public interface Notification
    {
-      public void notify(Transaction tx, TransactionEntry entry) throws SystemException, RollbackException;
+      public void notify(Transaction tx, TransactionContext transactionContext) throws SystemException, RollbackException;
    }
 
    public CacheSPI getCache()




More information about the jbosscache-commits mailing list