[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