[jboss-svn-commits] JBL Code SVN: r38070 - labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 3 11:45:46 EDT 2012


Author: tomjenkinson
Date: 2012-05-03 11:45:45 -0400 (Thu, 03 May 2012)
New Revision: 38070

Added:
   labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/CrashRecoveryCommitReturnsXA_RETRY.java
   labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/SimpleResource.java
   labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/SimpleResourceXA_RETRY.java
Log:
JBTM-649 added a test to show that recovery will commit XA_RETRY resources

Added: labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/CrashRecoveryCommitReturnsXA_RETRY.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/CrashRecoveryCommitReturnsXA_RETRY.java	                        (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/CrashRecoveryCommitReturnsXA_RETRY.java	2012-05-03 15:45:45 UTC (rev 38070)
@@ -0,0 +1,121 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (C) 2004,
+ *
+ * Arjuna Technologies Ltd,
+ * Newcastle upon Tyne,
+ * Tyne and Wear,
+ * UK.
+ *
+ * $Id: CrashRecovery.java 2342 2006-03-30 13:06:17Z  $
+ */
+
+package com.hp.mwtests.ts.jta.recovery;
+
+import java.util.Vector;
+
+import javax.transaction.xa.XAResource;
+
+import junit.framework.TestCase;
+
+import com.arjuna.ats.arjuna.recovery.RecoveryEnvironment;
+import com.arjuna.ats.arjuna.recovery.RecoveryManager;
+import com.arjuna.ats.arjuna.recovery.RecoveryModule;
+import com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule;
+import com.arjuna.ats.jta.recovery.XAResourceRecoveryHelper;
+
+public class CrashRecoveryCommitReturnsXA_RETRY extends TestCase {
+	public void test() throws Exception {
+		// this test is supposed to leave a record around in the log store
+		// during a commit long enough
+		// that the periodic recovery thread runs and detects it.
+
+		System.setProperty(
+				com.arjuna.ats.arjuna.common.Environment.RECOVERY_BACKOFF_PERIOD,
+				"1");
+		System.setProperty(
+				com.arjuna.ats.arjuna.common.Environment.PERIODIC_RECOVERY_PERIOD,
+				"1");
+
+		System.setProperty(RecoveryEnvironment.MODULE_PROPERTY_PREFIX + ".1",
+				"com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule");
+		System.setProperty(RecoveryEnvironment.MODULE_PROPERTY_PREFIX + ".2",
+				"com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule");
+		RecoveryManager.manager().initialize();
+
+		XARecoveryModule xaRecoveryModule = null;
+		for (RecoveryModule recoveryModule : ((Vector<RecoveryModule>) RecoveryManager
+				.manager().getModules())) {
+			if (recoveryModule instanceof XARecoveryModule) {
+				xaRecoveryModule = (XARecoveryModule) recoveryModule;
+				break;
+			}
+		}
+
+		if (xaRecoveryModule == null) {
+			throw new Exception("No XARM");
+		}
+
+		XAResource firstResource = new SimpleResource();
+		Object toWakeUp = new Object();
+		final SimpleResourceXA_RETRY secondResource = new SimpleResourceXA_RETRY(
+				toWakeUp);
+
+		xaRecoveryModule
+				.addXAResourceRecoveryHelper(new XAResourceRecoveryHelper() {
+
+					@Override
+					public boolean initialise(String p) throws Exception {
+						// TODO Auto-generated method stub
+						return true;
+					}
+
+					@Override
+					public XAResource[] getXAResources() throws Exception {
+						// TODO Auto-generated method stub
+						return new XAResource[] { secondResource };
+					}
+				});
+
+		// ok, now drive a TX to completion. the script should ensure that the
+		// recovery
+
+		javax.transaction.TransactionManager tm = com.arjuna.ats.jta.TransactionManager
+				.transactionManager();
+
+		tm.begin();
+
+		javax.transaction.Transaction theTransaction = tm.getTransaction();
+
+		theTransaction.enlistResource(firstResource);
+		theTransaction.enlistResource(secondResource);
+
+		assertFalse(secondResource.wasCommitted());
+
+		tm.commit();
+
+		synchronized (toWakeUp) {
+			toWakeUp.wait();
+		}
+		assertTrue(secondResource.wasCommitted());
+	}
+}

Added: labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/SimpleResource.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/SimpleResource.java	                        (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/SimpleResource.java	2012-05-03 15:45:45 UTC (rev 38070)
@@ -0,0 +1,68 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors 
+ * as indicated by the @author tags. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package com.hp.mwtests.ts.jta.recovery;
+
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+public class SimpleResource implements XAResource {
+
+	public void commit(Xid xid, boolean onePhase) throws XAException {
+		System.out.println("SimpleResource commit called: " + xid);
+	}
+
+	public void end(Xid xid, int flags) throws XAException {
+	}
+
+	public void forget(Xid xid) throws XAException {
+	}
+
+	public int getTransactionTimeout() throws XAException {
+		return 0;
+	}
+
+	public boolean isSameRM(XAResource xares) throws XAException {
+		return false;
+	}
+
+	public int prepare(Xid xid) throws XAException {
+		System.out.println("SimpleResource prepare called: " + xid);
+		return XA_OK;
+	}
+
+	public Xid[] recover(int flag) throws XAException {
+		return null;
+	}
+
+	public void rollback(Xid xid) throws XAException {
+		System.out.println("SimpleResource ROLLBACK called: " + xid);
+		throw new XAException("WASN't EXPECTING THAT!");
+	}
+
+	public boolean setTransactionTimeout(int seconds) throws XAException {
+		return true;
+	}
+
+	public void start(Xid xid, int flags) throws XAException {
+	}
+
+}

Added: labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/SimpleResourceXA_RETRY.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/SimpleResourceXA_RETRY.java	                        (rev 0)
+++ labs/jbosstm/branches/JBOSSTS_4_6_1_GA_CP/ArjunaJTA/jta/tests/classes/com/hp/mwtests/ts/jta/recovery/SimpleResourceXA_RETRY.java	2012-05-03 15:45:45 UTC (rev 38070)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors 
+ * as indicated by the @author tags. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package com.hp.mwtests.ts.jta.recovery;
+
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+public class SimpleResourceXA_RETRY implements XAResource {
+	private Xid xid;
+	private boolean firstAttemptToCommit = true;
+	private boolean committed = false;
+	private Object toWakeUp;
+
+	public SimpleResourceXA_RETRY(Object toWakeUp) {
+		this.toWakeUp = toWakeUp;
+	}
+
+	public void commit(Xid xid, boolean onePhase) throws XAException {
+		System.out.println("SimpleResourceXA_RETRY commit called: " + xid);
+		if (firstAttemptToCommit) {
+			firstAttemptToCommit = false;
+			System.out.println("Returning XA_RETRY first time");
+			throw new XAException(XAException.XA_RETRY);
+		}
+		xid = null;
+		committed = true;
+		synchronized (toWakeUp) {
+			toWakeUp.notify();
+		}
+	}
+
+	public void end(Xid xid, int flags) throws XAException {
+	}
+
+	public void forget(Xid xid) throws XAException {
+	}
+
+	public int getTransactionTimeout() throws XAException {
+		return 0;
+	}
+
+	public boolean isSameRM(XAResource xares) throws XAException {
+		return false;
+	}
+
+	public int prepare(Xid xid) throws XAException {
+		System.out.println("SimpleResourceXA_RETRY prepare called: " + xid);
+		this.xid = xid;
+		return XA_OK;
+	}
+
+	public Xid[] recover(int flag) throws XAException {
+		if (xid != null) {
+			return new Xid[] { xid };
+		}
+		return null;
+	}
+
+	public void rollback(Xid xid) throws XAException {
+		System.out.println("SimpleResourceXA_RETRY ROLLBACK called: " + xid);
+		throw new XAException("SimpleResourceXA_RETRY WASN't EXPECTING THAT!");
+	}
+
+	public boolean setTransactionTimeout(int seconds) throws XAException {
+		return true;
+	}
+
+	public void start(Xid xid, int flags) throws XAException {
+	}
+
+	public boolean wasCommitted() {
+		// TODO Auto-generated method stub
+		return committed;
+	}
+
+}



More information about the jboss-svn-commits mailing list