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