[jboss-svn-commits] JBL Code SVN: r37632 - labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Oct 20 09:44:53 EDT 2011
Author: tomjenkinson
Date: 2011-10-20 09:44:52 -0400 (Thu, 20 Oct 2011)
New Revision: 37632
Modified:
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/TransactionImporterImple.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java
Log:
JBTM-932 updated to allow the recover call to recover in flight transactions when enabled
Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/TransactionImporterImple.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/TransactionImporterImple.java 2011-10-20 12:37:51 UTC (rev 37631)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/TransactionImporterImple.java 2011-10-20 13:44:52 UTC (rev 37632)
@@ -31,6 +31,8 @@
package com.arjuna.ats.internal.jta.transaction.arjunacore.jca;
+import java.util.HashSet;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.transaction.SystemException;
@@ -93,7 +95,7 @@
{
imported = new TransactionImple(timeout, xid);
- _transactions.put(new SubordinateXidImple(xid), imported);
+ _transactions.put(new SubordinateXidImple(imported.baseXid()), imported);
}
return imported;
@@ -206,6 +208,13 @@
_transactions.remove(new SubordinateXidImple(xid));
}
+
+ public Set<SubordinateXidImple> getInflightXids() {
+ Set<SubordinateXidImple> keySet = _transactions.keySet();
+ Set<SubordinateXidImple> toReturn = new HashSet<SubordinateXidImple>();
+ toReturn.addAll(keySet);
+ return toReturn;
+ }
private static ConcurrentHashMap<SubordinateXidImple, SubordinateTransaction> _transactions = new ConcurrentHashMap<SubordinateXidImple, SubordinateTransaction>();
}
Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java 2011-10-20 12:37:51 UTC (rev 37631)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java 2011-10-20 13:44:52 UTC (rev 37632)
@@ -32,10 +32,18 @@
package com.arjuna.ats.internal.jta.transaction.arjunacore.jca;
import java.io.IOException;
+import java.util.Iterator;
+import java.util.Set;
import java.util.Stack;
-import javax.transaction.*;
-import javax.transaction.xa.*;
+import javax.transaction.HeuristicCommitException;
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
import com.arjuna.ats.arjuna.common.Uid;
import com.arjuna.ats.arjuna.coordinator.TwoPhaseOutcome;
@@ -46,6 +54,7 @@
import com.arjuna.ats.internal.jta.recovery.arjunacore.NodeNameXAResourceOrphanFilter;
import com.arjuna.ats.internal.jta.resources.spi.XATerminatorExtensions;
import com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.jca.SubordinateAtomicAction;
+import com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.jca.TransactionImple;
import com.arjuna.ats.jta.exceptions.UnexpectedConditionException;
import com.arjuna.ats.jta.logging.jtaLogger;
import com.arjuna.ats.jta.xa.XATxConverter;
@@ -326,7 +335,7 @@
}
// if we are here, then check the object store
- return doRecover(0);
+ return doRecover(0, false);
}
/**
@@ -341,7 +350,7 @@
* @return a list of potentially indoubt transactions or <code>null</code>.
*/
- public synchronized Xid[] doRecover (Integer parentNodeName) throws XAException
+ public synchronized Xid[] doRecover (Integer parentNodeName, boolean recoverInflightTransactions) throws XAException
{
/*
* Requires going through the objectstore for the states of imported
@@ -361,7 +370,7 @@
if (recoveryStore.allObjUids(SubordinateAtomicAction.getType(), states)
&& (states.notempty()))
{
- Stack values = new Stack();
+ Stack<Xid> values = new Stack<Xid>();
boolean finished = false;
do
@@ -388,10 +397,10 @@
if (jtaLogger.logger.isDebugEnabled()) {
jtaLogger.logger.debug("Found record for " + saa);
}
- Transaction tx = SubordinationManager.getTransactionImporter().recoverTransaction(uid);
+ TransactionImple tx = (TransactionImple)SubordinationManager.getTransactionImporter().recoverTransaction(uid);
if (tx != null)
- values.push(tx);
+ values.push(tx.baseXid());
}
}
else
@@ -400,6 +409,19 @@
}
while (!finished);
+
+ if (recoverInflightTransactions) {
+ Set<SubordinateXidImple> inflightXids = ((TransactionImporterImple) SubordinationManager.getTransactionImporter()).getInflightXids();
+ Iterator<SubordinateXidImple> iterator = inflightXids.iterator();
+ while (iterator.hasNext()) {
+ SubordinateXidImple next = iterator.next();
+ if (parentNodeName.equals(NodeNameXAResourceOrphanFilter.RECOVER_ALL_NODES)
+ || parentNodeName.equals(XATxConverter.getParentNodeName(next.getXID()))) {
+ values.push(next);
+ }
+ }
+ }
+
if (values.size() > 0)
{
int index = 0;
@@ -408,10 +430,7 @@
while (!values.empty())
{
- com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.jca.TransactionImple tx = (com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.jca.TransactionImple) values
- .pop();
-
- indoubt[index] = tx.baseXid();
+ indoubt[index] = values.pop();
index++;
}
}
More information about the jboss-svn-commits
mailing list