[jboss-svn-commits] JBL Code SVN: r25057 - in labs/jbosstm/trunk: ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Feb 2 10:40:51 EST 2009


Author: jhalliday
Date: 2009-02-02 10:40:51 -0500 (Mon, 02 Feb 2009)
New Revision: 25057

Modified:
   labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java
   labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java
Log:
Add setRollbackOnly stacktrace to aid debugging. JBTM-66


Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java	2009-02-02 15:37:39 UTC (rev 25056)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/internal/jta/transaction/arjunacore/TransactionImple.java	2009-02-02 15:40:51 UTC (rev 25057)
@@ -384,6 +384,14 @@
 									.getString("com.arjuna.ats.internal.jta.transaction.arjunacore.inactive"));
 				}
 			}
+            else
+            {
+                // keep a record of why we are rolling back i.e. who called us first, it's a useful debug aid.
+                if(_rollbackOnlyCallerStacktrace == null)
+                {
+                    _rollbackOnlyCallerStacktrace = new Throwable("setRollbackOnly called from:");
+                }
+            }
 		}
 		else
 			throw new IllegalStateException(
@@ -1423,8 +1431,13 @@
 					case ActionStatus.H_ROLLBACK:
 					case ActionStatus.ABORTED:
 					case ActionStatus.ABORTING:
-						RollbackException rollbackException = new RollbackException(jtaLogger.logMesg.getString("com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted"));
-						if(_theTransaction.getDeferredThrowable() != null) {
+                        RollbackException rollbackException = new RollbackException(jtaLogger.logMesg.getString("com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted"));
+                        if(_rollbackOnlyCallerStacktrace != null) {
+                            // we rolled back beacuse the user explicitly told us not to commit. Attach the trace of who did that for debug:
+                            rollbackException.initCause(_rollbackOnlyCallerStacktrace);
+                        }
+                        else if(_theTransaction.getDeferredThrowable() != null) {
+                            // we tried to commit but it went wrong - attach the reason for debug:
 							rollbackException.initCause(_theTransaction.getDeferredThrowable());
 						}
 						throw rollbackException;
@@ -1891,6 +1904,8 @@
 	private final boolean _xaTransactionTimeoutEnabled;
 
 	private Map _txLocalResources;
+    
+    private Throwable _rollbackOnlyCallerStacktrace;
 
 	/**
 	 * Count of last resources seen in this transaction.

Modified: labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java	2009-02-02 15:37:39 UTC (rev 25056)
+++ labs/jbosstm/trunk/ArjunaJTS/jtax/classes/com/arjuna/ats/internal/jta/transaction/jts/TransactionImple.java	2009-02-02 15:40:51 UTC (rev 25057)
@@ -403,6 +403,11 @@
 			try
 			{
 				_theTransaction.rollbackOnly();
+                // keep a record of why we are rolling back i.e. who called us first, it's a useful debug aid.
+                if(_rollbackOnlyCallerStacktrace == null)
+                {
+                    _rollbackOnlyCallerStacktrace = new Throwable("setRollbackOnly called from:");
+                }
 			}
 			catch (org.omg.CosTransactions.NoTransaction e3)
 			{
@@ -1397,7 +1402,12 @@
 			}
 			catch (TRANSACTION_ROLLEDBACK e4)
 			{
-				throw new RollbackException(e4.toString());
+				RollbackException rollbackException = new RollbackException(e4.toString());
+                if(_rollbackOnlyCallerStacktrace != null) {
+                    // we rolled back beacuse the user explicitly told us not to commit. Attach the trace of who did that for debug:
+                    rollbackException.initCause(_rollbackOnlyCallerStacktrace);
+                }
+                throw rollbackException;
 			}
 			catch (org.omg.CORBA.NO_PERMISSION e5)
 			{
@@ -1870,6 +1880,8 @@
 	private final boolean _xaTransactionTimeoutEnabled ;
     private Map _txLocalResources;
 
+    private Throwable _rollbackOnlyCallerStacktrace;
+    
         /**
          * Count of last resources seen in this transaction.
          */




More information about the jboss-svn-commits mailing list