Author: davsclaus
Date: Thu Nov 10 10:46:36 2011
New Revision: 1200262

URL: http://svn.apache.org/viewvc?rev=1200262&view=rev
Log:
CAMEL-4656: Optimized request/reply over JMS with fixed reply queues. We can 
cache consumer for exclusive and when using a fixed reply to selector value.

Modified:
    
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java

Modified: 
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java?rev=1200262&r1=1200261&r2=1200262&view=diff
==============================================================================
--- 
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java
 (original)
+++ 
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/reply/PersistentQueueReplyManager.java
 Thu Nov 10 10:46:36 2011
@@ -128,15 +128,22 @@ public class PersistentQueueReplyManager
                 replyToSelectorValue = "ID:" + new BigInteger(24 * 8, new 
Random()).toString(16);
                 String fixedMessageSelector = replyToSelectorName + "='" + 
replyToSelectorValue + "'";
                 answer = new 
SharedPersistentQueueMessageListenerContainer(fixedMessageSelector);
+                // must use cache level consumer for fixed message selector
+                
answer.setCacheLevel(DefaultMessageListenerContainer.CACHE_CONSUMER);
                 log.debug("Using shared queue: " + endpoint.getReplyTo() + " 
with fixed message selector [" + fixedMessageSelector + "] as reply listener: " 
+ answer);
             } else {
                 // use a dynamic message selector which will select the 
message we want to receive as reply
                 dynamicMessageSelector = new 
MessageSelectorCreator(correlation);
                 answer = new 
SharedPersistentQueueMessageListenerContainer(dynamicMessageSelector);
+                // must use cache level session for dynamic message selector,
+                // as otherwise the dynamic message selector will not be 
updated on-the-fly
+                
answer.setCacheLevel(DefaultMessageListenerContainer.CACHE_SESSION);
                 log.debug("Using shared queue: " + endpoint.getReplyTo() + " 
with dynamic message selector as reply listener: " + answer);
             }
         } else if (ReplyToType.Exclusive == type) {
             answer = new ExclusivePersistentQueueMessageListenerContainer();
+            // must use cache level consumer for exclusive as there is no 
message selector
+            
answer.setCacheLevel(DefaultMessageListenerContainer.CACHE_CONSUMER);
             log.debug("Using exclusive queue:" + endpoint.getReplyTo() + " as 
reply listener: " + answer);
         } else {
             throw new IllegalArgumentException("ReplyToType " + type + " is 
not supported for persistent reply queues");
@@ -161,8 +168,6 @@ public class PersistentQueueReplyManager
             clientId += ".CamelReplyManager";
             answer.setClientId(clientId);
         }
-        // must use cache level session
-        answer.setCacheLevel(DefaultMessageListenerContainer.CACHE_SESSION);
 
         // we cannot do request-reply over JMS with transaction
         answer.setSessionTransacted(false);


Reply via email to