[jboss-svn-commits] JBL Code SVN: r37580 - in labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed: server and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Oct 17 15:15:31 EDT 2011


Author: tomjenkinson
Date: 2011-10-17 15:15:30 -0400 (Mon, 17 Oct 2011)
New Revision: 37580

Modified:
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/RemoteServer.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java
Log:
JBTM-895 updated to test transaction timeout of subordinates

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java	2011-10-17 19:11:35 UTC (rev 37579)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java	2011-10-17 19:15:30 UTC (rev 37580)
@@ -61,7 +61,7 @@
 		if (file.exists()) {
 			file.delete();
 		}
-		int startingTimeout = 10000;
+		int startingTimeout = 0;
 		List<Integer> nodesToFlowTo = new LinkedList<Integer>(Arrays.asList(new Integer[] { 1000, 2000, 3000, 2000, 1000, 2000, 3000, 1000, 3000 }));
 
 		// Start out at the first server
@@ -83,6 +83,55 @@
 		Thread.currentThread().setContextClassLoader(classLoader);
 	}
 
+	@Test
+	public void testMigrateTransactionSubordinateTimeout() throws NotSupportedException, SystemException, IllegalStateException, RollbackException,
+			InvalidTransactionException, XAException, SecurityException, HeuristicMixedException, HeuristicRollbackException, InterruptedException {
+
+		File file = new File(System.getProperty("user.dir") + "/tmp/");
+		if (file.exists()) {
+			file.delete();
+		}
+		int rootTimeout = 10000;
+		int subordinateTimeout = 1;
+
+		// Start out at the first server
+		LocalServer originalServer = getLocalServer(1000);
+		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+		Thread.currentThread().setContextClassLoader(originalServer.getClass().getClassLoader());
+		TransactionManager transactionManager = originalServer.getTransactionManager();
+		transactionManager.setTransactionTimeout(rootTimeout);
+		transactionManager.begin();
+		Transaction originalTransaction = transactionManager.getTransaction();
+		Xid toMigrate = originalServer.getCurrentXid();
+		originalServer.storeRootTransaction();
+		Transaction transaction = transactionManager.getTransaction();
+		transaction.enlistResource(new TestResource(originalServer.getNodeName(), false));
+		transactionManager.suspend();
+
+		// Migrate a transaction
+		LocalServer currentServer = getLocalServer(2000);
+		ClassLoader parentsClassLoader = Thread.currentThread().getContextClassLoader();
+		Thread.currentThread().setContextClassLoader(currentServer.getClass().getClassLoader());
+		currentServer.getAndResumeTransaction(subordinateTimeout, toMigrate);
+		currentServer.getTransactionManager().getTransaction().enlistResource(new TestResource(currentServer.getNodeName(), false));
+		currentServer.getTransactionManager().suspend();
+		Thread.currentThread().setContextClassLoader(parentsClassLoader);
+
+		// Complete the transaction at the original server
+		transactionManager.resume(transaction);
+		XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
+		transaction.enlistResource(proxyXAResource);
+		originalServer.removeRootTransaction(toMigrate);
+		Thread.currentThread().sleep((subordinateTimeout + 1) * 1000);
+		try {
+			originalTransaction.commit();
+		} catch (RollbackException rbe) {
+			// GOOD!
+		} finally {
+			Thread.currentThread().setContextClassLoader(classLoader);
+		}
+	}
+
 	private boolean performTransactionalWork(List<Integer> nodesToFlowTo, int remainingTimeout, Xid toMigrate) throws RollbackException,
 			InvalidTransactionException, IllegalStateException, XAException, SystemException, NotSupportedException {
 		Integer currentServerName = nodesToFlowTo.remove(0);

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/RemoteServer.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/RemoteServer.java	2011-10-17 19:11:35 UTC (rev 37579)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/RemoteServer.java	2011-10-17 19:15:30 UTC (rev 37580)
@@ -1,8 +1,5 @@
 package com.arjuna.ats.jta.distributed.server;
 
-import javax.transaction.HeuristicCommitException;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
 import javax.transaction.SystemException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.Xid;
@@ -13,11 +10,9 @@
 
 	public int propagatePrepare(Xid xid) throws XAException, DummyRemoteException;
 
-	public void propagateCommit(Xid xid, boolean onePhase) throws IllegalStateException, HeuristicMixedException, HeuristicRollbackException,
-			HeuristicCommitException, SystemException, XAException, DummyRemoteException;
+	public void propagateCommit(Xid xid) throws XAException, DummyRemoteException;
 
-	public void propagateRollback(Xid xid) throws IllegalStateException, HeuristicMixedException, HeuristicCommitException, HeuristicRollbackException,
-			SystemException, XAException, DummyRemoteException;
+	public void propagateRollback(Xid xid) throws XAException, DummyRemoteException;
 
 	public Xid[] propagateRecover(int formatId, byte[] gtrid, Integer serverNodeNameToRecoverFor, int flag) throws XAException, DummyRemoteException;
 

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java	2011-10-17 19:11:35 UTC (rev 37579)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java	2011-10-17 19:15:30 UTC (rev 37580)
@@ -7,10 +7,6 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 
-import javax.transaction.HeuristicCommitException;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.SystemException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
@@ -18,6 +14,7 @@
 import org.jboss.tm.XAResourceWrapper;
 
 import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.coordinator.TwoPhaseOutcome;
 import com.arjuna.ats.jta.distributed.server.DummyRemoteException;
 import com.arjuna.ats.jta.distributed.server.LookupProvider;
 
@@ -114,6 +111,9 @@
 
 	}
 
