[jboss-svn-commits] JBL Code SVN: r37579 - 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
Mon Oct 17 15:11:35 EDT 2011


Author: tomjenkinson
Date: 2011-10-17 15:11:35 -0400 (Mon, 17 Oct 2011)
New Revision: 37579

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-927 updated to throw a rollback exception if the TransactionReaper has rolled back the transaction

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-17 16:53:10 UTC (rev 37578)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/TransactionImporterImple.java	2011-10-17 19:11:35 UTC (rev 37579)
@@ -33,6 +33,7 @@
 
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.transaction.SystemException;
 import javax.transaction.xa.XAException;
 import javax.transaction.xa.Xid;
 
@@ -167,6 +168,16 @@
 
 		if (tx == null)
 			return null;
+		
+		// JBTM-917
+		try {
+			if (tx.getStatus() == javax.transaction.Status.STATUS_ROLLEDBACK) {
+				throw new XAException(XAException.XA_RBROLLBACK);
+			}
+		} catch (SystemException e) {
+			e.printStackTrace();
+			throw new XAException(XAException.XA_RBROLLBACK);
+		}
 
 		if (!tx.activated())
 		{

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-17 16:53:10 UTC (rev 37578)
+++ labs/jbosstm/branches/JBOSSTS_4_15_0_Final/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/jca/XATerminatorImple.java	2011-10-17 19:11:35 UTC (rev 37579)
@@ -200,10 +200,19 @@
 
     public int prepare (Xid xid) throws XAException
     {
+
+    	// JBTM-927 this can happen if the transaction has been rolled back by the TransactionReaper
+		SubordinateTransaction tx = null;
+		try {
+			tx = SubordinationManager.getTransactionImporter().getImportedTransaction(xid);
+		} catch (XAException xae) {
+			if (xae.errorCode == XAException.XA_RBROLLBACK) {
+				SubordinationManager.getTransactionImporter().removeImportedTransaction(xid);
+			}
+			throw xae;
+		}
         try
         {
-            SubordinateTransaction tx = SubordinationManager
-                    .getTransactionImporter().getImportedTransaction(xid);
 
             if (tx == null)
                 throw new XAException(XAException.XAER_INVAL);
@@ -395,10 +404,20 @@
 
     public void rollback (Xid xid) throws XAException
     {
+		// JBTM-927 this can happen if the transaction has been rolled back by
+		// the TransactionReaper
+		SubordinateTransaction tx = null;
+		try {
+			tx = SubordinationManager.getTransactionImporter().getImportedTransaction(xid);
+		} catch (XAException xae) {
+			if (xae.errorCode == XAException.XA_RBROLLBACK) {
+				// do nothing as already rolled back
+				return;
+			}
+			throw xae;
+		}
         try
         {
-            SubordinateTransaction tx = SubordinationManager
-                    .getTransactionImporter().getImportedTransaction(xid);
 
             if (tx == null)
                 throw new XAException(XAException.XAER_INVAL);



More information about the jboss-svn-commits mailing list