[ https://issues.apache.org/activemq/browse/SM-744?page=comments#action_37421 ] Martin Landua commented on SM-744: ----------------------------------
Grant, please find enclosed the diff, which might illustrate how I would think it could work: Index: ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/standard/StandardConsumerProcessor.java =================================================================== --- ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/standard/StandardConsumerProcessor.java (revision 472981) +++ ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/standard/StandardConsumerProcessor.java (working copy) @@ -123,7 +123,11 @@ response = fromNMSResponse(exchange, context, session); if (response != null) { producer = session.createProducer(message.getJMSReplyTo()); - response.setJMSCorrelationID(message.getJMSCorrelationID()); + if (endpoint.isUseMsgIdInResponse()) { + response.setJMSCorrelationID(message.getJMSMessageID()); + } else { + response.setJMSCorrelationID(message.getJMSCorrelationID()); + } producer.send(response); } } finally { Index: ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingConsumerProcessor.java =================================================================== --- ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingConsumerProcessor.java (revision 472981) +++ ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/multiplexing/MultiplexingConsumerProcessor.java (working copy) @@ -109,7 +109,11 @@ response = fromNMSResponse(exchange, context, session); if (response != null) { producer = session.createProducer(message.getJMSReplyTo()); - response.setJMSCorrelationID(message.getJMSCorrelationID()); + if (endpoint.isUseMsgIdInResponse()) { + response.setJMSCorrelationID(message.getJMSMessageID()); + } else { + response.setJMSCorrelationID(message.getJMSCorrelationID()); + } producer.send(response); } } finally { Index: ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java =================================================================== --- ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java (revision 472981) +++ ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/JmsEndpoint.java (working copy) @@ -56,6 +56,8 @@ protected String jndiConnectionFactoryName; protected String jndiDestinationName; protected String jmsProviderDestinationName; + + protected boolean useMsgIdInResponse; // // Spring configuration // @@ -458,4 +460,17 @@ return component.getKeystoreManager(); } + /** + * Determines whether for a request/response pattern, the message id of the request message + * should be used as the correlation id in the response or the correlation id of the request. + * @return + */ + public boolean isUseMsgIdInResponse() { + return useMsgIdInResponse; + } + + public void setUseMsgIdInResponse(boolean useMsgIdInResponse) { + this.useMsgIdInResponse = useMsgIdInResponse; + } + } \ No newline at end of file Index: ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/jca/JcaConsumerProcessor.java =================================================================== --- ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/jca/JcaConsumerProcessor.java (revision 472981) +++ ./ServiceMix-SNAPSHOT/deployables/bindingcomponents/servicemix-jms/src/main/java/org/apache/servicemix/jms/jca/JcaConsumerProcessor.java (working copy) @@ -138,7 +138,11 @@ response = fromNMSResponse(exchange, context, session); if (response != null) { MessageProducer producer = session.createProducer(message.getJMSReplyTo()); - response.setJMSCorrelationID(message.getJMSCorrelationID()); + if (endpoint.isUseMsgIdInResponse()) { + response.setJMSCorrelationID(message.getJMSMessageID()); + } else { + response.setJMSCorrelationID(message.getJMSCorrelationID()); + } producer.send(response); } } finally { > Request/Response for jms through MessageID/CorrelationID > -------------------------------------------------------- > > Key: SM-744 > URL: https://issues.apache.org/activemq/browse/SM-744 > Project: ServiceMix > Issue Type: Improvement > Components: servicemix-jms > Environment: All platforms > Reporter: Martin Landua > Priority: Minor > > The servicemix-jms component assumes that the request/reponse pattern is > implemented by the client by using some artificial correlation id as the > "connection" between the messages (as described in > http://activemq.org/site/how-should-i-implement-request-response-with-jms.html). > However, there are cases where the client assumes that the server sets the > correlation id of the response to the message id (!) of the request. > Currently, the servicemix-jms component does not support this, but it would > be convenient if it were configurable. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/activemq/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira