[ 
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

        

Reply via email to