[infinispan-commits] Infinispan SVN: r724 - in trunk/core/src: main/java/org/infinispan/transaction/xa and 1 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Mon Aug 24 12:47:32 EDT 2009


Author: manik.surtani at jboss.com
Date: 2009-08-24 12:47:32 -0400 (Mon, 24 Aug 2009)
New Revision: 724

Added:
   trunk/core/src/test/java/org/infinispan/tx/OnePhaseXATest.java
Modified:
   trunk/core/src/main/java/org/infinispan/transaction/lookup/JBossStandaloneJTAManagerLookup.java
   trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java
Log:
[ISPN-156] (Incompatibilities with certain transaction managers) added test, fixed.

Modified: trunk/core/src/main/java/org/infinispan/transaction/lookup/JBossStandaloneJTAManagerLookup.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/transaction/lookup/JBossStandaloneJTAManagerLookup.java	2009-08-24 15:47:47 UTC (rev 723)
+++ trunk/core/src/main/java/org/infinispan/transaction/lookup/JBossStandaloneJTAManagerLookup.java	2009-08-24 16:47:32 UTC (rev 724)
@@ -22,11 +22,12 @@
 package org.infinispan.transaction.lookup;
 
 
+import org.infinispan.util.Util;
+import org.infinispan.util.logging.Log;
+import org.infinispan.util.logging.LogFactory;
+
 import javax.transaction.TransactionManager;
 import javax.transaction.UserTransaction;
-
-import org.infinispan.util.Util;
-
 import java.lang.reflect.Method;
 
 /**
@@ -37,6 +38,7 @@
  */
 public class JBossStandaloneJTAManagerLookup implements TransactionManagerLookup {
    private Method manager, user;
+   private static final Log log = LogFactory.getLog(JBossStandaloneJTAManagerLookup.class);
 
    public JBossStandaloneJTAManagerLookup() {
       try {
@@ -49,7 +51,9 @@
    }
 
    public TransactionManager getTransactionManager() throws Exception {
-      return (TransactionManager) manager.invoke(null);
+      TransactionManager tm = (TransactionManager) manager.invoke(null);
+      if (log.isInfoEnabled()) log.info("Retrieving transaction manager {0}", tm);
+      return tm;
    }
 
    public UserTransaction getUserTransaction() throws Exception {

Modified: trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java	2009-08-24 15:47:47 UTC (rev 723)
+++ trunk/core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java	2009-08-24 16:47:32 UTC (rev 724)
@@ -25,8 +25,8 @@
 import java.util.Map;
 
 /**
- * This acts both as an local {@link org.infinispan.transaction.xa.CacheTransaction} and implementor of an
- * {@link javax.transaction.xa.XAResource} that will be called by tx manager on various tx stages.
+ * This acts both as an local {@link org.infinispan.transaction.xa.CacheTransaction} and implementor of an {@link
+ * javax.transaction.xa.XAResource} that will be called by tx manager on various tx stages.
  *
  * @author Mircea.Markus at jboss.com
  * @since 4.0
@@ -52,8 +52,8 @@
    private Transaction transaction;
 
    public TransactionXaAdapter(GlobalTransaction globalTx, InvocationContextContainer icc, InterceptorChain invoker,
-                         CommandsFactory commandsFactory, Configuration configuration, TransactionTable txTable,
-                         Transaction transaction) {
+                               CommandsFactory commandsFactory, Configuration configuration, TransactionTable txTable,
+                               Transaction transaction) {
       this.globalTx = globalTx;
       this.icc = icc;
       this.invoker = invoker;
@@ -91,7 +91,9 @@
       }
    }
 
-   public void commit(Xid xid, boolean b) throws XAException {
+   public void commit(Xid xid, boolean isOnePhase) throws XAException {
+      // always call prepare() - even if this is just a 1PC!
+      if (isOnePhase) prepare(xid);
       if (trace) log.trace("commiting TransactionXaAdapter: " + globalTx);
       try {
          LocalTxInvocationContext ctx = icc.createTxInvocationContext();

Added: trunk/core/src/test/java/org/infinispan/tx/OnePhaseXATest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/tx/OnePhaseXATest.java	                        (rev 0)
+++ trunk/core/src/test/java/org/infinispan/tx/OnePhaseXATest.java	2009-08-24 16:47:32 UTC (rev 724)
@@ -0,0 +1,70 @@
+package org.infinispan.tx;
+
+import org.infinispan.Cache;
+import org.infinispan.config.Configuration;
+import org.infinispan.config.GlobalConfiguration;
+import org.infinispan.manager.CacheManager;
+import org.infinispan.manager.DefaultCacheManager;
+import org.infinispan.test.TestingUtil;
+import org.infinispan.test.fwk.TransactionSetup;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import javax.transaction.TransactionManager;
+import java.util.ArrayList;
+import java.util.List;
+
+ at Test(groups = "functional", testName = "tx.OnePhaseXATest", description = "See ISPN-156 for details.")
+public class OnePhaseXATest {
+   private List<Cache> caches;
+   public static final int CACHES_NUM = 2;
+
+   public void testMultipleCaches() throws Exception {
+
+      //add something  to cache
+      int i = 0;
+      for (Cache c : caches) {
+         TransactionManager tm = TestingUtil.getTransactionManager(c);
+         tm.begin();
+         c.put("key" + i, "value");
+         tm.commit();
+         i++;
+      }
+
+      //check if caches contain these same keys
+      i = 0;
+      for (Cache c : caches) {
+         assert "value".equals(c.get("key0")) : "Failed getting value for key0 on cache " + i;
+         assert "value".equals(c.get("key1")) : "Failed getting value for key1 on cache " + i;
+         i++;
+      }
+   }
+
+   @BeforeTest
+   public void setUp() throws Exception {
+      caches = new ArrayList<Cache>();
+      for (int i = 0; i < CACHES_NUM; i++) caches.add(getCache());
+   }
+
+   @AfterTest
+   public void tearDown() {
+      if (caches != null) TestingUtil.killCaches(caches);
+   }
+
+   private Cache getCache() {
+      GlobalConfiguration gc = GlobalConfiguration.getClusteredDefault();
+
+      Configuration c = new Configuration();
+      c.setInvocationBatchingEnabled(true);
+      c.setCacheMode(Configuration.CacheMode.REPL_SYNC);
+      c.setSyncReplTimeout(30000);
+      c.setLockAcquisitionTimeout(60000);
+      c.setUseLockStriping(false);
+      c.setSyncCommitPhase(true);
+      c.setTransactionManagerLookupClass(TransactionSetup.getManagerLookup());
+
+      CacheManager manager = new DefaultCacheManager(gc, c);
+      return manager.getCache("TestCache");
+   }
+}
\ No newline at end of file


Property changes on: trunk/core/src/test/java/org/infinispan/tx/OnePhaseXATest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF



More information about the infinispan-commits mailing list