[jbosscache-commits] JBoss Cache SVN: r4598 - in core/trunk/src/main/java/org/jboss/cache: interceptors and 1 other directory.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Thu Oct 11 08:25:57 EDT 2007


Author: manik.surtani at jboss.com
Date: 2007-10-11 08:25:57 -0400 (Thu, 11 Oct 2007)
New Revision: 4598

Modified:
   core/trunk/src/main/java/org/jboss/cache/CacheImpl.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/TxInterceptor.java
Log:
Proper resetting of options passed in when overridden

Modified: core/trunk/src/main/java/org/jboss/cache/CacheImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/CacheImpl.java	2007-10-10 18:01:21 UTC (rev 4597)
+++ core/trunk/src/main/java/org/jboss/cache/CacheImpl.java	2007-10-11 12:25:57 UTC (rev 4598)
@@ -2747,9 +2747,11 @@
          if (!configuration.isNodeLockingOptimistic()) return;
          // create the node we need.
          Map<K, V> m = Collections.emptyMap();
-         getInvocationContext().getOptionOverrides().setCacheModeLocal(true);
+         InvocationContext ic = getInvocationContext();
+         boolean origCacheModeLocal = ic.getOptionOverrides().isCacheModeLocal();
+         ic.getOptionOverrides().setCacheModeLocal(true);
          put(fqn, m);
-         getInvocationContext().getOptionOverrides().setCacheModeLocal(false);
+         ic.getOptionOverrides().setCacheModeLocal(origCacheModeLocal);
          NodeSPI nodeSPI = (NodeSPI) root.getChild(fqn);
          nodeSPI.setVersion(versionToInvalidate);
       }

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/TxInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/TxInterceptor.java	2007-10-10 18:01:21 UTC (rev 4597)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/TxInterceptor.java	2007-10-11 12:25:57 UTC (rev 4598)
@@ -1129,6 +1129,7 @@
       // This is STILL remotely originating though and this needs to be made explicit here.
       // this can be checked by inspecting the InvocationContext.isOriginLocal() at the time of registering the sync.
       private boolean remoteLocal = false;
+      private Option originalOptions, transactionalOptions;
 
       /**
        * A Synchronization for locally originating txs.
@@ -1164,7 +1165,9 @@
          }
 
          // set any transaction wide options as current for this thread.
-         ctx.setOptionOverrides(entry.getOption());
+         originalOptions = ctx.getOptionOverrides();
+         transactionalOptions = entry.getOption();
+         ctx.setOptionOverrides(transactionalOptions);
 
          try
          {
@@ -1207,6 +1210,7 @@
          {
             localRollbackOnly = false;
             setTransactionalContext(null, null, ctx);
+            ctx.setOptionOverrides(originalOptions);
          }
       }
 
@@ -1216,7 +1220,15 @@
          // could happen if a rollback is called and beforeCompletion() doesn't get called.
          if (ctx == null) ctx = cache.getInvocationContext();
          ctx.setLocalRollbackOnly(localRollbackOnly);
-         super.afterCompletion(status);
+         ctx.setOptionOverrides(transactionalOptions);
+         try
+         {
+            super.afterCompletion(status);
+         }
+         finally
+         {
+            ctx.setOptionOverrides(originalOptions);
+         }
       }
 
       public String toString()




More information about the jbosscache-commits mailing list