Author: davsclaus
Date: Wed Oct 31 16:36:15 2012
New Revision: 1404235

URL: http://svn.apache.org/viewvc?rev=1404235&view=rev
Log:
CAMEL-5763: Added option includeSentJMSMessageID to camel-jms to allow to 
enrich Camel Message with the actual JMSMessageID for the sent message. Can be 
used by end users for logging purpose etc.

Added:
    
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/InOnlyMessageSentCallback.java
      - copied unchanged from r1404233, 
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/InOnlyMessageSentCallback.java
    
camel/branches/camel-2.10.x/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyIncludeSentJMSMessageIDTest.java
      - copied unchanged from r1404233, 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsInOnlyIncludeSentJMSMessageIDTest.java
    
camel/branches/camel-2.10.x/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotInOnlyIncludeSentJMSMessageIDTest.java
      - copied unchanged from r1404233, 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsNotInOnlyIncludeSentJMSMessageIDTest.java
Modified:
    camel/branches/camel-2.10.x/   (props changed)
    
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
    
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
    
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
    
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java
    
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java
    
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/UseMessageIdAsCorrelationIdMessageSentCallback.java

Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
  Merged /camel/trunk:r1404233

Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java?rev=1404235&r1=1404234&r2=1404235&view=diff
==============================================================================
--- 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
 (original)
+++ 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsComponent.java
 Wed Oct 31 16:36:15 2012
@@ -378,6 +378,10 @@ public class JmsComponent extends Defaul
         getConfiguration().setAllowNullBody(allowNullBody);
     }
 
+    public void setIncludeSentJMSMessageID(boolean includeSentJMSMessageID) {
+        getConfiguration().setIncludeSentJMSMessageID(includeSentJMSMessageID);
+    }
+
     public void setApplicationContext(ApplicationContext applicationContext) 
throws BeansException {
         this.applicationContext = applicationContext;
     }

Modified: 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java?rev=1404235&r1=1404234&r2=1404235&view=diff
==============================================================================
--- 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
 (original)
+++ 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
 Wed Oct 31 16:36:15 2012
@@ -136,6 +136,7 @@ public class JmsConfiguration implements
     private String replyToCacheLevelName;
     private boolean allowNullBody = true;
     private MessageListenerContainerFactory messageListenerContainerFactory;
+    private boolean includeSentJMSMessageID;
 
     public JmsConfiguration() {
     }
@@ -1295,4 +1296,21 @@ public class JmsConfiguration implements
     public void 
setMessageListenerContainerFactory(MessageListenerContainerFactory 
messageListenerContainerFactory) {
         this.messageListenerContainerFactory = messageListenerContainerFactory;
     }
+
+    public boolean isIncludeSentJMSMessageID() {
+        return includeSentJMSMessageID;
+    }
+
+    /**
+     * Whether to include the actual JMSMessageID set on the Message by the 
JMS vendor
+     * on the Camel Message as a header when sending InOnly messages.
+     * <p/>
+     * Can be enable to gather the actual JMSMessageID for InOnly messages, 
which allows to access
+     * the message id, which can be used for logging and tracing purposes.
+     * <p/>
+     * This option is default <tt>false</tt>.
+     */
+    public void setIncludeSentJMSMessageID(boolean includeSentJMSMessageID) {
+        this.includeSentJMSMessageID = includeSentJMSMessageID;
+    }
 }

Modified: 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java?rev=1404235&r1=1404234&r2=1404235&view=diff
==============================================================================
--- 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
 (original)
+++ 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
 Wed Oct 31 16:36:15 2012
@@ -1022,8 +1022,8 @@ public class JmsEndpoint extends Default
     }
 
     @ManagedAttribute
-    public void setAsyncStopListener(boolean asyncStoptListener) {
-        configuration.setAsyncStopListener(asyncStoptListener);
+    public void setAsyncStopListener(boolean asyncStopListener) {
+        configuration.setAsyncStopListener(asyncStopListener);
     }
 
     @ManagedAttribute
@@ -1041,6 +1041,16 @@ public class JmsEndpoint extends Default
         configuration.setAllowNullBody(allowNullBody);
     }
     
+    @ManagedAttribute
+    public boolean isIncludeSentJMSMessageID() {
+        return configuration.isIncludeSentJMSMessageID();
+    }
+
+    @ManagedAttribute
+    public void setIncludeSentJMSMessageID(boolean includeSentJMSMessageID) {
+        configuration.setIncludeSentJMSMessageID(includeSentJMSMessageID);
+    }
+
     public MessageListenerContainerFactory 
getMessageListenerContainerFactory() {
         return configuration.getMessageListenerContainerFactory();
     }

Modified: 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java?rev=1404235&r1=1404234&r2=1404235&view=diff
==============================================================================
--- 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java
 (original)
+++ 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java
 Wed Oct 31 16:36:15 2012
