Repository: qpid-jms
Updated Branches:
  refs/heads/master 67c85107b -> 5d2f656a7


Refactoring of TX sync handling. 

Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/5d2f656a
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/5d2f656a
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/5d2f656a

Branch: refs/heads/master
Commit: 5d2f656a798c7e4fc6e6c2405cd03e4a44596049
Parents: 67c8510
Author: Timothy Bish <tabish...@gmail.com>
Authored: Wed Feb 18 09:06:12 2015 -0500
Committer: Timothy Bish <tabish...@gmail.com>
Committed: Wed Feb 18 09:06:12 2015 -0500

----------------------------------------------------------------------
 .../qpid/jms/JmsLocalTransactionContext.java    | 11 +++++--
 .../org/apache/qpid/jms/JmsMessageConsumer.java | 31 ++++++++++++--------
 .../qpid/jms/JmsNoTxTransactionContext.java     |  8 ++++-
 .../apache/qpid/jms/JmsTransactionContext.java  |  4 ++-
 .../apache/qpid/jms/JmsTxSynchronization.java   | 22 ++++++++++++--
 5 files changed, 58 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5d2f656a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsLocalTransactionContext.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsLocalTransactionContext.java
 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsLocalTransactionContext.java
index 0e3eddf..2760efd 100644
--- 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsLocalTransactionContext.java
+++ 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsLocalTransactionContext.java
@@ -72,11 +72,18 @@ public class JmsLocalTransactionContext implements 
JmsTransactionContext {
     }
 
     @Override
-    public void addSynchronization(JmsTxSynchronization s) {
+    public void addSynchronization(JmsTxSynchronization sync) throws 
JMSException {
         if (synchronizations == null) {
             synchronizations = new ArrayList<JmsTxSynchronization>(10);
         }
-        synchronizations.add(s);
+
+        try {
+            if (sync.validate(this)) {
+                synchronizations.add(sync);
+            }
+        } catch (Exception e) {
+            throw JmsExceptionSupport.create(e);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5d2f656a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageConsumer.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageConsumer.java 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageConsumer.java
index 8443caa..6e1e262 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageConsumer.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageConsumer.java
@@ -141,21 +141,28 @@ public class JmsMessageConsumer implements 
MessageConsumer, JmsMessageAvailableC
     @Override
     public void close() throws JMSException {
         if (!closed.get()) {
-            if (delivered.get() && 
session.getTransactionContext().isInTransaction()) {
-                session.getTransactionContext().addSynchronization(new 
JmsTxSynchronization() {
-                    @Override
-                    public void afterCommit() throws Exception {
-                        doClose();
-                    }
+            session.getTransactionContext().addSynchronization(new 
JmsTxSynchronization() {
 
-                    @Override
-                    public void afterRollback() throws Exception {
+                @Override
+                public boolean validate(JmsTransactionContext context) throws 
Exception {
+                    if (!context.isInTransaction() || !delivered.get()) {
                         doClose();
+                        return false;
                     }
-                });
-            } else {
-                doClose();
-            }
+
+                    return true;
+                }
+
+                @Override
+                public void afterCommit() throws Exception {
+                    doClose();
+                }
+
+                @Override
+                public void afterRollback() throws Exception {
+                    doClose();
+                }
+            });
         }
     }
 

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5d2f656a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsNoTxTransactionContext.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsNoTxTransactionContext.java
 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsNoTxTransactionContext.java
index 677ed53..18bcc90 100644
--- 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsNoTxTransactionContext.java
+++ 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsNoTxTransactionContext.java
@@ -18,6 +18,7 @@ package org.apache.qpid.jms;
 
 import javax.jms.JMSException;
 
+import org.apache.qpid.jms.exceptions.JmsExceptionSupport;
 import org.apache.qpid.jms.message.JmsInboundMessageDispatch;
 import org.apache.qpid.jms.message.JmsOutboundMessageDispatch;
 import org.apache.qpid.jms.meta.JmsTransactionId;
@@ -41,7 +42,12 @@ public class JmsNoTxTransactionContext implements 
JmsTransactionContext {
     }
 
     @Override
-    public void addSynchronization(JmsTxSynchronization sync) {
+    public void addSynchronization(JmsTxSynchronization sync) throws 
JMSException {
+        try {
+            sync.validate(this);
+        } catch (Exception e) {
+            throw JmsExceptionSupport.create(e);
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5d2f656a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsTransactionContext.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsTransactionContext.java 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsTransactionContext.java
index b1ba332..0b85886 100644
--- 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsTransactionContext.java
+++ 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsTransactionContext.java
@@ -67,8 +67,10 @@ public interface JmsTransactionContext {
      *
      * @param sync
      *        the transaction synchronization to add.
+     *
+     * @throws JMSException if an error occurs during the send.
      */
-    void addSynchronization(JmsTxSynchronization sync);
+    void addSynchronization(JmsTxSynchronization sync) throws JMSException;
 
     /**
      * @returns if the currently transaction has been marked as being failed.

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5d2f656a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsTxSynchronization.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsTxSynchronization.java 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsTxSynchronization.java
index bda7979..f9b65d9 100644
--- 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsTxSynchronization.java
+++ 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsTxSynchronization.java
@@ -29,9 +29,27 @@ package org.apache.qpid.jms;
 public abstract class JmsTxSynchronization {
 
     /**
+     * Called once before the synchronization is added to the set
+     * of synchronizations held for a pending TX.  The caller can
+     * check TX state and react accordingly.  If the resource finds
+     * that is does not need to be added to the TX it can return false
+     * to indicate such.
+     *
+     * @param context
+     *        reference to the transaction context.
+     *
+     * @return true if the synchronization should be added to the TX.
+     *
+     * @throws Exception if an error occurs during the event.
+     */
+    public boolean validate(JmsTransactionContext context) throws Exception {
+        return true;
+    }
+
+    /**
      * Called after a successful commit of the current Transaction.
      *
-     * @throws Exception
+     * @throws Exception if an error occurs during the event.
      */
     public void afterCommit() throws Exception {
     }
@@ -40,7 +58,7 @@ public abstract class JmsTxSynchronization {
      * Called after the current transaction has been rolled back either
      * by a call to rollback or by a failure to complete a commit operation.
      *
-     * @throws Exception
+     * @throws Exception if an error occurs during the event.
      */
     public void afterRollback() throws Exception {
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to