[jboss-svn-commits] JBL Code SVN: r37562 - 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
Sun Oct 16 08:03:18 EDT 2011


Author: tomjenkinson
Date: 2011-10-16 08:03:18 -0400 (Sun, 16 Oct 2011)
New Revision: 37562

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/LocalServer.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java
Log:
JBTM-916 updated to provide a rollback test and to configure the recovery manager safety interval

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-16 11:46:17 UTC (rev 37561)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java	2011-10-16 12:03:18 UTC (rev 37562)
@@ -34,7 +34,7 @@
 
 	@BeforeClass
 	public static void setup() throws SecurityException, NoSuchMethodException, InstantiationException, IllegalAccessException, ClassNotFoundException,
-			CoreEnvironmentBeanException, IOException {
+			CoreEnvironmentBeanException, IOException, IllegalArgumentException, NoSuchFieldException {
 		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
 		for (int i = 0; i < localServers.length; i++) {
 			IsolatableServersClassLoader classLoader = new IsolatableServersClassLoader("com.arjuna.ats.jta.distributed.server", contextClassLoader);
@@ -52,8 +52,8 @@
 	}
 
 	@Test
-	public void testMigrateTransaction() throws NotSupportedException, SystemException, IllegalStateException, RollbackException, InvalidTransactionException,
-			XAException, SecurityException, HeuristicMixedException, HeuristicRollbackException {
+	public void testMigrateTransactionCommit() throws NotSupportedException, SystemException, IllegalStateException, RollbackException,
+			InvalidTransactionException, XAException, SecurityException, HeuristicMixedException, HeuristicRollbackException {
 
 		File file = new File(System.getProperty("user.dir") + "/tmp/");
 		if (file.exists()) {
@@ -90,6 +90,45 @@
 		originalServer.removeTransaction(toMigrate);
 	}
 
+	@Test
+	public void testMigrateTransactionRollback() throws NotSupportedException, SystemException, IllegalStateException, RollbackException,
+			InvalidTransactionException, XAException, SecurityException, HeuristicMixedException, HeuristicRollbackException {
+
+		File file = new File(System.getProperty("user.dir") + "/tmp/");
+		if (file.exists()) {
+			file.delete();
+		}
+		int startingTimeout = 10;
+
+		// Start out at the first server
+		LocalServer originalServer = getLocalServer(1000);
+		TransactionManager transactionManager = originalServer.getTransactionManager();
+		transactionManager.setTransactionTimeout(startingTimeout);
+		transactionManager.begin();
+		Transaction originalTransaction = transactionManager.getTransaction();
+		originalTransaction.registerSynchronization(new TestSynchronization(originalServer.getNodeName()));
+		originalTransaction.enlistResource(new TestResource(originalServer.getNodeName(), false));
+		Xid toMigrate = originalServer.storeCurrentTransaction();
+
+		// Loop through the rest of the servers passing the transaction up and
+		// down
+		Transaction suspendedTransaction = transactionManager.suspend();
+		long timeLeftBeforeTransactionTimeout = originalServer.getTimeLeftBeforeTransactionTimeout();
+		List<Integer> nodesToFlowTo = new LinkedList<Integer>(Arrays.asList(new Integer[] { 2000, 3000, 2000, 1000, 2000, 3000, 1000, 3000 }));
+		boolean proxyRequired = recursivelyFlowTransaction(nodesToFlowTo, timeLeftBeforeTransactionTimeout, toMigrate);
+		transactionManager.resume(suspendedTransaction);
+		if (proxyRequired) {
+			XAResource proxyXAResource = originalServer.generateProxyXAResource(lookupProvider, originalServer.getNodeName(), 2000);
+			originalTransaction.enlistResource(proxyXAResource);
+			originalTransaction.registerSynchronization(originalServer.generateProxySynchronization(lookupProvider, originalServer.getNodeName(), 2000,
+					toMigrate));
+		}
+
+		Transaction transaction = transactionManager.getTransaction();
+		transaction.rollback();
+		originalServer.removeTransaction(toMigrate);
+	}
+
 	private boolean recursivelyFlowTransaction(List<Integer> nodesToFlowTo, long timeLeftBeforeTransactionTimeout, Xid toMigrate) throws RollbackException,
 			InvalidTransactionException, IllegalStateException, XAException, SystemException, NotSupportedException {
 

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java	2011-10-16 11:46:17 UTC (rev 37561)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java	2011-10-16 12:03:18 UTC (rev 37562)
@@ -7,7 +7,6 @@
 import javax.transaction.RollbackException;
 import javax.transaction.Synchronization;
 import javax.transaction.SystemException;
-import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.XAResource;
@@ -17,7 +16,8 @@
 
 public interface LocalServer {
 
-	public void initialise(LookupProvider lookupProvider, Integer nodeName) throws CoreEnvironmentBeanException, IOException;
+	public void initialise(LookupProvider lookupProvider, Integer nodeName) throws CoreEnvironmentBeanException, IOException, SecurityException,
+			NoSuchFieldException, IllegalArgumentException, IllegalAccessException;
 
 	public Integer getNodeName();
 
@@ -31,8 +31,7 @@
 
 	public void removeTransaction(Xid toMigrate);
 
-	public boolean getTransaction(int remainingTimeout, Xid toImport) throws XAException, InvalidTransactionException, IllegalStateException,
-			SystemException;
+	public boolean getTransaction(int remainingTimeout, Xid toImport) throws XAException, InvalidTransactionException, IllegalStateException, SystemException;
 
 	public RemoteServer connectTo();
 

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-16 11:46:17 UTC (rev 37561)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java	2011-10-16 12:03:18 UTC (rev 37562)
@@ -1,6 +1,7 @@
 package com.arjuna.ats.jta.distributed.server.impl;
 
 import java.io.IOException;
+import java.lang.reflect.Field;
 import java.net.InetAddress;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -31,6 +32,7 @@
 import com.arjuna.ats.arjuna.recovery.RecoveryManager;
 import com.arjuna.ats.arjuna.tools.osb.mbean.ObjStoreBrowser;
 import com.arjuna.ats.internal.jbossatx.jta.XAResourceRecordWrappingPluginImpl;
+import com.arjuna.ats.internal.jta.recovery.arjunacore.RecoveryXids;
 import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple;
 import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinateTransaction;
 import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinateXidImple;
@@ -52,8 +54,10 @@
 	private boolean offline;
 	private LookupProvider lookupProvider;
 	private Map<SubordinateXidImple, TransactionImple> transactions = new HashMap<SubordinateXidImple, TransactionImple>();
+	private RecoveryManager _recoveryManager;
 
-	public void initialise(LookupProvider lookupProvider, Integer serverName) throws CoreEnvironmentBeanException, IOException {
+	public void initialise(LookupProvider lookupProvider, Integer serverName) throws CoreEnvironmentBeanException, IOException, SecurityException,
+			NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
 		this.lookupProvider = lookupProvider;
 		this.nodeName = serverName;
 
@@ -126,6 +130,7 @@
 		recoveryManagerService.addXAResourceRecovery(new ProxyXAResourceRecovery(lookupProvider, serverName));
 		recoveryManagerService.addXAResourceRecovery(new TestResourceRecovery(serverName));
 		// recoveryManagerService.start();
+		_recoveryManager = RecoveryManager.manager();
 		RecoveryManager.manager().initialize();
 
 		transactionManagerService = new TransactionManagerService();
@@ -135,11 +140,16 @@
 				.setTransactionSynchronizationRegistry(new com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple());
 		transactionManagerService.create();
 
+		Field safetyIntervalMillis = RecoveryXids.class.getDeclaredField("safetyIntervalMillis");
+		safetyIntervalMillis.setAccessible(true);
+		Field modifiersField = Field.class.getDeclaredField("modifiers");
+		modifiersField.setAccessible(true);
+		safetyIntervalMillis.set(null, 0);
 	}
 
 	@Override
 	public void doRecoveryManagerScan() {
-		RecoveryManager.manager().scan();
+		_recoveryManager.scan();
 	}
 
 	@Override



More information about the jboss-svn-commits mailing list