@@ -234,6 +234,22 @@ public final class JmsMessageHelper {
     }
 
     /**
+     * Gets the JMSMessageID from the message.
+     *
+     * @param message  the message
+     * @return the JMSMessageID, or <tt>null</tt> if not able to get
+     */
+    public static String getJMSMessageID(Message message) {
+        try {
+            return message.getJMSMessageID();
+        } catch (Exception e) {
+            // ignore if JMS broker do not support this
+        }
+
+        return null;
+    }
+
+    /**
      * Sets the JMSDeliveryMode on the message.
      *
      * @param exchange the exchange

Modified: 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java?rev=1404235&r1=1404234&r2=1404235&view=diff
==============================================================================
--- 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java
 (original)
+++ 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsProducer.java
 Wed Oct 31 16:36:15 2012
@@ -38,7 +38,6 @@ import org.apache.camel.impl.DefaultAsyn
 import org.apache.camel.spi.UuidGenerator;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.ServiceHelper;
-import org.apache.camel.util.ValueHolder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.jms.core.JmsOperations;
@@ -172,7 +171,6 @@ public class JmsProducer extends Default
         if (msgIdAsCorrId) {
             messageSentCallback = new 
UseMessageIdAsCorrelationIdMessageSentCallback(replyManager, 
provisionalCorrelationId, endpoint.getRequestTimeout());
         }
-        final ValueHolder<MessageSentCallback> sentCallback = new 
ValueHolder<MessageSentCallback>(messageSentCallback);
 
         final String originalCorrelationId = in.getHeader("JMSCorrelationID", 
String.class);
         if (ObjectHelper.isEmpty(originalCorrelationId) && !msgIdAsCorrId) {
@@ -201,7 +199,7 @@ public class JmsProducer extends Default
             }
         };
 
-        doSend(true, destinationName, destination, messageCreator, 
sentCallback.get());
+        doSend(true, destinationName, destination, messageCreator, 
messageSentCallback);
 
         // after sending then set the OUT message id to the JMSMessageID so 
its identical
         setMessageId(exchange);
@@ -260,6 +258,8 @@ public class JmsProducer extends Default
             destinationName = null;
         }
         final String to = destinationName != null ? destinationName : "" + 
destination;
+        MessageSentCallback messageSentCallback = 
getEndpoint().getConfiguration().isIncludeSentJMSMessageID()
+                ? new InOnlyMessageSentCallback(exchange) : null;
 
         MessageCreator messageCreator = new MessageCreator() {
             public Message createMessage(Session session) throws JMSException {
@@ -349,7 +349,7 @@ public class JmsProducer extends Default
             }
         };
 
-        doSend(false, destinationName, destination, messageCreator, null);
+        doSend(false, destinationName, destination, messageCreator, 
messageSentCallback);
 
         // after sending then set the OUT message id to the JMSMessageID so 
its identical
         setMessageId(exchange);
@@ -366,7 +366,7 @@ public class JmsProducer extends Default
      * @param destinationName the destination name
      * @param destination     the destination (if no name provided)
      * @param messageCreator  the creator to create the {@link Message} to send
-     * @param callback        optional callback for inOut messages
+     * @param callback        optional callback to invoke when message has 
been sent
      */
     protected void doSend(boolean inOut, String destinationName, Destination 
destination,
                           MessageCreator messageCreator, MessageSentCallback 
callback) {
@@ -385,7 +385,7 @@ public class JmsProducer extends Default
                 }
             } else {
                 if (template != null) {
-                    template.send(destination, messageCreator);
+                    template.send(destination, messageCreator, callback);
                 }
             }
         } else if (destinationName != null) {
@@ -395,7 +395,7 @@ public class JmsProducer extends Default
                 }
             } else {
                 if (template != null) {
-                    template.send(destinationName, messageCreator);
+                    template.send(destinationName, messageCreator, callback);
                 }
             }
         } else {

Modified: 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/UseMessageIdAsCorrelationIdMessageSentCallback.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/UseMessageIdAsCorrelationIdMessageSentCallback.java?rev=1404235&r1=1404234&r2=1404235&view=diff
==============================================================================
--- 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/UseMessageIdAsCorrelationIdMessageSentCallback.java
 (original)
+++ 
camel/branches/camel-2.10.x/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/UseMessageIdAsCorrelationIdMessageSentCallback.java
 Wed Oct 31 16:36:15 2012
@@ -17,13 +17,12 @@
 package org.apache.camel.component.jms.reply;
 
 import javax.jms.Destination;
-import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.Session;
 
 import org.apache.camel.component.jms.MessageSentCallback;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import static org.apache.camel.component.jms.JmsMessageHelper.getJMSMessageID;
 
 /**
  * Callback to be used when using the option 
<tt>useMessageIDAsCorrelationID</tt>.
@@ -35,7 +34,6 @@ import org.slf4j.LoggerFactory;
  */
 public class UseMessageIdAsCorrelationIdMessageSentCallback implements 
MessageSentCallback {
 
-    private static final Logger LOG = 
LoggerFactory.getLogger(MessageSelectorCreator.class);
     private ReplyManager replyManager;
     private String correlationId;
     private long requestTimeout;
@@ -47,13 +45,7 @@ public class UseMessageIdAsCorrelationId
     }
 
     public void sent(Session session, Message message, Destination 
destination) {
-        String newCorrelationID = null;
-        try {
-            newCorrelationID = message.getJMSMessageID();
-        } catch (JMSException e) {
-            // ignore
-            LOG.warn("Cannot get JMSMessageID from message: " + message + ". 
This exception will be ignored.", e);
-        }
+        String newCorrelationID = getJMSMessageID(message);
         if (newCorrelationID != null) {
             replyManager.updateCorrelationId(correlationId, newCorrelationID, 
requestTimeout);
         }


Reply via email to