[jboss-svn-commits] JBL Code SVN: r37755 - in labs/jbosstm/branches/JBOSSTS_4_15_0_Final: atsintegration/examples/classes/com/arjuna/jta/distributed/example/server and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Dec 1 04:52:45 EST 2011


Author: tomjenkinson
Date: 2011-12-01 04:52:44 -0500 (Thu, 01 Dec 2011)
New Revision: 37755

Added:
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/RemoteServerImpl.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/RemoteServerImpl.java
Modified:
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/LocalServer.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/RemoteServer.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/ProxyXAResource.java
   labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/ServerImpl.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 made clearer where the remote side of the work is done

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java	2011-12-01 08:59:36 UTC (rev 37754)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java	2011-12-01 09:52:44 UTC (rev 37755)
@@ -353,7 +353,7 @@
      * @return a list of potentially indoubt transactions or <code>null</code>.
      */
 
-    public synchronized Xid[] doRecover (XidImple toRecover, String parentNodeName) throws XAException
+    public synchronized Xid[] doRecover (Xid xid, String parentNodeName) throws XAException
     {
         /*
          * Requires going through the objectstore for the states of imported
@@ -410,7 +410,7 @@
 								}
 							}
 
-						} else if (toRecover == null) {
+						} else if (xid == null) {
 							TransactionImple tx = (TransactionImple) SubordinationManager.getTransactionImporter().recoverTransaction(uid);
 
 							if (tx != null)
@@ -420,8 +420,8 @@
 							XidImple loadedXid = (XidImple) saa.getXid();
 							if (loadedXid.getFormatId() == XATxConverter.FORMAT_ID) {
 								String loadedXidSubordinateNodeName = XATxConverter.getSubordinateNodeName(loadedXid.getXID());
-								if (XATxConverter.getSubordinateNodeName(toRecover.getXID()).equals(loadedXidSubordinateNodeName)) {
-									if (Arrays.equals(loadedXid.getGlobalTransactionId(), toRecover.getGlobalTransactionId())) {
+								if (XATxConverter.getSubordinateNodeName(new XidImple(xid).getXID()).equals(loadedXidSubordinateNodeName)) {
+									if (Arrays.equals(loadedXid.getGlobalTransactionId(), xid.getGlobalTransactionId())) {
 										if (jtaLogger.logger.isDebugEnabled()) {
 											jtaLogger.logger.debug("Found record for " + saa);
 										}

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/LocalServer.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/LocalServer.java	2011-12-01 08:59:36 UTC (rev 37754)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/LocalServer.java	2011-12-01 09:52:44 UTC (rev 37755)
@@ -111,8 +111,8 @@
 	 * and a potential method of persisting this data). This is important when a
 	 * proxy xa resource is involved in recovery and invokes commit or rollback
 	 * as the transaction must be reloaded by the remote server before the
-	 * commit/rollback – if it was prepared - before we attempt to complete
-	 * the transaction.
+	 * commit/rollback – if it was prepared - before we attempt to complete the
+	 * transaction.
 	 * 
 	 * @param remainingTimeout
 	 * @param toImport
@@ -135,8 +135,7 @@
 	 * @throws IOException
 	 * @throws SystemException
 	 */
-	public XAResource generateProxyXAResource(LookupProvider lookupProvider, String remoteServerName, Xid migratedTransaction) throws IOException,
-			SystemException;
+	public XAResource generateProxyXAResource(LookupProvider lookupProvider, String remoteServerName, Xid migratedTransaction) throws SystemException;
 
 	/**
 	 * Generate a proxy synchronization

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/RemoteServer.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/RemoteServer.java	2011-12-01 08:59:36 UTC (rev 37754)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/RemoteServer.java	2011-12-01 09:52:44 UTC (rev 37755)
@@ -29,13 +29,13 @@
 
 public interface RemoteServer {
 
-	public int prepare(Xid xid, boolean recover) throws XAException, IOException;
+	public int prepare(Xid xid, boolean recover) throws XAException;
 
-	public void commit(Xid xid, boolean onePhase, boolean recover) throws XAException, IOException;
+	public void commit(Xid xid, boolean onePhase, boolean recover) throws XAException;
 
-	public void rollback(Xid xid, boolean recover) throws XAException, IOException;
+	public void rollback(Xid xid, boolean recover) throws XAException;
 
-	public void forget(Xid xid, boolean recover) throws XAException, IOException;
+	public void forget(Xid xid, boolean recover) throws XAException;
 
 	public void beforeCompletion(Xid xid) throws XAException, SystemException;
 

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/ProxyXAResource.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/ProxyXAResource.java	2011-12-01 08:59:36 UTC (rev 37754)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/ProxyXAResource.java	2011-12-01 09:52:44 UTC (rev 37755)
@@ -21,7 +21,6 @@
  */
 package com.arjuna.jta.distributed.example.server.impl;
 
-import java.io.IOException;
 import java.io.Serializable;
 
 import javax.transaction.xa.XAException;
@@ -102,13 +101,9 @@
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_PREPARE [" + xid + "]");
 
 		Xid toPropagate = migratedXid != null ? migratedXid : xid;
-		try {
-			int propagatePrepare = LookupProvider.getInstance().lookup(remoteServerName).prepare(toPropagate, !nonerecovered);
-			System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_PREPARED");
-			return propagatePrepare;
-		} catch (IOException e) {
-			throw new XAException(XAException.XA_RETRY);
-		}
+		int propagatePrepare = LookupProvider.getInstance().lookup(remoteServerName).prepare(toPropagate, !nonerecovered);
+		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_PREPARED");
+		return propagatePrepare;
 	}
 
 	@Override
