[jboss-svn-commits] JBL Code SVN: r37576 - in labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta: transaction/arjunacore/subordinate/jca and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Oct 17 10:38:55 EDT 2011
Author: tomjenkinson
Date: 2011-10-17 10:38:54 -0400 (Mon, 17 Oct 2011)
New Revision: 37576
Modified:
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/SubordinateJTAXAResourceOrphanFilter.java
labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/subordinate/jca/SubordinateAtomicAction.java
Log:
JBTM-917 updated to add an ability to peek at the XID stored in the subordinate transaction to check if the subordinate XAR is part of a known subordinate transaction
Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/SubordinateJTAXAResourceOrphanFilter.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/SubordinateJTAXAResourceOrphanFilter.java 2011-10-17 14:20:52 UTC (rev 37575)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/recovery/arjunacore/SubordinateJTAXAResourceOrphanFilter.java 2011-10-17 14:38:54 UTC (rev 37576)
@@ -20,14 +20,18 @@
*/
package com.arjuna.ats.internal.jta.recovery.arjunacore;
+import java.io.IOException;
import java.util.List;
+import java.util.Stack;
import javax.transaction.xa.Xid;
import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.exceptions.ObjectStoreException;
import com.arjuna.ats.arjuna.objectstore.RecoveryStore;
-import com.arjuna.ats.arjuna.objectstore.StateStatus;
import com.arjuna.ats.arjuna.objectstore.StoreManager;
+import com.arjuna.ats.arjuna.state.InputObjectState;
+import com.arjuna.ats.internal.arjuna.common.UidHelper;
import com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.jca.SubordinateAtomicAction;
import com.arjuna.ats.internal.jta.utils.XAUtils;
import com.arjuna.ats.jta.common.jtaPropertyManager;
@@ -81,8 +85,6 @@
* <code>false</code> if there isn't.
*/
private boolean transactionLog(Xid xid) {
- RecoveryStore recoveryStore = StoreManager.getRecoveryStore();
- String transactionType = SubordinateAtomicAction.getType();
XidImple theXid = new XidImple(xid);
Uid u = theXid.getTransactionUid();
@@ -92,30 +94,56 @@
}
if (!u.equals(Uid.nullUid())) {
+ RecoveryStore recoveryStore = StoreManager.getRecoveryStore();
+ String transactionType = SubordinateAtomicAction.getType();
+
+ if (jtaLogger.logger.isDebugEnabled()) {
+ jtaLogger.logger.debug("Looking for " + u + " and " + transactionType);
+ }
+
+ InputObjectState states = new InputObjectState();
try {
+ if (recoveryStore.allObjUids(transactionType, states) && (states.notempty())) {
+ Stack values = new Stack();
+ boolean finished = false;
- if (jtaLogger.logger.isDebugEnabled()) {
- jtaLogger.logger.debug("Looking for " + u + " and " + transactionType);
- }
+ do {
+ Uid uid = null;
- if (recoveryStore.currentState(u, transactionType) != StateStatus.OS_UNKNOWN) {
- if (jtaLogger.logger.isDebugEnabled()) {
- jtaLogger.logger.debug("Found record for " + theXid);
- }
+ try {
+ uid = UidHelper.unpackFrom(states);
+ } catch (IOException ex) {
+ ex.printStackTrace();
- return true;
- } else {
+ finished = true;
+ }
+
+ if (uid.notEquals(Uid.nullUid())) {
+ SubordinateAtomicAction tx = new SubordinateAtomicAction(uid, true);
+ if (((XidImple)tx.getXid()).isSameTransaction(xid)) {
+ if (jtaLogger.logger.isDebugEnabled()) {
+ jtaLogger.logger.debug("Found record for " + theXid);
+ }
+ return true;
+ }
+ } else
+ finished = true;
+
+ } while (!finished);
if (jtaLogger.logger.isDebugEnabled()) {
jtaLogger.logger.debug("No record found for " + theXid);
}
+ } else {
+ jtaLogger.i18NLogger.info_recovery_notaxid(XAHelper.xidToString(xid));
}
- } catch (Exception ex) {
- ex.printStackTrace();
+ } catch (ObjectStoreException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
}
- } else {
- jtaLogger.i18NLogger.info_recovery_notaxid(XAHelper.xidToString(xid));
}
-
return false;
}
}
Modified: labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/subordinate/jca/SubordinateAtomicAction.java
===================================================================
--- labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/subordinate/jca/SubordinateAtomicAction.java 2011-10-17 14:20:52 UTC (rev 37575)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/subordinate/jca/SubordinateAtomicAction.java 2011-10-17 14:38:54 UTC (rev 37576)
@@ -33,6 +33,8 @@
import javax.transaction.xa.Xid;
import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.exceptions.ObjectStoreException;
+import com.arjuna.ats.arjuna.objectstore.StoreManager;
import com.arjuna.ats.arjuna.state.InputObjectState;
import com.arjuna.ats.arjuna.state.OutputObjectState;
import com.arjuna.ats.jta.xa.XidImple;
@@ -65,6 +67,22 @@
_activated = activate(); // if this fails, we'll retry later.
}
+ public SubordinateAtomicAction(Uid actId, boolean peekXidOnly) throws ObjectStoreException, IOException {
+ super(actId);
+ if (peekXidOnly) {
+ InputObjectState os = StoreManager.getParticipantStore().read_committed(objectUid, type());
+ boolean haveXid = os.unpackBoolean();
+
+ if (haveXid) {
+ _theXid = new XidImple();
+
+ ((XidImple) _theXid).unpackFrom(os);
+ }
+ } else {
+ _activated = activate();
+ }
+ }
+
public SubordinateAtomicAction (int timeout, Xid xid)
{
super(timeout); // implicit start (done in base class)
More information about the jboss-svn-commits
mailing list