You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ta...@apache.org on 2015/02/18 15:13:25 UTC
qpid-jms git commit: Refactoring of TX sync handling.
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 <ta...@gmail.com>
Authored: Wed Feb 18 09:06:12 2015 -0500
Committer: Timothy Bish <ta...@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-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org