@@ -116,12 +111,7 @@
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_COMMIT  [" + xid + "]");
 
 		Xid toPropagate = migratedXid != null ? migratedXid : xid;
-		try {
-			LookupProvider.getInstance().lookup(remoteServerName).commit(toPropagate, onePhase, !nonerecovered);
-		} catch (IOException e) {
-			e.printStackTrace();
-			throw new XAException(XAException.XA_RETRY);
-		}
+		LookupProvider.getInstance().lookup(remoteServerName).commit(toPropagate, onePhase, !nonerecovered);
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_COMMITED");
 	}
 
@@ -139,9 +129,6 @@
 				// We know that this means that the transaction is not known at
 				// the remote side
 			}
-		} catch (IOException e) {
-			e.printStackTrace();
-			throw new XAException(XAException.XA_RETRY);
 		}
 	}
 
@@ -186,11 +173,7 @@
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_FORGET  [" + xid + "]");
 
 		Xid toPropagate = migratedXid != null ? migratedXid : xid;
-		try {
-			LookupProvider.getInstance().lookup(remoteServerName).forget(toPropagate, !nonerecovered);
-		} catch (IOException e) {
-			throw new XAException(XAException.XA_RETRY);
-		}
+		LookupProvider.getInstance().lookup(remoteServerName).forget(toPropagate, !nonerecovered);
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_FORGETED[" + xid + "]");
 	}
 