+	/**
+	 * The remote side will not accept a one phase optimization.
+	 */
 	@Override
 	public synchronized void commit(Xid xid, boolean onePhase) throws XAException {
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_COMMIT  [" + xid + "]");
@@ -121,18 +121,8 @@
 		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
 		try {
 			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			lookupProvider.lookup(remoteServerName).propagateCommit(xid, onePhase);
+			lookupProvider.lookup(remoteServerName).propagateCommit(xid);
 			System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_COMMITED");
-		} catch (IllegalStateException e) {
-			throw new XAException(XAException.XAER_INVAL);
-		} catch (HeuristicMixedException e) {
-			throw new XAException(XAException.XA_HEURMIX);
-		} catch (HeuristicRollbackException e) {
-			throw new XAException(XAException.XA_HEURRB);
-		} catch (HeuristicCommitException e) {
-			throw new XAException(XAException.XA_HEURCOM);
-		} catch (SystemException e) {
-			throw new XAException(XAException.XAER_PROTO);
 		} catch (DummyRemoteException ce) {
 			throw new XAException(XAException.XA_RETRY);
 		} finally {
@@ -152,16 +142,6 @@
 			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
 			lookupProvider.lookup(remoteServerName).propagateRollback(xid);
 			System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_ROLLBACKED");
-		} catch (IllegalStateException e) {
-			throw new XAException(XAException.XAER_INVAL);
-		} catch (HeuristicMixedException e) {
-			throw new XAException(XAException.XA_HEURMIX);
-		} catch (HeuristicCommitException e) {
-			throw new XAException(XAException.XA_HEURCOM);
-		} catch (HeuristicRollbackException e) {
-			throw new XAException(XAException.XA_HEURRB);
-		} catch (SystemException e) {
-			throw new XAException(XAException.XAER_PROTO);
 		} catch (DummyRemoteException ce) {
 			throw new XAException(XAException.XA_RETRY);
 		} finally {

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java	2011-10-17 19:11:35 UTC (rev 37579)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java	2011-10-17 19:15:30 UTC (rev 37580)
@@ -8,9 +8,6 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.transaction.HeuristicCommitException;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
 import javax.transaction.InvalidTransactionException;
 import javax.transaction.RollbackException;
 import javax.transaction.Synchronization;
@@ -36,6 +33,7 @@
 import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinateTransaction;
 import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinateXidImple;
 import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinationManager;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.XATerminatorImple;
 import com.arjuna.ats.jbossatx.jta.RecoveryManagerService;
 import com.arjuna.ats.jbossatx.jta.TransactionManagerService;
 import com.arjuna.ats.jta.common.JTAEnvironmentBean;
@@ -236,25 +234,25 @@
 		if (offline) {
 			throw new DummyRemoteException("Connection refused to: " + nodeName);
 		}
-		return SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doPrepare();
+		SubordinateTransaction tx = SubordinationManager
+                .getTransactionImporter().getImportedTransaction(xid);
+		return SubordinationManager.getXATerminator().prepare(xid);
 	}
 
 	@Override
-	public void propagateCommit(Xid xid, boolean onePhase) throws IllegalStateException, HeuristicMixedException, HeuristicRollbackException,
-			HeuristicCommitException, SystemException, XAException, DummyRemoteException {
+	public void propagateCommit(Xid xid) throws XAException, DummyRemoteException {
 		if (offline) {
 			throw new DummyRemoteException("Connection refused to: " + nodeName);
 		}
-		SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doCommit();
+		SubordinationManager.getXATerminator().commit(xid, false);
 	}
 
 	@Override
-	public void propagateRollback(Xid xid) throws IllegalStateException, HeuristicMixedException, HeuristicCommitException, HeuristicRollbackException,
-			SystemException, XAException, DummyRemoteException {
+	public void propagateRollback(Xid xid) throws XAException, DummyRemoteException {
 		if (offline) {
 			throw new DummyRemoteException("Connection refused to: " + nodeName);
 		}
-		SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doRollback();
+		SubordinationManager.getXATerminator().rollback(xid);
 	}
 
 	@Override
@@ -290,8 +288,7 @@
 		if (offline) {
 			throw new DummyRemoteException("Connection refused to: " + nodeName);
 		}
-		SubordinateTransaction tx = SubordinationManager.getTransactionImporter().getImportedTransaction(xid);
-		tx.doBeforeCompletion();
+		((XATerminatorImple) SubordinationManager.getXATerminator()).beforeCompletion(xid);
 	}
 
 	@Override



More information about the jboss-svn-commits mailing list