[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