Added: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/RemoteServerImpl.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/RemoteServerImpl.java	                        (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/RemoteServerImpl.java	2011-12-01 09:52:44 UTC (rev 37755)
@@ -0,0 +1,165 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package com.arjuna.jta.distributed.example.server.impl;
+
+import java.util.Arrays;
+import java.util.Set;
+
+import javax.transaction.SystemException;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.Xid;
+
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinationManager;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TransactionImporterImple;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.XATerminatorImple;
+import com.arjuna.jta.distributed.example.server.RemoteServer;
+
+/**
+ * This class could translate quite easily to a server-side network endpoint
+ * interceptor for the client-side ProxyXAResource. One change that is required
+ * is to remove the classloader behavior as that is purely to allow the test to
+ * run multiple servers within a single VM. When reading this class, tend to
+ * ignore the classloader work as that is test scaffolding.
+ */
+public class RemoteServerImpl implements RemoteServer {
+	/**
+	 * Remember to ignore the classloader shenanigans when reading the method.
+	 * 
+	 * @param recover
+	 *            Should be set by the clients ProxyXAResource when the client
+	 *            knows the remote side needs the transaction loading.
+	 */
+	@Override
+	public int prepare(Xid xid, boolean recover) throws XAException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			if (recover) {
+				((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(xid, null);
+			}
+			return SubordinationManager.getXATerminator().prepare(xid);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+	}
+
+	/**
+	 * Remember to ignore the classloader shenanigans when reading the method.
+	 * 
+	 * @param recover
+	 *            Should be set by the clients ProxyXAResource when the client
+	 *            knows the remote side needs the transaction loading.
+	 */
+	@Override
+	public void commit(Xid xid, boolean onePhase, boolean recover) throws XAException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			if (recover) {
+				((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(xid, null);
+			}
+			SubordinationManager.getXATerminator().commit(xid, onePhase);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+	}
+
+	/**
+	 * Remember to ignore the classloader shenanigans when reading the method.
+	 * 
+	 * @param recover
+	 *            Should be set by the clients ProxyXAResource when the client
+	 *            knows the remote side needs the transaction loading.
+	 */
+	@Override
+	public void rollback(Xid xid, boolean recover) throws XAException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			if (recover) {
+				((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(xid, null);
+			}
+			SubordinationManager.getXATerminator().rollback(xid);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+	}
+
+	/**
+	 * Remember to ignore the classloader shenanigans when reading the method.
+	 * 
+	 * @param recover
+	 *            Should be set by the clients ProxyXAResource when the client
+	 *            knows the remote side needs the transaction loading.
+	 */
+	@Override
+	public void forget(Xid xid, boolean recover) throws XAException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			if (recover) {
+				((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(xid, null);
+			}
+			SubordinationManager.getXATerminator().forget(xid);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+
+	}
+
+	/**
+	 * Remember to ignore the classloader shenanigans when reading the method.
+	 * 
+	 * @param recover
+	 *            Should be set by the clients ProxyXAResource when the client
+	 *            knows the remote side needs the transaction loading.
+	 */
+	@Override
+	public void beforeCompletion(Xid xid) throws XAException, SystemException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			((XATerminatorImple) SubordinationManager.getXATerminator()).beforeCompletion(xid);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+	}
+
+	/**
+	 * Remember to ignore the classloader shenanigans when reading the method.
+	 */
+	@Override
+	public Xid[] recoverFor(String localServerName) throws XAException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			Set<Xid> toReturn = ((TransactionImporterImple) SubordinationManager.getTransactionImporter()).getInflightXids(localServerName);
+			Xid[] doRecover = ((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(null, localServerName);
+			if (doRecover != null) {
+				toReturn.addAll(Arrays.asList(doRecover));
+			}
+			return toReturn.toArray(new Xid[0]);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+	}
+}

Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/ServerImpl.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/ServerImpl.java	2011-12-01 08:59:36 UTC (rev 37754)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/examples/classes/com/arjuna/jta/distributed/example/server/impl/ServerImpl.java	2011-12-01 09:52:44 UTC (rev 37755)
@@ -24,12 +24,11 @@
 import java.io.IOException;
 import java.net.InetAddress;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
+import javax.transaction.InvalidTransactionException;
 import javax.transaction.Synchronization;
 import javax.transaction.SystemException;
 import javax.transaction.Transaction;
@@ -50,18 +49,15 @@
 import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple;
 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.TransactionImporterImple;
-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;
-import com.arjuna.ats.jta.xa.XidImple;
 import com.arjuna.jta.distributed.example.TestResourceRecovery;
 import com.arjuna.jta.distributed.example.server.LocalServer;
 import com.arjuna.jta.distributed.example.server.LookupProvider;
 import com.arjuna.jta.distributed.example.server.RemoteServer;
 
-public class ServerImpl implements LocalServer, RemoteServer {
+public class ServerImpl implements LocalServer {
 
 	private String nodeName;
 	private RecoveryManagerService recoveryManagerService;
@@ -162,7 +158,7 @@
 	}
 
 	@Override
-	public Xid getAndResumeTransaction(int remainingTimeout, Xid toResume) throws XAException, IllegalStateException, SystemException, IOException {
+	public Xid getAndResumeTransaction(int remainingTimeout, Xid toResume) throws XAException, IllegalStateException, SystemException, InvalidTransactionException {
 		Xid toReturn = null;
 		Transaction transaction = rootTransactionsAsSubordinate.get(new SubordinateXidImple(toResume));
 		if (transaction == null) {
@@ -200,7 +196,7 @@
 	}
 
 	@Override
-	public ProxyXAResource generateProxyXAResource(LookupProvider lookupProvider, String remoteServerName, Xid migratedXid) throws SystemException, IOException {
+	public ProxyXAResource generateProxyXAResource(LookupProvider lookupProvider, String remoteServerName, Xid migratedXid) throws SystemException {
 		return new ProxyXAResource(getNodeName(), remoteServerName, migratedXid);
 	}
 
@@ -211,88 +207,6 @@
 
 	@Override
 	public RemoteServer connectTo() {
-		return this;
+		return new RemoteServerImpl();
 	}
-
-	@Override
-	public int prepare(Xid xid, boolean recover) throws XAException, IOException {
-		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		try {
-			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			if (recover) {
-				recover(xid);
-			}
-			return SubordinationManager.getXATerminator().prepare(xid);
-		} finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-	}
-
-	@Override
-	public void commit(Xid xid, boolean onePhase, boolean recover) throws XAException, IOException {
-		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		try {
-			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			if (recover) {
-				recover(xid);
-			}
-			SubordinationManager.getXATerminator().commit(xid, onePhase);
-		} finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-	}
-
-	@Override
-	public void rollback(Xid xid, boolean recover) throws XAException, IOException {
-		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		try {
-			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			if (recover) {
-				recover(xid);
-			}
-			SubordinationManager.getXATerminator().rollback(xid);
-		} finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-	}
-
-	protected void recover(Xid toRecover) throws XAException, IOException {
-		((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(new XidImple(toRecover), null);
-	}
-
-	@Override
-	public void forget(Xid xid, boolean recover) throws XAException, IOException {
-		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		try {
-			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			if (recover) {
-				recover(xid);
-			}
-			SubordinationManager.getXATerminator().forget(xid);
-		} finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-
-	}
-
-	@Override
-	public void beforeCompletion(Xid xid) throws XAException, SystemException {
-		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		try {
-			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			((XATerminatorImple) SubordinationManager.getXATerminator()).beforeCompletion(xid);
-		} finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-	}
-
-	@Override
-	public Xid[] recoverFor(String localServerName) throws XAException {
-		Set<Xid> toReturn = ((TransactionImporterImple) SubordinationManager.getTransactionImporter()).getInflightXids(localServerName);
-		Xid[] doRecover = ((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(null, localServerName);
-		if (doRecover != null) {
-			toReturn.addAll(Arrays.asList(doRecover));
-		}
-		return toReturn.toArray(new Xid[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-12-01 08:59:36 UTC (rev 37754)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/RemoteServer.java	2011-12-01 09:52:44 UTC (rev 37755)
@@ -21,21 +21,19 @@
  */
 package com.arjuna.ats.jta.distributed.server;
 
-import java.io.IOException;
-
 import javax.transaction.SystemException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.Xid;
 
 public interface RemoteServer {
 
-	public int prepare(Xid xid, boolean recover) throws XAException, IOException;
+	public int prepare(Xid xid, boolean recover) throws XAException;
 
-	public void commit(Xid xid, boolean onePhase, boolean recover) throws XAException, IOException;
+	public void commit(Xid xid, boolean onePhase, boolean recover) throws XAException;
 
-	public void rollback(Xid xid, boolean recover) throws XAException, IOException;
+	public void rollback(Xid xid, boolean recover) throws XAException;
 
-	public void forget(Xid xid, boolean recover) throws XAException, IOException;
+	public void forget(Xid xid, boolean recover) throws XAException;
 
 	public void beforeCompletion(Xid xid) throws XAException, SystemException;
 

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-12-01 08:59:36 UTC (rev 37754)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java	2011-12-01 09:52:44 UTC (rev 37755)
@@ -21,7 +21,6 @@
  */
 package com.arjuna.ats.jta.distributed.server.impl;
 
-import java.io.IOException;
 import java.io.Serializable;
 
 import javax.transaction.xa.XAException;
@@ -103,13 +102,9 @@
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_PREPARE [" + xid + "]");
 
 		Xid toPropagate = migratedXid != null ? migratedXid : xid;
-		try {
-			int propagatePrepare = LookupProvider.getInstance().lookup(remoteServerName).prepare(toPropagate, !nonerecovered);
-			System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_PREPARED");
-			return propagatePrepare;
-		} catch (IOException e) {
-			throw new XAException(XAException.XA_RETRY);
-		}
+		int propagatePrepare = LookupProvider.getInstance().lookup(remoteServerName).prepare(toPropagate, !nonerecovered);
+		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_PREPARED");
+		return propagatePrepare;
 	}
 
 	@Override
@@ -117,15 +112,9 @@
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_COMMIT  [" + xid + "]");
 
 		Xid toPropagate = migratedXid != null ? migratedXid : xid;
-		try {
-			LookupProvider.getInstance().lookup(remoteServerName).commit(toPropagate, onePhase, !nonerecovered);
-		} catch (IOException e) {
-			e.printStackTrace();
-			throw new XAException(XAException.XA_RETRY);
-		}
+		LookupProvider.getInstance().lookup(remoteServerName).commit(toPropagate, onePhase, !nonerecovered);
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_COMMITED");
 
-		// THIS CAN ONLY HAPPEN IN 1PC OR ROLLBACK
 		CompletionCounter.getInstance().incrementCommit(localServerName);
 
 	}
@@ -144,9 +133,6 @@
 				// We know that this means that the transaction is not known at
 				// the remote side
 			}
-		} catch (IOException e) {
-			e.printStackTrace();
-			throw new XAException(XAException.XA_RETRY);
 		}
 
 		CompletionCounter.getInstance().incrementRollback(localServerName);
@@ -193,11 +179,7 @@
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_FORGET  [" + xid + "]");
 
 		Xid toPropagate = migratedXid != null ? migratedXid : xid;
-		try {
-			LookupProvider.getInstance().lookup(remoteServerName).forget(toPropagate, !nonerecovered);
-		} catch (IOException e) {
-			throw new XAException(XAException.XA_RETRY);
-		}
+		LookupProvider.getInstance().lookup(remoteServerName).forget(toPropagate, !nonerecovered);
 		System.out.println("     ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_FORGETED[" + xid + "]");
 	}
 

Added: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/RemoteServerImpl.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/RemoteServerImpl.java	                        (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/RemoteServerImpl.java	2011-12-01 09:52:44 UTC (rev 37755)
@@ -0,0 +1,120 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package com.arjuna.ats.jta.distributed.server.impl;
+
+import java.util.Arrays;
+import java.util.Set;
+
+import javax.transaction.SystemException;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.Xid;
+
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinationManager;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.TransactionImporterImple;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.XATerminatorImple;
+import com.arjuna.ats.jta.distributed.server.RemoteServer;
+
+public class RemoteServerImpl implements RemoteServer {
+	@Override
+	public int prepare(Xid xid, boolean recover) throws XAException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			if (recover) {
+				((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(xid, null);
+			}
+			return SubordinationManager.getXATerminator().prepare(xid);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+	}
+
+	@Override
+	public void commit(Xid xid, boolean onePhase, boolean recover) throws XAException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			if (recover) {
+				((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(xid, null);
+			}
+			SubordinationManager.getXATerminator().commit(xid, onePhase);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+	}
+
+	@Override
+	public void rollback(Xid xid, boolean recover) throws XAException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			if (recover) {
+				((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(xid, null);
+			}
+			SubordinationManager.getXATerminator().rollback(xid);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+	}
+
+	@Override
+	public void forget(Xid xid, boolean recover) throws XAException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			if (recover) {
+				((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(xid, null);
+			}
+			SubordinationManager.getXATerminator().forget(xid);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+
+	}
+
+	@Override
+	public void beforeCompletion(Xid xid) throws XAException, SystemException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			((XATerminatorImple) SubordinationManager.getXATerminator()).beforeCompletion(xid);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+	}
+
+	@Override
+	public Xid[] recoverFor(String localServerName) throws XAException {
+		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+		try {
+			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+			Set<Xid> toReturn = ((TransactionImporterImple) SubordinationManager.getTransactionImporter()).getInflightXids(localServerName);
+			Xid[] doRecover = ((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(null, localServerName);
+			if (doRecover != null) {
+				toReturn.addAll(Arrays.asList(doRecover));
+			}
+			return toReturn.toArray(new Xid[0]);
+		} finally {
+			Thread.currentThread().setContextClassLoader(contextClassLoader);
+		}
+	}
+}

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-12-01 08:59:36 UTC (rev 37754)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java	2011-12-01 09:52:44 UTC (rev 37755)
@@ -67,7 +67,7 @@
 import com.arjuna.ats.jta.distributed.server.RemoteServer;
 import com.arjuna.ats.jta.xa.XidImple;
 
-public class ServerImpl implements LocalServer, RemoteServer {
+public class ServerImpl implements LocalServer {
 
 	private String nodeName;
 	private RecoveryManagerService recoveryManagerService;
@@ -264,88 +264,8 @@
 
 	@Override
 	public RemoteServer connectTo() {
-		return this;
+		return new RemoteServerImpl();
 	}
 
-	@Override
-	public int prepare(Xid xid, boolean recover) throws XAException, IOException {
-		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		try {
-			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			if (recover) {
-				recover(xid);
-			}
-			return SubordinationManager.getXATerminator().prepare(xid);
-		} finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-	}
 
-	@Override
-	public void commit(Xid xid, boolean onePhase, boolean recover) throws XAException, IOException {
-		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		try {
-			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			if (recover) {
-				recover(xid);
-			}
-			SubordinationManager.getXATerminator().commit(xid, onePhase);
-		} finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-	}
-
-	@Override
-	public void rollback(Xid xid, boolean recover) throws XAException, IOException {
-		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		try {
-			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			if (recover) {
-				recover(xid);
-			}
-			SubordinationManager.getXATerminator().rollback(xid);
-		} finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-	}
-
-	protected void recover(Xid toRecover) throws XAException, IOException {
-		((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(new XidImple(toRecover), null);
-	}
-
-	@Override
-	public void forget(Xid xid, boolean recover) throws XAException, IOException {
-		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		try {
-			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			if (recover) {
-				recover(xid);
-			}
-			SubordinationManager.getXATerminator().forget(xid);
-		} finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-
-	}
-
-	@Override
-	public void beforeCompletion(Xid xid) throws XAException, SystemException {
-		ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-		try {
-			Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
-			((XATerminatorImple) SubordinationManager.getXATerminator()).beforeCompletion(xid);
-		} finally {
-			Thread.currentThread().setContextClassLoader(contextClassLoader);
-		}
-	}
-
-	@Override
-	public Xid[] recoverFor(String localServerName) throws XAException {
-		Set<Xid> toReturn = ((TransactionImporterImple) SubordinationManager.getTransactionImporter()).getInflightXids(localServerName);
-		Xid[] doRecover = ((XATerminatorImple) SubordinationManager.getXATerminator()).doRecover(null, localServerName);
-		if (doRecover != null) {
-			toReturn.addAll(Arrays.asList(doRecover));
-		}
-		return toReturn.toArray(new Xid[0]);
-	}
 }



More information about the jboss-svn-commits mailing list