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); }