[jboss-svn-commits] JBL Code SVN: r37553 - in labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed: impl and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Oct 15 07:55:21 EDT 2011
Author: tomjenkinson
Date: 2011-10-15 07:55:21 -0400 (Sat, 15 Oct 2011)
New Revision: 37553
Added:
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/DummyRemoteException.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/IsolatableServersClassLoader.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/RemoteServer.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxySynchronization.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
Removed:
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/IsolatableServersClassLoader.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/LocalServer.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/RemoteServer.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxySynchronization.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxyXAResource.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxyXAResourceRecovery.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ServerImpl.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxySynchronization.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
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/impl/ProxyXAResourceRecovery.java
Log:
JBTM-916 updated to make separate functionality by classloader
Deleted: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/IsolatableServersClassLoader.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/IsolatableServersClassLoader.java 2011-10-15 11:06:44 UTC (rev 37552)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/IsolatableServersClassLoader.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,91 +0,0 @@
-package com.arjuna.ats.jta.distributed;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.HashMap;
-import java.util.Map;
-
-public class IsolatableServersClassLoader extends ClassLoader {
-
- private Map<String, Class<?>> clazzMap = new HashMap<String, Class<?>>();
- private Method m;
-
- public IsolatableServersClassLoader(ClassLoader parent) throws SecurityException, NoSuchMethodException {
- super(parent);
- m = ClassLoader.class.getDeclaredMethod("findLoadedClass", new Class[] { String.class });
- m.setAccessible(true);
- }
-
- @Override
- protected Class<?> findClass(String name) throws ClassNotFoundException {
- if (clazzMap.containsKey(name)) {
- return clazzMap.get(name);
- }
- return super.findClass(name);
- }
-
- public Class<?> loadClass(String name) throws ClassNotFoundException {
- Class<?> clazz = null;
- if (clazzMap.containsKey(name)) {
- clazz = clazzMap.get(name);
- }
-
- try {
- ClassLoader parent2 = getParent();
- Object test1 = m.invoke(parent2, name);
- if (test1 != null) {
-
- if (!name.equals("")) {
- clazz = super.loadClass(name);
- }
- } else {
- try {
- String url = "file:" + System.getProperty("user.dir") + "/bin/" + name.replace('.', '/') + ".class";
- URL myUrl = new URL(url);
- try {
- URLConnection connection = myUrl.openConnection();
- InputStream input = connection.getInputStream();
- ByteArrayOutputStream buffer = new ByteArrayOutputStream();
- int data = input.read();
-
- while (data != -1) {
- buffer.write(data);
- data = input.read();
- }
-
- input.close();
-
- byte[] classData = buffer.toByteArray();
-
- clazz = defineClass(name, classData, 0, classData.length);
- clazzMap.put(name, clazz);
- } catch (FileNotFoundException fnfe) {
- return super.loadClass(name);
- }
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- } catch (IllegalArgumentException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- } catch (IllegalAccessException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- } catch (InvocationTargetException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
-
- return clazz;
- }
-}
\ No newline at end of file
Deleted: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/LocalServer.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/LocalServer.java 2011-10-15 11:06:44 UTC (rev 37552)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/LocalServer.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,45 +0,0 @@
-package com.arjuna.ats.jta.distributed;
-
-import java.io.IOException;
-import java.net.ConnectException;
-import java.util.List;
-
-import javax.transaction.HeuristicCommitException;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-
-import com.arjuna.ats.arjuna.common.CoreEnvironmentBeanException;
-
-public interface LocalServer {
-
- public void initialise(Integer nodeName) throws CoreEnvironmentBeanException, IOException;
-
- public Integer getNodeName();
-
- public TransactionManager getTransactionManager() throws NotSupportedException, SystemException;
-
- public void doRecoveryManagerScan();
-
- public long getTimeLeftBeforeTransactionTimeout() throws RollbackException;
-
- public Xid getCurrentXid() throws SystemException;
-
- public void setOffline(boolean offline);
-
- public XAResource generateProxyXAResource(Integer localServerName, Integer remoteServerName);
-
- public Synchronization generateProxySynchronization(Integer localServerName, Integer remoteServerName, Xid toRegisterAgainst);
-
- public boolean importTransaction(int remainingTimeout, Xid toImport) throws XAException, InvalidTransactionException, IllegalStateException,
- SystemException;
-
-}
Deleted: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/RemoteServer.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/RemoteServer.java 2011-10-15 11:06:44 UTC (rev 37552)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/RemoteServer.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,29 +0,0 @@
-package com.arjuna.ats.jta.distributed;
-
-import java.net.ConnectException;
-import java.util.List;
-
-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;
-
-public interface RemoteServer {
-
- public int propagatePrepare(Xid xid) throws XAException, ConnectException;
-
- public void propagateCommit(Xid xid, boolean onePhase) throws IllegalStateException, HeuristicMixedException, HeuristicRollbackException,
- HeuristicCommitException, SystemException, XAException, ConnectException;
-
- public void propagateRollback(Xid xid) throws IllegalStateException, HeuristicMixedException, HeuristicCommitException, HeuristicRollbackException,
- SystemException, XAException, ConnectException;
-
- public Xid[] propagateRecover(List<Integer> startScanned, int flag) throws XAException, ConnectException;
-
- public void propagateForget(Xid xid) throws XAException, ConnectException;
-
- public void propagateBeforeCompletion(Xid xid) throws XAException, SystemException, ConnectException;
-
-}
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-15 11:06:44 UTC (rev 37552)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/SimpleIsolatedServers.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -24,6 +24,9 @@
import org.junit.Test;
import com.arjuna.ats.arjuna.common.CoreEnvironmentBeanException;
+import com.arjuna.ats.jta.distributed.server.IsolatableServersClassLoader;
+import com.arjuna.ats.jta.distributed.server.LocalServer;
+import com.arjuna.ats.jta.distributed.server.RemoteServer;
public class SimpleIsolatedServers {
private static LocalServer[] localServers = new LocalServer[3];
@@ -48,9 +51,9 @@
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
for (int i = 0; i < localServers.length; i++) {
IsolatableServersClassLoader classLoader = new IsolatableServersClassLoader(contextClassLoader);
- localServers[i] = (LocalServer) classLoader.loadClass("com.arjuna.ats.jta.distributed.impl.ServerImpl").newInstance();
+ localServers[i] = (LocalServer) classLoader.loadClass("com.arjuna.ats.jta.distributed.server.impl.ServerImpl").newInstance();
localServers[i].initialise((i + 1) * 1000);
- remoteServers[i] = (RemoteServer) localServers[i];
+ remoteServers[i] = localServers[i].connectTo();
}
}
Deleted: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxySynchronization.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxySynchronization.java 2011-10-15 11:06:44 UTC (rev 37552)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxySynchronization.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,42 +0,0 @@
-package com.arjuna.ats.jta.distributed.impl;
-
-import java.net.ConnectException;
-
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.Xid;
-
-import com.arjuna.ats.jta.distributed.SimpleIsolatedServers;
-
-public class ProxySynchronization implements Synchronization {
-
- private int localServerName;
- private int remoteServerName;
- private Xid toRegisterAgainst;
-
- public ProxySynchronization(int localServerName, int remoteServerName, Xid toRegisterAgainst) {
- this.localServerName = localServerName;
- this.remoteServerName = remoteServerName;
- this.toRegisterAgainst = toRegisterAgainst;
- }
-
- @Override
- public void beforeCompletion() {
- System.out.println("ProxySynchronization (" + localServerName + ":" + remoteServerName + ") beforeCompletion");
- try {
- SimpleIsolatedServers.lookup(remoteServerName).propagateBeforeCompletion(toRegisterAgainst);
- } catch (XAException e) {
- e.printStackTrace();
- } catch (SystemException e) {
- e.printStackTrace();
- } catch (ConnectException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void afterCompletion(int status) {
- // These are not proxied but are handled during local commits
- }
-}
Deleted: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxyXAResource.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxyXAResource.java 2011-10-15 11:06:44 UTC (rev 37552)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxyXAResource.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,320 +0,0 @@
-package com.arjuna.ats.jta.distributed.impl;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.ConnectException;
-import java.util.ArrayList;
-import java.util.List;
-
-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;
-
-import org.jboss.tm.XAResourceWrapper;
-
-import com.arjuna.ats.arjuna.common.Uid;
-import com.arjuna.ats.jta.distributed.SimpleIsolatedServers;
-
-public class ProxyXAResource implements XAResource, XAResourceWrapper {
-
- public static final ThreadLocal<List<Integer>> RECOVERY_SCAN_STARTED = new ThreadLocal<List<Integer>>();
-
- private int transactionTimeout;
- private Xid xid;
- private Integer remoteServerName = -1;
- private File file;
- private Integer localServerName;
-
- public ProxyXAResource(Integer localServerName, Integer remoteServerName) {
- this.localServerName = localServerName;
- this.remoteServerName = remoteServerName;
- }
-
- public ProxyXAResource(Integer localServerName, File file) throws IOException {
- this.localServerName = localServerName;
- this.file = file;
- DataInputStream fis = new DataInputStream(new FileInputStream(file));
- final int formatId = fis.readInt();
- final int gtrid_length = fis.readInt();
- final byte[] gtrid = new byte[gtrid_length];
- fis.read(gtrid, 0, gtrid_length);
- final int bqual_length = fis.readInt();
- final byte[] bqual = new byte[bqual_length];
- fis.read(bqual, 0, bqual_length);
- int remoteServerName = fis.readInt();
- this.remoteServerName = remoteServerName;
- this.xid = new Xid() {
- @Override
- public byte[] getGlobalTransactionId() {
- return gtrid;
- }
-
- @Override
- public int getFormatId() {
- return formatId;
- }
-
- @Override
- public byte[] getBranchQualifier() {
- return bqual;
- }
-
- @Override
- public boolean equals(Object object) {
- Xid xid = (Xid) object;
- if (xid == null)
- return false;
-
- if (xid == this)
- return true;
- else {
-
- if (xid.getFormatId() == formatId) {
- byte[] gtx = xid.getGlobalTransactionId();
- byte[] bql = xid.getBranchQualifier();
- final int bqlength = (bql == null ? 0 : bql.length);
-
- if ((gtrid.length == gtx.length) && (bqual.length == bqlength)) {
- int i;
-
- for (i = 0; i < gtrid.length; i++) {
- if (gtrid[i] != gtx[i])
- return false;
- }
-
- for (i = 0; i < bqual.length; i++) {
- if (bqual[i] != bql[i])
- return false;
- }
-
- return true;
- }
- }
- }
-
- return false;
- }
- };
- }
-
- public Xid getXid() {
- return xid;
- }
-
- @Override
- public void start(Xid xid, int flags) throws XAException {
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_START [" + xid + "]");
- this.xid = xid;
- }
-
- @Override
- public void end(Xid xid, int flags) throws XAException {
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_END [" + xid + "]");
- this.xid = null;
- }
-
- @Override
- public synchronized int prepare(Xid xid) throws XAException {
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_PREPARE [" + xid + "]");
-
- try {
- File dir = new File(System.getProperty("user.dir") + "/tmp/ProxyXAResource/" + localServerName + "/");
- dir.mkdirs();
- file = new File(dir, new Uid().fileStringForm());
-
- file.createNewFile();
-
- final int formatId = xid.getFormatId();
- final byte[] gtrid = xid.getGlobalTransactionId();
- final int gtrid_length = gtrid.length;
- final byte[] bqual = xid.getBranchQualifier();
- final int bqual_length = bqual.length;
-
- DataOutputStream fos = new DataOutputStream(new FileOutputStream(file));
- fos.writeInt(formatId);
- fos.writeInt(gtrid_length);
- fos.write(gtrid, 0, gtrid_length);
- fos.writeInt(bqual_length);
- fos.write(bqual, 0, bqual_length);
- fos.writeInt(remoteServerName);
- } catch (IOException e) {
- e.printStackTrace();
- throw new XAException(XAException.XAER_RMERR);
- }
-
- try {
- int propagatePrepare = SimpleIsolatedServers.lookup(remoteServerName).propagatePrepare(xid);
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_PREPARED");
- return propagatePrepare;
- } catch (ConnectException ce) {
- throw new XAException(XAException.XA_RETRY);
- }
- }
-
- @Override
- public synchronized void commit(Xid xid, boolean onePhase) throws XAException {
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_COMMIT [" + xid + "]");
-
- try {
- SimpleIsolatedServers.lookup(remoteServerName).propagateCommit(xid, onePhase);
- 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 (ConnectException ce) {
- throw new XAException(XAException.XA_RETRY);
- }
-
- if (file != null) {
- file.delete();
- }
- }
-
- @Override
- public synchronized void rollback(Xid xid) throws XAException {
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_ROLLBACK[" + xid + "]");
- try {
- SimpleIsolatedServers.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 (ConnectException ce) {
- throw new XAException(XAException.XA_RETRY);
- }
-
- if (file != null) {
- file.delete();
- }
- }
-
- @Override
- public Xid[] recover(int flag) throws XAException {
- List<Integer> startScanned = RECOVERY_SCAN_STARTED.get();
- if (startScanned == null) {
- startScanned = new ArrayList<Integer>();
- RECOVERY_SCAN_STARTED.set(startScanned);
- }
-
- int tocheck = (flag & XAResource.TMSTARTRSCAN);
- if (tocheck == XAResource.TMSTARTRSCAN) {
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_RECOVER [XAResource.TMSTARTRSCAN]: "
- + remoteServerName);
-
- if (!startScanned.contains(remoteServerName)) {
- startScanned.add(remoteServerName);
-
- // Make sure that the remote server has recovered all
- // transactions
- try {
- SimpleIsolatedServers.lookup(remoteServerName).propagateRecover(startScanned, flag);
- } catch (ConnectException ce) {
- throw new XAException(XAException.XA_RETRY);
- } finally {
- startScanned.remove((Integer) remoteServerName);
- }
- }
-
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_RECOVERD[XAResource.TMSTARTRSCAN]: "
- + remoteServerName);
- }
- tocheck = (flag & XAResource.TMENDRSCAN);
- if (tocheck == XAResource.TMENDRSCAN) {
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_RECOVER [XAResource.TMENDRSCAN]: "
- + remoteServerName);
-
- if (!startScanned.contains(remoteServerName)) {
- try {
- SimpleIsolatedServers.lookup(remoteServerName).propagateRecover(startScanned, flag);
- } catch (ConnectException ce) {
- throw new XAException(XAException.XA_RETRY);
- } finally {
- startScanned.remove((Integer) remoteServerName);
- }
- }
-
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_RECOVERD[XAResource.TMENDRSCAN]: "
- + remoteServerName);
- }
-
- return new Xid[] { xid };
- }
-
- @Override
- public void forget(Xid xid) throws XAException {
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_FORGET [" + xid + "]");
- try {
- SimpleIsolatedServers.lookup(remoteServerName).propagateForget(xid);
- System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_FORGETED[" + xid + "]");
- } catch (ConnectException ce) {
- throw new XAException(XAException.XA_RETRY);
- }
- }
-
- @Override
- public int getTransactionTimeout() throws XAException {
- return transactionTimeout;
- }
-
- @Override
- public boolean setTransactionTimeout(int seconds) throws XAException {
- this.transactionTimeout = seconds;
- return true;
- }
-
- @Override
- public boolean isSameRM(XAResource xares) throws XAException {
- return xares.equals(this);
- }
-
- /**
- * I don't think this is used by TM.
- */
- @Override
- public XAResource getResource() {
- return null;
- }
-
- /**
- * I don't think this is used by TM.
- */
- @Override
- public String getProductName() {
- return null;
- }
-
- /**
- * I don't think this is used by TM.
- */
- @Override
- public String getProductVersion() {
- return null;
- }
-
- @Override
- public String getJndiName() {
- return "ProxyXAResource";
- }
-}
Deleted: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxyXAResourceRecovery.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxyXAResourceRecovery.java 2011-10-15 11:06:44 UTC (rev 37552)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxyXAResourceRecovery.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,33 +0,0 @@
-package com.arjuna.ats.jta.distributed.impl;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.transaction.xa.XAResource;
-
-import org.jboss.tm.XAResourceRecovery;
-
-
-public class ProxyXAResourceRecovery implements XAResourceRecovery {
-
- private List<ProxyXAResource> resources = new ArrayList<ProxyXAResource>();
-
- public ProxyXAResourceRecovery(int id) throws IOException {
- File file = new File(System.getProperty("user.dir") + "/tmp/ProxyXAResource/" + id + "/");
- if (file.exists() && file.isDirectory()) {
- File[] listFiles = file.listFiles();
- for (int i = 0; i < listFiles.length; i++) {
- File currentFile = listFiles[i];
- resources.add(new ProxyXAResource(id, currentFile));
- }
- }
- }
-
- @Override
- public XAResource[] getXAResources() {
- return resources.toArray(new XAResource[] {});
- }
-
-}
Deleted: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ServerImpl.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ServerImpl.java 2011-10-15 11:06:44 UTC (rev 37552)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ServerImpl.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,241 +0,0 @@
-package com.arjuna.ats.jta.distributed.impl;
-
-import java.io.IOException;
-import java.net.ConnectException;
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.HashMap;
-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;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-
-import org.jboss.tm.TransactionTimeoutConfiguration;
-
-import com.arjuna.ats.arjuna.common.CoordinatorEnvironmentBean;
-import com.arjuna.ats.arjuna.common.CoreEnvironmentBean;
-import com.arjuna.ats.arjuna.common.CoreEnvironmentBeanException;
-import com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean;
-import com.arjuna.ats.arjuna.common.RecoveryEnvironmentBean;
-import com.arjuna.ats.arjuna.coordinator.TxControl;
-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.transaction.arjunacore.TransactionImple;
-import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinateTransaction;
-import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinationManager;
-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.distributed.RemoteServer;
-import com.arjuna.ats.jta.distributed.LocalServer;
-import com.arjuna.ats.jta.distributed.TestResourceRecovery;
-
-public class ServerImpl implements LocalServer, RemoteServer {
-
- private int nodeName;
- private RecoveryManagerService recoveryManagerService;
- private TransactionManagerService transactionManagerService;
- private boolean offline;
-
- public void initialise(Integer serverName) throws CoreEnvironmentBeanException, IOException {
- this.nodeName = serverName;
-
- RecoveryEnvironmentBean recoveryEnvironmentBean = com.arjuna.ats.arjuna.common.recoveryPropertyManager.getRecoveryEnvironmentBean();
- recoveryEnvironmentBean.setRecoveryBackoffPeriod(1);
-
- recoveryEnvironmentBean.setRecoveryInetAddress(InetAddress.getByName("localhost"));
- recoveryEnvironmentBean.setRecoveryPort(4712 + serverName);
- recoveryEnvironmentBean.setTransactionStatusManagerInetAddress(InetAddress.getByName("localhost"));
- recoveryEnvironmentBean.setTransactionStatusManagerPort(4713 + serverName);
- List<String> recoveryModuleClassNames = new ArrayList<String>();
-
- recoveryModuleClassNames.add("com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule");
- recoveryModuleClassNames.add("com.arjuna.ats.internal.txoj.recovery.TORecoveryModule");
- recoveryModuleClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule");
- recoveryEnvironmentBean.setRecoveryModuleClassNames(recoveryModuleClassNames);
- List<String> expiryScannerClassNames = new ArrayList<String>();
- expiryScannerClassNames.add("com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionStatusManagerScanner");
- recoveryEnvironmentBean.setExpiryScannerClassNames(expiryScannerClassNames);
- recoveryEnvironmentBean.setRecoveryActivators(null);
-
- CoreEnvironmentBean coreEnvironmentBean = com.arjuna.ats.arjuna.common.arjPropertyManager.getCoreEnvironmentBean();
- coreEnvironmentBean.setSocketProcessIdPort(4714 + serverName);
- coreEnvironmentBean.setNodeIdentifier(serverName);
- coreEnvironmentBean.setSocketProcessIdMaxPorts(1);
-
- CoordinatorEnvironmentBean coordinatorEnvironmentBean = com.arjuna.ats.arjuna.common.arjPropertyManager.getCoordinatorEnvironmentBean();
- coordinatorEnvironmentBean.setEnableStatistics(false);
- coordinatorEnvironmentBean.setDefaultTimeout(300);
- coordinatorEnvironmentBean.setTransactionStatusManagerEnable(false);
- coordinatorEnvironmentBean.setDefaultTimeout(0);
-
- ObjectStoreEnvironmentBean actionStoreObjectStoreEnvironmentBean = com.arjuna.common.internal.util.propertyservice.BeanPopulator.getNamedInstance(
- com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.class, "default");
- actionStoreObjectStoreEnvironmentBean.setObjectStoreDir(System.getProperty("user.dir") + "/tmp/tx-object-store/" + serverName);
-
- ObjectStoreEnvironmentBean stateStoreObjectStoreEnvironmentBean = com.arjuna.common.internal.util.propertyservice.BeanPopulator.getNamedInstance(
- com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.class, "stateStore");
- stateStoreObjectStoreEnvironmentBean.setObjectStoreDir(System.getProperty("user.dir") + "/tmp/tx-object-store/" + serverName);
-
- ObjectStoreEnvironmentBean communicationStoreObjectStoreEnvironmentBean = com.arjuna.common.internal.util.propertyservice.BeanPopulator
- .getNamedInstance(com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.class, "communicationStore");
- communicationStoreObjectStoreEnvironmentBean.setObjectStoreDir(System.getProperty("user.dir") + "/tmp/tx-object-store/" + serverName);
-
- ObjStoreBrowser objStoreBrowser = new ObjStoreBrowser();
- Map<String, String> types = new HashMap<String, String>();
- types.put("StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction", "com.arjuna.ats.internal.jta.tools.osb.mbean.jta.JTAActionBean");
- objStoreBrowser.setTypes(types);
-
- JTAEnvironmentBean jTAEnvironmentBean = com.arjuna.ats.jta.common.jtaPropertyManager.getJTAEnvironmentBean();
- jTAEnvironmentBean.setLastResourceOptimisationInterface(org.jboss.tm.LastResource.class);
- jTAEnvironmentBean.setTransactionManagerClassName("com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate");
- jTAEnvironmentBean.setUserTransactionClassName("com.arjuna.ats.internal.jta.transaction.arjunacore.UserTransactionImple");
- jTAEnvironmentBean
- .setTransactionSynchronizationRegistryClassName("com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple");
- List<Integer> xaRecoveryNodes = new ArrayList<Integer>();
- xaRecoveryNodes.add(serverName);
- jTAEnvironmentBean.setXaRecoveryNodes(xaRecoveryNodes);
-
- List<String> xaResourceOrphanFilterClassNames = new ArrayList<String>();
-
- xaResourceOrphanFilterClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter");
- xaResourceOrphanFilterClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter");
- // xaResourceOrphanFilterClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.ParentNodeNameXAResourceOrphanFilter");
- jTAEnvironmentBean.setXaResourceOrphanFilterClassNames(xaResourceOrphanFilterClassNames);
- jTAEnvironmentBean.setXAResourceRecordWrappingPlugin(new XAResourceRecordWrappingPluginImpl());
-
- recoveryManagerService = new RecoveryManagerService();
- recoveryManagerService.create();
- recoveryManagerService.addXAResourceRecovery(new ProxyXAResourceRecovery(serverName));
- recoveryManagerService.addXAResourceRecovery(new TestResourceRecovery(serverName));
- // recoveryManagerService.start();
- RecoveryManager.manager().initialize();
-
- transactionManagerService = new TransactionManagerService();
- TxControl txControl = new com.arjuna.ats.arjuna.coordinator.TxControl();
- transactionManagerService.setJbossXATerminator(new com.arjuna.ats.internal.jbossatx.jta.jca.XATerminator());
- transactionManagerService
- .setTransactionSynchronizationRegistry(new com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple());
- transactionManagerService.create();
-
- }
-
- @Override
- public void doRecoveryManagerScan() {
- RecoveryManager.manager().scan();
- }
-
- @Override
- public TransactionManager getTransactionManager() {
- return transactionManagerService.getTransactionManager();
- }
-
- @Override
- public boolean importTransaction(int remainingTimeout, Xid toResume) throws XAException, InvalidTransactionException, IllegalStateException,
- SystemException {
- boolean existed = true;
- SubordinateTransaction importTransaction = SubordinationManager.getTransactionImporter().getImportedTransaction(toResume);
- if (importTransaction == null) {
- importTransaction = SubordinationManager.getTransactionImporter().importTransaction(toResume, remainingTimeout);
- existed = false;
- }
- getTransactionManager().resume(importTransaction);
- return existed;
- }
-
- @Override
- public Integer getNodeName() {
- return nodeName;
- }
-
- @Override
- public long getTimeLeftBeforeTransactionTimeout() throws RollbackException {
- return ((TransactionTimeoutConfiguration) transactionManagerService.getTransactionManager()).getTimeLeftBeforeTransactionTimeout(false);
- }
-
- @Override
- public Xid getCurrentXid() throws SystemException {
- TransactionImple transaction = ((TransactionImple) transactionManagerService.getTransactionManager().getTransaction());
- return transaction.getTxId();
- }
-
- @Override
- public XAResource generateProxyXAResource(Integer localServerName, Integer remoteServerName) {
- return new ProxyXAResource(localServerName, remoteServerName);
- }
-
- @Override
- public Synchronization generateProxySynchronization(Integer localServerName, Integer remoteServerName, Xid toRegisterAgainst) {
- return new ProxySynchronization(localServerName, remoteServerName, toRegisterAgainst);
- }
-
- @Override
- public int propagatePrepare(Xid xid) throws XAException, ConnectException {
- if (offline) {
- throw new ConnectException("Connection refused to: " + nodeName);
- }
- return SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doPrepare();
- }
-
- @Override
- public void propagateCommit(Xid xid, boolean onePhase) throws IllegalStateException, HeuristicMixedException, HeuristicRollbackException,
- HeuristicCommitException, SystemException, XAException, ConnectException {
- if (offline) {
- throw new ConnectException("Connection refused to: " + nodeName);
- }
- SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doCommit();
- }
-
- @Override
- public void propagateRollback(Xid xid) throws IllegalStateException, HeuristicMixedException, HeuristicCommitException, HeuristicRollbackException,
- SystemException, XAException, ConnectException {
- if (offline) {
- throw new ConnectException("Connection refused to: " + nodeName);
- }
- SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doRollback();
- }
-
- @Override
- public Xid[] propagateRecover(List<Integer> recoveryScanStarted, int flag) throws XAException, ConnectException {
- if (offline) {
- throw new ConnectException("Connection refused to: " + nodeName);
- }
- // Assumes that this thread is used by the recovery thread
- ProxyXAResource.RECOVERY_SCAN_STARTED.set(recoveryScanStarted);
- return SubordinationManager.getXATerminator().recover(flag);
- }
-
- @Override
- public void propagateForget(Xid xid) throws XAException, ConnectException {
- if (offline) {
- throw new ConnectException("Connection refused to: " + nodeName);
- }
- SubordinationManager.getXATerminator().forget(xid);
-
- }
-
- @Override
- public void propagateBeforeCompletion(Xid xid) throws XAException, SystemException, ConnectException {
- if (offline) {
- throw new ConnectException("Connection refused to: " + nodeName);
- }
- SubordinateTransaction tx = SubordinationManager.getTransactionImporter().getImportedTransaction(xid);
- tx.doBeforeCompletion();
- }
-
- @Override
- public void setOffline(boolean offline) {
- this.offline = offline;
- }
-}
Added: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/DummyRemoteException.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/DummyRemoteException.java (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/DummyRemoteException.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -0,0 +1,7 @@
+package com.arjuna.ats.jta.distributed.server;
+
+public class DummyRemoteException extends Exception {
+ public DummyRemoteException(String message) {
+ super(message);
+ }
+}
Copied: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/IsolatableServersClassLoader.java (from rev 37545, labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/IsolatableServersClassLoader.java)
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/IsolatableServersClassLoader.java (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/IsolatableServersClassLoader.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -0,0 +1,91 @@
+package com.arjuna.ats.jta.distributed.server;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.HashMap;
+import java.util.Map;
+
+public class IsolatableServersClassLoader extends ClassLoader {
+
+ private Map<String, Class<?>> clazzMap = new HashMap<String, Class<?>>();
+ private Method m;
+
+ public IsolatableServersClassLoader(ClassLoader parent) throws SecurityException, NoSuchMethodException {
+ super(parent);
+ m = ClassLoader.class.getDeclaredMethod("findLoadedClass", new Class[] { String.class });
+ m.setAccessible(true);
+ }
+
+ @Override
+ protected Class<?> findClass(String name) throws ClassNotFoundException {
+ if (clazzMap.containsKey(name)) {
+ return clazzMap.get(name);
+ }
+ return super.findClass(name);
+ }
+
+ public Class<?> loadClass(String name) throws ClassNotFoundException {
+ Class<?> clazz = null;
+ if (clazzMap.containsKey(name)) {
+ clazz = clazzMap.get(name);
+ }
+
+ try {
+ ClassLoader parent2 = getParent();
+ Object test1 = m.invoke(parent2, name);
+ if (test1 != null) {
+
+ if (!name.equals("")) {
+ clazz = super.loadClass(name);
+ }
+ } else {
+ try {
+ String url = "file:" + System.getProperty("user.dir") + "/bin/" + name.replace('.', '/') + ".class";
+ URL myUrl = new URL(url);
+ try {
+ URLConnection connection = myUrl.openConnection();
+ InputStream input = connection.getInputStream();
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+ int data = input.read();
+
+ while (data != -1) {
+ buffer.write(data);
+ data = input.read();
+ }
+
+ input.close();
+
+ byte[] classData = buffer.toByteArray();
+
+ clazz = defineClass(name, classData, 0, classData.length);
+ clazzMap.put(name, clazz);
+ } catch (FileNotFoundException fnfe) {
+ return super.loadClass(name);
+ }
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ } catch (IllegalArgumentException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ } catch (IllegalAccessException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ } catch (InvocationTargetException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+
+ return clazz;
+ }
+}
\ No newline at end of file
Copied: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java (from rev 37552, labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/LocalServer.java)
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/LocalServer.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -0,0 +1,42 @@
+package com.arjuna.ats.jta.distributed.server;
+
+import java.io.IOException;
+
+import javax.transaction.InvalidTransactionException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+import com.arjuna.ats.arjuna.common.CoreEnvironmentBeanException;
+
+public interface LocalServer {
+
+ public void initialise(Integer nodeName) throws CoreEnvironmentBeanException, IOException;
+
+ public Integer getNodeName();
+
+ public TransactionManager getTransactionManager() throws NotSupportedException, SystemException;
+
+ public void doRecoveryManagerScan();
+
+ public long getTimeLeftBeforeTransactionTimeout() throws RollbackException;
+
+ public Xid getCurrentXid() throws SystemException;
+
+ public boolean importTransaction(int remainingTimeout, Xid toImport) throws XAException, InvalidTransactionException, IllegalStateException,
+ SystemException;
+
+ public RemoteServer connectTo();
+
+ public void setOffline(boolean offline);
+
+ public XAResource generateProxyXAResource(Integer localServerName, Integer remoteServerName);
+
+ public Synchronization generateProxySynchronization(Integer localServerName, Integer remoteServerName, Xid toRegisterAgainst);
+
+}
Copied: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/RemoteServer.java (from rev 37552, labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/RemoteServer.java)
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/RemoteServer.java (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/RemoteServer.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -0,0 +1,29 @@
+package com.arjuna.ats.jta.distributed.server;
+
+import java.net.ConnectException;
+import java.util.List;
+
+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;
+
+public interface RemoteServer {
+
+ 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 propagateRollback(Xid xid) throws IllegalStateException, HeuristicMixedException, HeuristicCommitException, HeuristicRollbackException,
+ SystemException, XAException, DummyRemoteException;
+
+ public Xid[] propagateRecover(List<Integer> startScanned, int flag) throws XAException, DummyRemoteException;
+
+ public void propagateForget(Xid xid) throws XAException, DummyRemoteException;
+
+ public void propagateBeforeCompletion(Xid xid) throws XAException, SystemException, DummyRemoteException;
+
+}
Deleted: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxySynchronization.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxySynchronization.java 2011-10-14 23:48:41 UTC (rev 37545)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxySynchronization.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,39 +0,0 @@
-package com.arjuna.ats.jta.distributed.impl;
-
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.Xid;
-
-import com.arjuna.ats.jta.distributed.SimpleIsolatedServers;
-
-public class ProxySynchronization implements Synchronization {
-
- private int serverId;
- private int serverIdToProxyTo;
- private Xid toRegisterAgainst;
-
- public ProxySynchronization(int serverId, int serverIdToProxyTo, Xid toRegisterAgainst) {
- this.serverId = serverId;
- this.serverIdToProxyTo = serverIdToProxyTo;
- this.toRegisterAgainst = toRegisterAgainst;
- }
-
- @Override
- public void beforeCompletion() {
- System.out.println("ProxySynchronization (" + serverId + ":" + serverIdToProxyTo + ") beforeCompletion");
- int index = (serverIdToProxyTo / 1000) - 1;
- try {
- SimpleIsolatedServers.getServers()[index].propagateBeforeCompletion(toRegisterAgainst);
- } catch (XAException e) {
- e.printStackTrace();
- } catch (SystemException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void afterCompletion(int status) {
- // These are not proxied but are handled during local commits
- }
-}
Copied: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxySynchronization.java (from rev 37552, labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxySynchronization.java)
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxySynchronization.java (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxySynchronization.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -0,0 +1,41 @@
+package com.arjuna.ats.jta.distributed.server.impl;
+
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.Xid;
+
+import com.arjuna.ats.jta.distributed.SimpleIsolatedServers;
+import com.arjuna.ats.jta.distributed.server.DummyRemoteException;
+
+public class ProxySynchronization implements Synchronization {
+
+ private int localServerName;
+ private int remoteServerName;
+ private Xid toRegisterAgainst;
+
+ public ProxySynchronization(int localServerName, int remoteServerName, Xid toRegisterAgainst) {
+ this.localServerName = localServerName;
+ this.remoteServerName = remoteServerName;
+ this.toRegisterAgainst = toRegisterAgainst;
+ }
+
+ @Override
+ public void beforeCompletion() {
+ System.out.println("ProxySynchronization (" + localServerName + ":" + remoteServerName + ") beforeCompletion");
+ try {
+ SimpleIsolatedServers.lookup(remoteServerName).propagateBeforeCompletion(toRegisterAgainst);
+ } catch (XAException e) {
+ e.printStackTrace();
+ } catch (SystemException e) {
+ e.printStackTrace();
+ } catch (DummyRemoteException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void afterCompletion(int status) {
+ // These are not proxied but are handled during local commits
+ }
+}
Deleted: 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/impl/ProxyXAResource.java 2011-10-14 23:48:41 UTC (rev 37545)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,298 +0,0 @@
-package com.arjuna.ats.jta.distributed.impl;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-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;
-
-import org.jboss.tm.XAResourceWrapper;
-
-import com.arjuna.ats.arjuna.common.Uid;
-import com.arjuna.ats.jta.distributed.Server;
-import com.arjuna.ats.jta.distributed.SimpleIsolatedServers;
-
-public class ProxyXAResource implements XAResource, XAResourceWrapper {
-
- public static final ThreadLocal<List<Integer>> RECOVERY_SCAN_STARTED = new ThreadLocal<List<Integer>>();
-
- private int transactionTimeout;
- private Xid xid;
- private int serverIdToProxyTo = -1;
- private File file;
- private Integer serverId;
-
- public ProxyXAResource(int serverId, int serverIdToProxyTo) {
- this.serverId = serverId;
- this.serverIdToProxyTo = serverIdToProxyTo;
- }
-
- public ProxyXAResource(int recoverFor, File file) throws IOException {
- this.serverId = recoverFor;
- this.file = file;
- DataInputStream fis = new DataInputStream(new FileInputStream(file));
- final int formatId = fis.readInt();
- final int gtrid_length = fis.readInt();
- final byte[] gtrid = new byte[gtrid_length];
- fis.read(gtrid, 0, gtrid_length);
- final int bqual_length = fis.readInt();
- final byte[] bqual = new byte[bqual_length];
- fis.read(bqual, 0, bqual_length);
- int serverIdToProxyTo = fis.readInt();
- this.serverIdToProxyTo = serverIdToProxyTo;
- this.xid = new Xid() {
- @Override
- public byte[] getGlobalTransactionId() {
- return gtrid;
- }
-
- @Override
- public int getFormatId() {
- return formatId;
- }
-
- @Override
- public byte[] getBranchQualifier() {
- return bqual;
- }
-
- @Override
- public boolean equals(Object object) {
- Xid xid = (Xid) object;
- if (xid == null)
- return false;
-
- if (xid == this)
- return true;
- else {
-
- if (xid.getFormatId() == formatId) {
- byte[] gtx = xid.getGlobalTransactionId();
- byte[] bql = xid.getBranchQualifier();
- final int bqlength = (bql == null ? 0 : bql.length);
-
- if ((gtrid.length == gtx.length) && (bqual.length == bqlength)) {
- int i;
-
- for (i = 0; i < gtrid.length; i++) {
- if (gtrid[i] != gtx[i])
- return false;
- }
-
- for (i = 0; i < bqual.length; i++) {
- if (bqual[i] != bql[i])
- return false;
- }
-
- return true;
- }
- }
- }
-
- return false;
- }
- };
- }
-
- public Xid getXid() {
- return xid;
- }
-
- @Override
- public void start(Xid xid, int flags) throws XAException {
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_START [" + xid + "]");
- this.xid = xid;
- }
-
- @Override
- public void end(Xid xid, int flags) throws XAException {
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_END [" + xid + "]");
- this.xid = null;
- }
-
- @Override
- public synchronized int prepare(Xid xid) throws XAException {
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_PREPARE [" + xid + "]");
-
- try {
- File dir = new File(System.getProperty("user.dir") + "/tmp/ProxyXAResource/" + serverId + "/");
- dir.mkdirs();
- file = new File(dir, new Uid().fileStringForm());
-
- file.createNewFile();
-
- final int formatId = xid.getFormatId();
- final byte[] gtrid = xid.getGlobalTransactionId();
- final int gtrid_length = gtrid.length;
- final byte[] bqual = xid.getBranchQualifier();
- final int bqual_length = bqual.length;
-
- DataOutputStream fos = new DataOutputStream(new FileOutputStream(file));
- fos.writeInt(formatId);
- fos.writeInt(gtrid_length);
- fos.write(gtrid, 0, gtrid_length);
- fos.writeInt(bqual_length);
- fos.write(bqual, 0, bqual_length);
- fos.writeInt(serverIdToProxyTo);
- } catch (IOException e) {
- e.printStackTrace();
- throw new XAException(XAException.XAER_RMERR);
- }
-
- int propagatePrepare = getServerToProxyTo().propagatePrepare(xid);
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_PREPARED");
- return propagatePrepare;
- }
-
- @Override
- public synchronized void commit(Xid xid, boolean onePhase) throws XAException {
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_COMMIT [" + xid + "]");
-
- try {
- getServerToProxyTo().propagateCommit(xid, onePhase);
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") 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);
- }
-
- if (file != null) {
- file.delete();
- }
- }
-
- @Override
- public synchronized void rollback(Xid xid) throws XAException {
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_ROLLBACK[" + xid + "]");
- try {
- getServerToProxyTo().propagateRollback(xid);
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") 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);
- }
-
- if (file != null) {
- file.delete();
- }
- }
-
- @Override
- public Xid[] recover(int flag) throws XAException {
- List<Integer> startScanned = RECOVERY_SCAN_STARTED.get();
- if (startScanned == null) {
- startScanned = new ArrayList<Integer>();
- RECOVERY_SCAN_STARTED.set(startScanned);
- }
-
- int tocheck = (flag & XAResource.TMSTARTRSCAN);
- if (tocheck == XAResource.TMSTARTRSCAN) {
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_RECOVER [XAResource.TMSTARTRSCAN]: " + serverIdToProxyTo);
-
- if (!startScanned.contains(serverIdToProxyTo)) {
- startScanned.add(serverIdToProxyTo);
-
- // Make sure that the remote server has recovered all
- // transactions
- getServerToProxyTo().propagateRecover(startScanned, flag);
- startScanned.remove((Integer) serverIdToProxyTo);
- }
-
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_RECOVERD[XAResource.TMSTARTRSCAN]: " + serverIdToProxyTo);
- }
- tocheck = (flag & XAResource.TMENDRSCAN);
- if (tocheck == XAResource.TMENDRSCAN) {
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_RECOVER [XAResource.TMENDRSCAN]: " + serverIdToProxyTo);
-
- if (!startScanned.contains(serverIdToProxyTo)) {
- getServerToProxyTo().propagateRecover(startScanned, flag);
- }
-
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_RECOVERD[XAResource.TMENDRSCAN]: " + serverIdToProxyTo);
- }
-
- return new Xid[] { xid };
- }
-
- @Override
- public void forget(Xid xid) throws XAException {
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_FORGET [" + xid + "]");
- getServerToProxyTo().propagateForget(xid);
- System.out.println(" ProxyXAResource (" + serverId + ":" + serverIdToProxyTo + ") XA_FORGETED[" + xid + "]");
- }
-
- @Override
- public int getTransactionTimeout() throws XAException {
- return transactionTimeout;
- }
-
- @Override
- public boolean setTransactionTimeout(int seconds) throws XAException {
- this.transactionTimeout = seconds;
- return true;
- }
-
- @Override
- public boolean isSameRM(XAResource xares) throws XAException {
- return xares.equals(this);
- }
-
- /**
- * I don't think this is used by TM.
- */
- @Override
- public XAResource getResource() {
- return null;
- }
-
- /**
- * I don't think this is used by TM.
- */
- @Override
- public String getProductName() {
- return null;
- }
-
- /**
- * I don't think this is used by TM.
- */
- @Override
- public String getProductVersion() {
- return null;
- }
-
- @Override
- public String getJndiName() {
- return "ProxyXAResource";
- }
-
- private Server getServerToProxyTo() {
- int index = (serverIdToProxyTo / 1000) - 1;
- return SimpleIsolatedServers.getServers()[index];
- }
-}
Copied: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java (from rev 37552, labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxyXAResource.java)
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResource.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -0,0 +1,320 @@
+package com.arjuna.ats.jta.distributed.server.impl;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+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;
+
+import org.jboss.tm.XAResourceWrapper;
+
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.jta.distributed.SimpleIsolatedServers;
+import com.arjuna.ats.jta.distributed.server.DummyRemoteException;
+
+public class ProxyXAResource implements XAResource, XAResourceWrapper {
+
+ public static final ThreadLocal<List<Integer>> RECOVERY_SCAN_STARTED = new ThreadLocal<List<Integer>>();
+
+ private int transactionTimeout;
+ private Xid xid;
+ private Integer remoteServerName = -1;
+ private File file;
+ private Integer localServerName;
+
+ public ProxyXAResource(Integer localServerName, Integer remoteServerName) {
+ this.localServerName = localServerName;
+ this.remoteServerName = remoteServerName;
+ }
+
+ public ProxyXAResource(Integer localServerName, File file) throws IOException {
+ this.localServerName = localServerName;
+ this.file = file;
+ DataInputStream fis = new DataInputStream(new FileInputStream(file));
+ final int formatId = fis.readInt();
+ final int gtrid_length = fis.readInt();
+ final byte[] gtrid = new byte[gtrid_length];
+ fis.read(gtrid, 0, gtrid_length);
+ final int bqual_length = fis.readInt();
+ final byte[] bqual = new byte[bqual_length];
+ fis.read(bqual, 0, bqual_length);
+ int remoteServerName = fis.readInt();
+ this.remoteServerName = remoteServerName;
+ this.xid = new Xid() {
+ @Override
+ public byte[] getGlobalTransactionId() {
+ return gtrid;
+ }
+
+ @Override
+ public int getFormatId() {
+ return formatId;
+ }
+
+ @Override
+ public byte[] getBranchQualifier() {
+ return bqual;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ Xid xid = (Xid) object;
+ if (xid == null)
+ return false;
+
+ if (xid == this)
+ return true;
+ else {
+
+ if (xid.getFormatId() == formatId) {
+ byte[] gtx = xid.getGlobalTransactionId();
+ byte[] bql = xid.getBranchQualifier();
+ final int bqlength = (bql == null ? 0 : bql.length);
+
+ if ((gtrid.length == gtx.length) && (bqual.length == bqlength)) {
+ int i;
+
+ for (i = 0; i < gtrid.length; i++) {
+ if (gtrid[i] != gtx[i])
+ return false;
+ }
+
+ for (i = 0; i < bqual.length; i++) {
+ if (bqual[i] != bql[i])
+ return false;
+ }
+
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+ };
+ }
+
+ public Xid getXid() {
+ return xid;
+ }
+
+ @Override
+ public void start(Xid xid, int flags) throws XAException {
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_START [" + xid + "]");
+ this.xid = xid;
+ }
+
+ @Override
+ public void end(Xid xid, int flags) throws XAException {
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_END [" + xid + "]");
+ this.xid = null;
+ }
+
+ @Override
+ public synchronized int prepare(Xid xid) throws XAException {
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_PREPARE [" + xid + "]");
+
+ try {
+ File dir = new File(System.getProperty("user.dir") + "/tmp/ProxyXAResource/" + localServerName + "/");
+ dir.mkdirs();
+ file = new File(dir, new Uid().fileStringForm());
+
+ file.createNewFile();
+
+ final int formatId = xid.getFormatId();
+ final byte[] gtrid = xid.getGlobalTransactionId();
+ final int gtrid_length = gtrid.length;
+ final byte[] bqual = xid.getBranchQualifier();
+ final int bqual_length = bqual.length;
+
+ DataOutputStream fos = new DataOutputStream(new FileOutputStream(file));
+ fos.writeInt(formatId);
+ fos.writeInt(gtrid_length);
+ fos.write(gtrid, 0, gtrid_length);
+ fos.writeInt(bqual_length);
+ fos.write(bqual, 0, bqual_length);
+ fos.writeInt(remoteServerName);
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new XAException(XAException.XAER_RMERR);
+ }
+
+ try {
+ int propagatePrepare = SimpleIsolatedServers.lookup(remoteServerName).propagatePrepare(xid);
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_PREPARED");
+ return propagatePrepare;
+ } catch (DummyRemoteException ce) {
+ throw new XAException(XAException.XA_RETRY);
+ }
+ }
+
+ @Override
+ public synchronized void commit(Xid xid, boolean onePhase) throws XAException {
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_COMMIT [" + xid + "]");
+
+ try {
+ SimpleIsolatedServers.lookup(remoteServerName).propagateCommit(xid, onePhase);
+ 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);
+ }
+
+ if (file != null) {
+ file.delete();
+ }
+ }
+
+ @Override
+ public synchronized void rollback(Xid xid) throws XAException {
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_ROLLBACK[" + xid + "]");
+ try {
+ SimpleIsolatedServers.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);
+ }
+
+ if (file != null) {
+ file.delete();
+ }
+ }
+
+ @Override
+ public Xid[] recover(int flag) throws XAException {
+ List<Integer> startScanned = RECOVERY_SCAN_STARTED.get();
+ if (startScanned == null) {
+ startScanned = new ArrayList<Integer>();
+ RECOVERY_SCAN_STARTED.set(startScanned);
+ }
+
+ int tocheck = (flag & XAResource.TMSTARTRSCAN);
+ if (tocheck == XAResource.TMSTARTRSCAN) {
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_RECOVER [XAResource.TMSTARTRSCAN]: "
+ + remoteServerName);
+
+ if (!startScanned.contains(remoteServerName)) {
+ startScanned.add(remoteServerName);
+
+ // Make sure that the remote server has recovered all
+ // transactions
+ try {
+ SimpleIsolatedServers.lookup(remoteServerName).propagateRecover(startScanned, flag);
+ } catch (DummyRemoteException ce) {
+ throw new XAException(XAException.XA_RETRY);
+ } finally {
+ startScanned.remove((Integer) remoteServerName);
+ }
+ }
+
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_RECOVERD[XAResource.TMSTARTRSCAN]: "
+ + remoteServerName);
+ }
+ tocheck = (flag & XAResource.TMENDRSCAN);
+ if (tocheck == XAResource.TMENDRSCAN) {
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_RECOVER [XAResource.TMENDRSCAN]: "
+ + remoteServerName);
+
+ if (!startScanned.contains(remoteServerName)) {
+ try {
+ SimpleIsolatedServers.lookup(remoteServerName).propagateRecover(startScanned, flag);
+ } catch (DummyRemoteException ce) {
+ throw new XAException(XAException.XA_RETRY);
+ } finally {
+ startScanned.remove((Integer) remoteServerName);
+ }
+ }
+
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_RECOVERD[XAResource.TMENDRSCAN]: "
+ + remoteServerName);
+ }
+
+ return new Xid[] { xid };
+ }
+
+ @Override
+ public void forget(Xid xid) throws XAException {
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_FORGET [" + xid + "]");
+ try {
+ SimpleIsolatedServers.lookup(remoteServerName).propagateForget(xid);
+ System.out.println(" ProxyXAResource (" + localServerName + ":" + remoteServerName + ") XA_FORGETED[" + xid + "]");
+ } catch (DummyRemoteException ce) {
+ throw new XAException(XAException.XA_RETRY);
+ }
+ }
+
+ @Override
+ public int getTransactionTimeout() throws XAException {
+ return transactionTimeout;
+ }
+
+ @Override
+ public boolean setTransactionTimeout(int seconds) throws XAException {
+ this.transactionTimeout = seconds;
+ return true;
+ }
+
+ @Override
+ public boolean isSameRM(XAResource xares) throws XAException {
+ return xares.equals(this);
+ }
+
+ /**
+ * I don't think this is used by TM.
+ */
+ @Override
+ public XAResource getResource() {
+ return null;
+ }
+
+ /**
+ * I don't think this is used by TM.
+ */
+ @Override
+ public String getProductName() {
+ return null;
+ }
+
+ /**
+ * I don't think this is used by TM.
+ */
+ @Override
+ public String getProductVersion() {
+ return null;
+ }
+
+ @Override
+ public String getJndiName() {
+ return "ProxyXAResource";
+ }
+}
Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResourceRecovery.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ProxyXAResourceRecovery.java 2011-10-14 23:48:41 UTC (rev 37545)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ProxyXAResourceRecovery.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,4 +1,4 @@
-package com.arjuna.ats.jta.distributed.impl;
+package com.arjuna.ats.jta.distributed.server.impl;
import java.io.File;
import java.io.IOException;
Deleted: 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/impl/ServerImpl.java 2011-10-14 23:48:41 UTC (rev 37545)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -1,220 +0,0 @@
-package com.arjuna.ats.jta.distributed.impl;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.HashMap;
-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;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-
-import org.jboss.tm.TransactionTimeoutConfiguration;
-
-import com.arjuna.ats.arjuna.common.CoordinatorEnvironmentBean;
-import com.arjuna.ats.arjuna.common.CoreEnvironmentBean;
-import com.arjuna.ats.arjuna.common.CoreEnvironmentBeanException;
-import com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean;
-import com.arjuna.ats.arjuna.common.RecoveryEnvironmentBean;
-import com.arjuna.ats.arjuna.coordinator.TransactionReaper;
-import com.arjuna.ats.arjuna.coordinator.TxControl;
-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.transaction.arjunacore.TransactionImple;
-import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinateTransaction;
-import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinationManager;
-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.distributed.Server;
-import com.arjuna.ats.jta.distributed.TestResourceRecovery;
-
-public class ServerImpl implements Server {
-
- private int id;
- private RecoveryManagerService recoveryManagerService;
- private TransactionManagerService transactionManagerService;
-
- public void initialise(int id) throws CoreEnvironmentBeanException, IOException {
- this.id = id;
-
- RecoveryEnvironmentBean recoveryEnvironmentBean = com.arjuna.ats.arjuna.common.recoveryPropertyManager.getRecoveryEnvironmentBean();
- recoveryEnvironmentBean.setRecoveryBackoffPeriod(1);
-
- recoveryEnvironmentBean.setRecoveryInetAddress(InetAddress.getByName("localhost"));
- recoveryEnvironmentBean.setRecoveryPort(4712 + id);
- recoveryEnvironmentBean.setTransactionStatusManagerInetAddress(InetAddress.getByName("localhost"));
- recoveryEnvironmentBean.setTransactionStatusManagerPort(4713 + id);
- List<String> recoveryModuleClassNames = new ArrayList<String>();
-
- recoveryModuleClassNames.add("com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule");
- recoveryModuleClassNames.add("com.arjuna.ats.internal.txoj.recovery.TORecoveryModule");
- recoveryModuleClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule");
- recoveryEnvironmentBean.setRecoveryModuleClassNames(recoveryModuleClassNames);
- List<String> expiryScannerClassNames = new ArrayList<String>();
- expiryScannerClassNames.add("com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionStatusManagerScanner");
- recoveryEnvironmentBean.setExpiryScannerClassNames(expiryScannerClassNames);
- recoveryEnvironmentBean.setRecoveryActivators(null);
-
- CoreEnvironmentBean coreEnvironmentBean = com.arjuna.ats.arjuna.common.arjPropertyManager.getCoreEnvironmentBean();
- coreEnvironmentBean.setSocketProcessIdPort(4714 + id);
- coreEnvironmentBean.setNodeIdentifier(id);
- coreEnvironmentBean.setSocketProcessIdMaxPorts(1);
-
- CoordinatorEnvironmentBean coordinatorEnvironmentBean = com.arjuna.ats.arjuna.common.arjPropertyManager.getCoordinatorEnvironmentBean();
- coordinatorEnvironmentBean.setEnableStatistics(false);
- coordinatorEnvironmentBean.setDefaultTimeout(300);
- coordinatorEnvironmentBean.setTransactionStatusManagerEnable(false);
-
- ObjectStoreEnvironmentBean actionStoreObjectStoreEnvironmentBean = com.arjuna.common.internal.util.propertyservice.BeanPopulator.getNamedInstance(
- com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.class, "default");
- actionStoreObjectStoreEnvironmentBean.setObjectStoreDir(System.getProperty("user.dir") + "/tmp/tx-object-store/" + id);
-
- ObjectStoreEnvironmentBean stateStoreObjectStoreEnvironmentBean = com.arjuna.common.internal.util.propertyservice.BeanPopulator.getNamedInstance(
- com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.class, "stateStore");
- stateStoreObjectStoreEnvironmentBean.setObjectStoreDir(System.getProperty("user.dir") + "/tmp/tx-object-store/" + id);
-
- ObjectStoreEnvironmentBean communicationStoreObjectStoreEnvironmentBean = com.arjuna.common.internal.util.propertyservice.BeanPopulator
- .getNamedInstance(com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.class, "communicationStore");
- communicationStoreObjectStoreEnvironmentBean.setObjectStoreDir(System.getProperty("user.dir") + "/tmp/tx-object-store/" + id);
-
- ObjStoreBrowser objStoreBrowser = new ObjStoreBrowser();
- Map<String, String> types = new HashMap<String, String>();
- types.put("StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction", "com.arjuna.ats.internal.jta.tools.osb.mbean.jta.JTAActionBean");
- objStoreBrowser.setTypes(types);
-
- JTAEnvironmentBean jTAEnvironmentBean = com.arjuna.ats.jta.common.jtaPropertyManager.getJTAEnvironmentBean();
- jTAEnvironmentBean.setLastResourceOptimisationInterface(org.jboss.tm.LastResource.class);
- jTAEnvironmentBean.setTransactionManagerClassName("com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate");
- jTAEnvironmentBean.setUserTransactionClassName("com.arjuna.ats.internal.jta.transaction.arjunacore.UserTransactionImple");
- jTAEnvironmentBean
- .setTransactionSynchronizationRegistryClassName("com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple");
- List<Integer> xaRecoveryNodes = new ArrayList<Integer>();
- xaRecoveryNodes.add(id);
- jTAEnvironmentBean.setXaRecoveryNodes(xaRecoveryNodes);
-
- List<String> xaResourceOrphanFilterClassNames = new ArrayList<String>();
-
- xaResourceOrphanFilterClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter");
- xaResourceOrphanFilterClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter");
- // xaResourceOrphanFilterClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.ParentNodeNameXAResourceOrphanFilter");
- jTAEnvironmentBean.setXaResourceOrphanFilterClassNames(xaResourceOrphanFilterClassNames);
- jTAEnvironmentBean.setXAResourceRecordWrappingPlugin(new XAResourceRecordWrappingPluginImpl());
-
- recoveryManagerService = new RecoveryManagerService();
-// recoveryManagerService.create();
- RecoveryManager.delayRecoveryManagerThread();
- RecoveryManager.manager();
- recoveryManagerService.addXAResourceRecovery(new ProxyXAResourceRecovery(id));
- recoveryManagerService.addXAResourceRecovery(new TestResourceRecovery(id));
- // recoveryManagerService.start();
- RecoveryManager.manager().initialize();
-
- transactionManagerService = new TransactionManagerService();
- TxControl txControl = new com.arjuna.ats.arjuna.coordinator.TxControl();
- txControl.setDefaultTimeout(0);
- transactionManagerService.setJbossXATerminator(new com.arjuna.ats.internal.jbossatx.jta.jca.XATerminator());
- transactionManagerService
- .setTransactionSynchronizationRegistry(new com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple());
- // starts the transaction reaper transactionManagerService.create();
-
- }
-
- public void doRecoveryManagerScan() {
- RecoveryManager.manager().scan();
- }
-
- public void startTransactionReaper() {
- TransactionReaper.transactionReaper();
- }
-
- public TransactionManager getTransactionManager() {
- return transactionManagerService.getTransactionManager();
- }
-
- @Override
- public boolean importTransaction(int remainingTimeout, Xid toResume) throws XAException, InvalidTransactionException, IllegalStateException,
- SystemException {
- boolean existed = true;
- SubordinateTransaction importTransaction = SubordinationManager.getTransactionImporter().getImportedTransaction(toResume);
- if (importTransaction == null) {
- importTransaction = SubordinationManager.getTransactionImporter().importTransaction(toResume, remainingTimeout);
- existed = false;
- }
- getTransactionManager().resume(importTransaction);
- return existed;
- }
-
- @Override
- public int propagatePrepare(Xid xid) throws XAException {
- return SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doPrepare();
- }
-
- @Override
- public void propagateCommit(Xid xid, boolean onePhase) throws IllegalStateException, HeuristicMixedException, HeuristicRollbackException,
- HeuristicCommitException, SystemException, XAException {
- SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doCommit();
- }
-
- @Override
- public void propagateRollback(Xid xid) throws IllegalStateException, HeuristicMixedException, HeuristicCommitException, HeuristicRollbackException,
- SystemException, XAException {
- SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doRollback();
- }
-
- @Override
- public Xid[] propagateRecover(List<Integer> recoveryScanStarted, int flag) throws XAException {
- // Assumes that this thread is used by the recovery thread
- ProxyXAResource.RECOVERY_SCAN_STARTED.set(recoveryScanStarted);
- return SubordinationManager.getXATerminator().recover(flag);
- }
-
- @Override
- public void propagateForget(Xid xid) throws XAException {
- SubordinationManager.getXATerminator().forget(xid);
-
- }
-
- @Override
- public int getNodeName() {
- return TxControl.getXANodeName();
- }
-
- @Override
- public long getTimeLeftBeforeTransactionTimeout() throws RollbackException {
- return ((TransactionTimeoutConfiguration) transactionManagerService.getTransactionManager()).getTimeLeftBeforeTransactionTimeout(false);
- }
-
- @Override
- public void propagateBeforeCompletion(Xid xid) throws XAException, SystemException {
- SubordinateTransaction tx = SubordinationManager.getTransactionImporter().getImportedTransaction(xid);
- tx.doBeforeCompletion();
- }
-
- @Override
- public Xid getCurrentXid() throws SystemException {
- TransactionImple transaction = ((TransactionImple) transactionManagerService.getTransactionManager().getTransaction());
- return transaction.getTxId();
- }
-
- @Override
- public XAResource generateProxyXAResource(int currentNodeName, int nextNodeName) {
- return new ProxyXAResource(currentNodeName, nextNodeName);
- }
-
- @Override
- public Synchronization generateProxySynchronization(int serverId, int serverIdToProxyTo, Xid toRegisterAgainst) {
- return new ProxySynchronization(serverId, serverIdToProxyTo, toRegisterAgainst);
- }
-}
Copied: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java (from rev 37552, labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/impl/ServerImpl.java)
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/atsintegration/tests/classes/com/arjuna/ats/jta/distributed/server/impl/ServerImpl.java 2011-10-15 11:55:21 UTC (rev 37553)
@@ -0,0 +1,246 @@
+package com.arjuna.ats.jta.distributed.server.impl;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.HashMap;
+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;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+import org.jboss.tm.TransactionTimeoutConfiguration;
+
+import com.arjuna.ats.arjuna.common.CoordinatorEnvironmentBean;
+import com.arjuna.ats.arjuna.common.CoreEnvironmentBean;
+import com.arjuna.ats.arjuna.common.CoreEnvironmentBeanException;
+import com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean;
+import com.arjuna.ats.arjuna.common.RecoveryEnvironmentBean;
+import com.arjuna.ats.arjuna.coordinator.TxControl;
+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.transaction.arjunacore.TransactionImple;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinateTransaction;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.jca.SubordinationManager;
+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.distributed.TestResourceRecovery;
+import com.arjuna.ats.jta.distributed.server.DummyRemoteException;
+import com.arjuna.ats.jta.distributed.server.LocalServer;
+import com.arjuna.ats.jta.distributed.server.RemoteServer;
+
+public class ServerImpl implements LocalServer, RemoteServer {
+
+ private int nodeName;
+ private RecoveryManagerService recoveryManagerService;
+ private TransactionManagerService transactionManagerService;
+ private boolean offline;
+
+ public void initialise(Integer serverName) throws CoreEnvironmentBeanException, IOException {
+ this.nodeName = serverName;
+
+ RecoveryEnvironmentBean recoveryEnvironmentBean = com.arjuna.ats.arjuna.common.recoveryPropertyManager.getRecoveryEnvironmentBean();
+ recoveryEnvironmentBean.setRecoveryBackoffPeriod(1);
+
+ recoveryEnvironmentBean.setRecoveryInetAddress(InetAddress.getByName("localhost"));
+ recoveryEnvironmentBean.setRecoveryPort(4712 + serverName);
+ recoveryEnvironmentBean.setTransactionStatusManagerInetAddress(InetAddress.getByName("localhost"));
+ recoveryEnvironmentBean.setTransactionStatusManagerPort(4713 + serverName);
+ List<String> recoveryModuleClassNames = new ArrayList<String>();
+
+ recoveryModuleClassNames.add("com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule");
+ recoveryModuleClassNames.add("com.arjuna.ats.internal.txoj.recovery.TORecoveryModule");
+ recoveryModuleClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule");
+ recoveryEnvironmentBean.setRecoveryModuleClassNames(recoveryModuleClassNames);
+ List<String> expiryScannerClassNames = new ArrayList<String>();
+ expiryScannerClassNames.add("com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionStatusManagerScanner");
+ recoveryEnvironmentBean.setExpiryScannerClassNames(expiryScannerClassNames);
+ recoveryEnvironmentBean.setRecoveryActivators(null);
+
+ CoreEnvironmentBean coreEnvironmentBean = com.arjuna.ats.arjuna.common.arjPropertyManager.getCoreEnvironmentBean();
+ coreEnvironmentBean.setSocketProcessIdPort(4714 + serverName);
+ coreEnvironmentBean.setNodeIdentifier(serverName);
+ coreEnvironmentBean.setSocketProcessIdMaxPorts(1);
+
+ CoordinatorEnvironmentBean coordinatorEnvironmentBean = com.arjuna.ats.arjuna.common.arjPropertyManager.getCoordinatorEnvironmentBean();
+ coordinatorEnvironmentBean.setEnableStatistics(false);
+ coordinatorEnvironmentBean.setDefaultTimeout(300);
+ coordinatorEnvironmentBean.setTransactionStatusManagerEnable(false);
+ coordinatorEnvironmentBean.setDefaultTimeout(0);
+
+ ObjectStoreEnvironmentBean actionStoreObjectStoreEnvironmentBean = com.arjuna.common.internal.util.propertyservice.BeanPopulator.getNamedInstance(
+ com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.class, "default");
+ actionStoreObjectStoreEnvironmentBean.setObjectStoreDir(System.getProperty("user.dir") + "/tmp/tx-object-store/" + serverName);
+
+ ObjectStoreEnvironmentBean stateStoreObjectStoreEnvironmentBean = com.arjuna.common.internal.util.propertyservice.BeanPopulator.getNamedInstance(
+ com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.class, "stateStore");
+ stateStoreObjectStoreEnvironmentBean.setObjectStoreDir(System.getProperty("user.dir") + "/tmp/tx-object-store/" + serverName);
+
+ ObjectStoreEnvironmentBean communicationStoreObjectStoreEnvironmentBean = com.arjuna.common.internal.util.propertyservice.BeanPopulator
+ .getNamedInstance(com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.class, "communicationStore");
+ communicationStoreObjectStoreEnvironmentBean.setObjectStoreDir(System.getProperty("user.dir") + "/tmp/tx-object-store/" + serverName);
+
+ ObjStoreBrowser objStoreBrowser = new ObjStoreBrowser();
+ Map<String, String> types = new HashMap<String, String>();
+ types.put("StateManager/BasicAction/TwoPhaseCoordinator/AtomicAction", "com.arjuna.ats.internal.jta.tools.osb.mbean.jta.JTAActionBean");
+ objStoreBrowser.setTypes(types);
+
+ JTAEnvironmentBean jTAEnvironmentBean = com.arjuna.ats.jta.common.jtaPropertyManager.getJTAEnvironmentBean();
+ jTAEnvironmentBean.setLastResourceOptimisationInterface(org.jboss.tm.LastResource.class);
+ jTAEnvironmentBean.setTransactionManagerClassName("com.arjuna.ats.jbossatx.jta.TransactionManagerDelegate");
+ jTAEnvironmentBean.setUserTransactionClassName("com.arjuna.ats.internal.jta.transaction.arjunacore.UserTransactionImple");
+ jTAEnvironmentBean
+ .setTransactionSynchronizationRegistryClassName("com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple");
+ List<Integer> xaRecoveryNodes = new ArrayList<Integer>();
+ xaRecoveryNodes.add(serverName);
+ jTAEnvironmentBean.setXaRecoveryNodes(xaRecoveryNodes);
+
+ List<String> xaResourceOrphanFilterClassNames = new ArrayList<String>();
+
+ xaResourceOrphanFilterClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter");
+ xaResourceOrphanFilterClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter");
+ // xaResourceOrphanFilterClassNames.add("com.arjuna.ats.internal.jta.recovery.arjunacore.ParentNodeNameXAResourceOrphanFilter");
+ jTAEnvironmentBean.setXaResourceOrphanFilterClassNames(xaResourceOrphanFilterClassNames);
+ jTAEnvironmentBean.setXAResourceRecordWrappingPlugin(new XAResourceRecordWrappingPluginImpl());
+
+ recoveryManagerService = new RecoveryManagerService();
+ recoveryManagerService.create();
+ recoveryManagerService.addXAResourceRecovery(new ProxyXAResourceRecovery(serverName));
+ recoveryManagerService.addXAResourceRecovery(new TestResourceRecovery(serverName));
+ // recoveryManagerService.start();
+ RecoveryManager.manager().initialize();
+
+ transactionManagerService = new TransactionManagerService();
+ TxControl txControl = new com.arjuna.ats.arjuna.coordinator.TxControl();
+ transactionManagerService.setJbossXATerminator(new com.arjuna.ats.internal.jbossatx.jta.jca.XATerminator());
+ transactionManagerService
+ .setTransactionSynchronizationRegistry(new com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionSynchronizationRegistryImple());
+ transactionManagerService.create();
+
+ }
+
+ @Override
+ public void doRecoveryManagerScan() {
+ RecoveryManager.manager().scan();
+ }
+
+ @Override
+ public TransactionManager getTransactionManager() {
+ return transactionManagerService.getTransactionManager();
+ }
+
+ @Override
+ public boolean importTransaction(int remainingTimeout, Xid toResume) throws XAException, InvalidTransactionException, IllegalStateException,
+ SystemException {
+ boolean existed = true;
+ SubordinateTransaction importTransaction = SubordinationManager.getTransactionImporter().getImportedTransaction(toResume);
+ if (importTransaction == null) {
+ importTransaction = SubordinationManager.getTransactionImporter().importTransaction(toResume, remainingTimeout);
+ existed = false;
+ }
+ getTransactionManager().resume(importTransaction);
+ return existed;
+ }
+
+ @Override
+ public Integer getNodeName() {
+ return nodeName;
+ }
+
+ @Override
+ public long getTimeLeftBeforeTransactionTimeout() throws RollbackException {
+ return ((TransactionTimeoutConfiguration) transactionManagerService.getTransactionManager()).getTimeLeftBeforeTransactionTimeout(false);
+ }
+
+ @Override
+ public Xid getCurrentXid() throws SystemException {
+ TransactionImple transaction = ((TransactionImple) transactionManagerService.getTransactionManager().getTransaction());
+ return transaction.getTxId();
+ }
+
+ @Override
+ public XAResource generateProxyXAResource(Integer localServerName, Integer remoteServerName) {
+ return new ProxyXAResource(localServerName, remoteServerName);
+ }
+
+ @Override
+ public Synchronization generateProxySynchronization(Integer localServerName, Integer remoteServerName, Xid toRegisterAgainst) {
+ return new ProxySynchronization(localServerName, remoteServerName, toRegisterAgainst);
+ }
+
+ @Override
+ public void setOffline(boolean offline) {
+ this.offline = offline;
+ }
+
+ @Override
+ public RemoteServer connectTo() {
+ return this;
+ }
+
+ @Override
+ public int propagatePrepare(Xid xid) throws XAException, DummyRemoteException {
+ if (offline) {
+ throw new DummyRemoteException("Connection refused to: " + nodeName);
+ }
+ return SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doPrepare();
+ }
+
+ @Override
+ public void propagateCommit(Xid xid, boolean onePhase) throws IllegalStateException, HeuristicMixedException, HeuristicRollbackException,
+ HeuristicCommitException, SystemException, XAException, DummyRemoteException {
+ if (offline) {
+ throw new DummyRemoteException("Connection refused to: " + nodeName);
+ }
+ SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doCommit();
+ }
+
+ @Override
+ public void propagateRollback(Xid xid) throws IllegalStateException, HeuristicMixedException, HeuristicCommitException, HeuristicRollbackException,
+ SystemException, XAException, DummyRemoteException {
+ if (offline) {
+ throw new DummyRemoteException("Connection refused to: " + nodeName);
+ }
+ SubordinationManager.getTransactionImporter().getImportedTransaction(xid).doRollback();
+ }
+
+ @Override
+ public Xid[] propagateRecover(List<Integer> recoveryScanStarted, int flag) throws XAException, DummyRemoteException {
+ if (offline) {
+ throw new DummyRemoteException("Connection refused to: " + nodeName);
+ }
+ // Assumes that this thread is used by the recovery thread
+ ProxyXAResource.RECOVERY_SCAN_STARTED.set(recoveryScanStarted);
+ return SubordinationManager.getXATerminator().recover(flag);
+ }
+
+ @Override
+ public void propagateForget(Xid xid) throws XAException, DummyRemoteException {
+ if (offline) {
+ throw new DummyRemoteException("Connection refused to: " + nodeName);
+ }
+ SubordinationManager.getXATerminator().forget(xid);
+
+ }
+
+ @Override
+ public void propagateBeforeCompletion(Xid xid) throws XAException, SystemException, DummyRemoteException {
+ if (offline) {
+ throw new DummyRemoteException("Connection refused to: " + nodeName);
+ }
+ SubordinateTransaction tx = SubordinationManager.getTransactionImporter().getImportedTransaction(xid);
+ tx.doBeforeCompletion();
+ }
+}
More information about the jboss-svn-commits
mailing list