[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