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 2014/09/26 22:19:00 UTC

git commit: Create separate methods for message prop in the case of send vs dispatch so that we can have distinct processing logic for those cases.

Repository: qpid-jms
Updated Branches:
  refs/heads/master a5fe3018d -> ae9f689a2


Create separate methods for message prop in the case of send vs dispatch
so that we can have distinct processing logic for those cases. 

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

Branch: refs/heads/master
Commit: ae9f689a294cb5ef642a977c14077136a75319c0
Parents: a5fe301
Author: Timothy Bish <ta...@gmail.com>
Authored: Fri Sep 26 16:18:52 2014 -0400
Committer: Timothy Bish <ta...@gmail.com>
Committed: Fri Sep 26 16:18:52 2014 -0400

----------------------------------------------------------------------
 .../org/apache/qpid/jms/message/JmsMessage.java  | 19 +++++++++++++++++--
 .../jms/message/facade/JmsMessageFacade.java     | 13 +++++++++++--
 .../facade/defaults/JmsDefaultMessageFacade.java |  4 ++++
 .../qpid/jms/provider/amqp/AmqpConsumer.java     | 10 +++++-----
 .../amqp/message/AmqpJmsMessageFacade.java       | 11 +++++++++--
 5 files changed, 46 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ae9f689a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessage.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessage.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessage.java
index eb06e21..a914204 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessage.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsMessage.java
@@ -514,9 +514,11 @@ public class JmsMessage implements javax.jms.Message {
     }
 
     /**
-     * Send operation event listener. Used to get the message ready to be sent.
+     * Used to trigger processing required to place the message in a state where it is
+     * ready to be written to the wire.  This processing can include such tasks as ensuring
+     * that the proper message headers are set or compressing message bodies etc.
      *
-     * @throws JMSException
+     * @throws JMSException if an error occurs while preparing the message for send.
      */
     public void onSend() throws JMSException {
         setReadOnlyBody(true);
@@ -524,6 +526,19 @@ public class JmsMessage implements javax.jms.Message {
         facade.onSend();
     }
 
+    /**
+     * Used to trigger processing required before dispatch of a message to its intended
+     * consumer.  This method should perform any needed unmarshal or message property
+     * processing prior to the message arriving at a consumer.
+     *
+     * @throws JMSException if an error occurs while preparing the message for dispatch.
+     */
+    public void onDispatch() throws JMSException {
+        setReadOnlyBody(true);
+        setReadOnlyProperties(true);
+        facade.onDispatch();
+    }
+
     public JmsConnection getConnection() {
         return connection;
     }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ae9f689a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsMessageFacade.java
index 9f4717d..fb998dc 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/JmsMessageFacade.java
@@ -77,14 +77,23 @@ public interface JmsMessageFacade {
     void setProperty(String key, Object value) throws JMSException;
 
     /**
-     * Called when a message is sent to allow a Message instance to move the
-     * contents from a logical data structure to a binary form for transmission.
+     * Called before a message is sent to allow a Message instance to move the
+     * contents from a logical data structure to a binary form for transmission, or
+     * other processing such as setting proper message headers etc.
      *
      * @throws JMSException if an error occurs while preparing the message for send.
      */
     void onSend() throws JMSException;
 
     /**
+     * Called before a message is dispatched to its intended consumer to allow for
+     * any necessary processing of message data such as setting read-only state etc.
+     *
+     * @throws JMSException if an error occurs while preparing the message for send.
+     */
+    void onDispatch() throws JMSException;
+
+    /**
      * This method should provide a quick check on the message to determine if
      * there is any content actually contained within.
      *

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ae9f689a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/defaults/JmsDefaultMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/defaults/JmsDefaultMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/defaults/JmsDefaultMessageFacade.java
index 330ddfb..41e5d4e 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/defaults/JmsDefaultMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/facade/defaults/JmsDefaultMessageFacade.java
@@ -129,6 +129,10 @@ public class JmsDefaultMessageFacade implements JmsMessageFacade {
     }
 
     @Override
+    public void onDispatch() throws JMSException {
+    }
+
+    @Override
     public boolean isEmpty() {
         return true;
     }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ae9f689a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java
index 57c6b35..6906e14 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java
@@ -75,7 +75,7 @@ public class AmqpConsumer extends AbstractAmqpResource<JmsConsumerInfo, Receiver
     private final ByteArrayOutputStream streamBuffer = new ByteArrayOutputStream();
     private final byte incomingBuffer[] = new byte[1024 * 64];
 
-    private AtomicLong _incomingSequence = new AtomicLong(0);
+    private final AtomicLong _incomingSequence = new AtomicLong(0);
 
     public AmqpConsumer(AmqpSession session, JmsConsumerInfo info) {
         super(info);
@@ -333,10 +333,10 @@ public class AmqpConsumer extends AbstractAmqpResource<JmsConsumerInfo, Receiver
             return;
         }
 
-        // We need to signal to the create message that it's being dispatched and for now
-        // the transformer creates the message in write mode, onSend will reset it to read
-        // mode and the consumer will see it as a normal received message.
-        message.onSend();
+        // Let the message do any final processing before sending it onto a consumer.
+        // We could defer this to a later stage such as the JmsConnection or even in
+        // the JmsMessageConsumer dispatch method if we needed to.
+        message.onDispatch();
 
         JmsInboundMessageDispatch envelope = new JmsInboundMessageDispatch(getNextIncomingSequenceNumber());
         envelope.setMessage(message);

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ae9f689a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
index 6a637c6..02f3d7e 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsMessageFacade.java
@@ -214,16 +214,23 @@ public class AmqpJmsMessageFacade implements JmsMessageFacade {
 
     @Override
     public void onSend() throws JMSException {
+        // TODO - Why is this here ?? Seems to be circular reading and reseting
         String contentType = getContentType();
-        byte jmsMsgType = getJmsMsgType();
-
         if (contentType != null) {
             message.setContentType(contentType);
         }
+
+        byte jmsMsgType = getJmsMsgType();
         setAnnotation(JMS_MSG_TYPE, jmsMsgType);
     }
 
     @Override
+    public void onDispatch() throws JMSException {
+        // TODO - Sort out send vs dispatch processing.
+        onSend();
+    }
+
+    @Override
     public void clearBody() {
         message.setBody(null);
     }


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