You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2016/11/22 16:08:17 UTC

activemq git commit: [AMQ-3166] init rollbackonly exception cause such that xaexception has meaning, thanks to james (jtahlborn) for the suggestion

Repository: activemq
Updated Branches:
  refs/heads/master f40532a23 -> 7077d2b91


[AMQ-3166] init rollbackonly exception cause such that xaexception has meaning, thanks to james (jtahlborn) for the suggestion


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/7077d2b9
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/7077d2b9
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/7077d2b9

Branch: refs/heads/master
Commit: 7077d2b910405dea7a60c5140824966ffebc66a8
Parents: f40532a
Author: gtully <ga...@gmail.com>
Authored: Tue Nov 22 16:07:28 2016 +0000
Committer: gtully <ga...@gmail.com>
Committed: Tue Nov 22 16:07:55 2016 +0000

----------------------------------------------------------------------
 .../org/apache/activemq/transaction/Transaction.java     | 11 ++++++-----
 .../test/java/org/apache/activemq/bugs/AMQ3166Test.java  |  4 +++-
 2 files changed, 9 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/7077d2b9/activemq-broker/src/main/java/org/apache/activemq/transaction/Transaction.java
----------------------------------------------------------------------
diff --git a/activemq-broker/src/main/java/org/apache/activemq/transaction/Transaction.java b/activemq-broker/src/main/java/org/apache/activemq/transaction/Transaction.java
index 77710f3..13ec353 100644
--- a/activemq-broker/src/main/java/org/apache/activemq/transaction/Transaction.java
+++ b/activemq-broker/src/main/java/org/apache/activemq/transaction/Transaction.java
@@ -44,7 +44,7 @@ public abstract class Transaction {
     public static final byte PREPARED_STATE = 2; // can go to: 3
     public static final byte FINISHED_STATE = 3;
     boolean committed = false;
-    boolean rollbackOnly = false;
+    Throwable rollackOnlyCause = null;
 
     private final ArrayList<Synchronization> synchronizations = new ArrayList<Synchronization>();
     private byte state = START_STATE;
@@ -111,9 +111,10 @@ public abstract class Transaction {
             throw xae;
         }
 
-        if (rollbackOnly) {
+        if (isRollbackOnly()) {
             XAException xae = newXAException("COMMIT FAILED: Transaction marked rollback only", XAException.XA_RBROLLBACK);
             TransactionRolledBackException transactionRolledBackException = new TransactionRolledBackException(xae.getLocalizedMessage());
+            transactionRolledBackException.initCause(rollackOnlyCause);
             xae.initCause(transactionRolledBackException);
             throw xae;
         }
@@ -215,14 +216,14 @@ public abstract class Transaction {
     }
 
     public void setRollbackOnly(Throwable cause) {
-        if (!rollbackOnly) {
+        if (!isRollbackOnly()) {
             getLog().trace("setting rollback only, cause:", cause);
-            rollbackOnly = true;
+            rollackOnlyCause = cause;
         }
     }
 
     public boolean isRollbackOnly() {
-        return rollbackOnly;
+        return rollackOnlyCause != null;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/activemq/blob/7077d2b9/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3166Test.java
----------------------------------------------------------------------
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3166Test.java b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3166Test.java
index 74e2d48..f72e034 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3166Test.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3166Test.java
@@ -51,7 +51,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-public class AMQ3166Test {
+public class   {
 
     private static final Logger LOG = LoggerFactory.getLogger(AMQ3166Test.class);
 
@@ -133,6 +133,8 @@ public class AMQ3166Test {
             fail("Expect TransactionRolledBackException");
         } catch (JMSException expected) {
             assertTrue(expected.getCause() instanceof XAException);
+            assertTrue(expected.getCause().getCause() instanceof TransactionRolledBackException);
+            assertTrue(expected.getCause().getCause().getCause() instanceof RuntimeException);
         }
 
         assertTrue("one message still there!", Wait.waitFor(new Wait.Condition() {