[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