camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From davscl...@apache.org
Subject svn commit: r1156306 - in /camel/trunk/components/camel-jms/src: main/java/org/apache/camel/component/jms/ test/java/org/apache/camel/component/jms/
Date Wed, 10 Aug 2011 18:43:08 GMT
Author: davsclaus
Date: Wed Aug 10 18:43:07 2011
New Revision: 1156306

URL: http://svn.apache.org/viewvc?rev=1156306&view=rev
Log:
CAMEL-3938: Reintroduced consumerType option. Thanks to Joshua for the patch. Disable the
async listener destroy as its a bit unstable.

Added:
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsMessageListenerContainer.java
      - copied, changed from r1156243, camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageListenerContainer.java
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/SimpleJmsMessageListenerContainer.java
Removed:
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageListenerContainer.java
Modified:
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConsumer.java
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
    camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEndpointConfigurationTest.java

Copied: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsMessageListenerContainer.java
(from r1156243, camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageListenerContainer.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsMessageListenerContainer.java?p2=camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsMessageListenerContainer.java&p1=camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageListenerContainer.java&r1=1156243&r2=1156306&rev=1156306&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageListenerContainer.java
(original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/DefaultJmsMessageListenerContainer.java
Wed Aug 10 18:43:07 2011
@@ -19,7 +19,7 @@ package org.apache.camel.component.jms;
 import org.springframework.jms.listener.DefaultMessageListenerContainer;
 
 /**
- * The {@link DefaultMessageListenerContainer container} which listen for messages
+ * The default {@link DefaultMessageListenerContainer container} which listen for messages
  * on the JMS destination.
  * <p/>
  * This implementation extends Springs {@link DefaultMessageListenerContainer} supporting
@@ -27,11 +27,11 @@ import org.springframework.jms.listener.
  *
  * @version 
  */
-public class JmsMessageListenerContainer extends DefaultMessageListenerContainer {
+public class DefaultJmsMessageListenerContainer extends DefaultMessageListenerContainer {
 
     private final JmsEndpoint endpoint;
 
-    public JmsMessageListenerContainer(JmsEndpoint endpoint) {
+    public DefaultJmsMessageListenerContainer(JmsEndpoint endpoint) {
         this.endpoint = endpoint;
     }
 

Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java?rev=1156306&r1=1156305&r2=1156306&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
(original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
Wed Aug 10 18:43:07 2011
@@ -35,7 +35,9 @@ import org.springframework.jms.core.JmsO
 import org.springframework.jms.core.JmsTemplate;
 import org.springframework.jms.core.MessageCreator;
 import org.springframework.jms.core.SessionCallback;
+import org.springframework.jms.listener.AbstractMessageListenerContainer;
 import org.springframework.jms.listener.DefaultMessageListenerContainer;
+import org.springframework.jms.listener.SimpleMessageListenerContainer;
 import org.springframework.jms.support.JmsUtils;
 import org.springframework.jms.support.converter.MessageConverter;
 import org.springframework.jms.support.destination.DestinationResolver;
@@ -65,6 +67,7 @@ public class JmsConfiguration implements
     private String acknowledgementModeName;
     // Used to configure the spring Container
     private ExceptionListener exceptionListener;
+    private ConsumerType consumerType = ConsumerType.Default;
     private ErrorHandler errorHandler;    
     private boolean autoStartup = true;
     private boolean acceptMessagesWhileStopping;
@@ -359,15 +362,33 @@ public class JmsConfiguration implements
         return template;
     }
 
-    public DefaultMessageListenerContainer createMessageListenerContainer(JmsEndpoint endpoint)
throws Exception {
-        DefaultMessageListenerContainer container = new JmsMessageListenerContainer(endpoint);
+    public AbstractMessageListenerContainer createMessageListenerContainer(JmsEndpoint endpoint)
throws Exception {
+        AbstractMessageListenerContainer container = chooseMessageListenerContainerImplementation(endpoint);
         configureMessageListenerContainer(container, endpoint);
         return container;
     }
 
+    public AbstractMessageListenerContainer chooseMessageListenerContainerImplementation(JmsEndpoint
endpoint) {
+        switch (consumerType) {
+        case Simple:
+            return new SimpleJmsMessageListenerContainer(endpoint);
+        case Default:
+            return new DefaultJmsMessageListenerContainer(endpoint);
+        default:
+            throw new IllegalArgumentException("Unknown consumer type: " + consumerType);
+        }
+    }
 
     // Properties
     // -------------------------------------------------------------------------
+    
+    public ConsumerType getConsumerType(){
+    	return consumerType;
+    }
+    
+    public void setConsumerType(ConsumerType consumerType) {
+        this.consumerType = consumerType;
+    }
 
     public ConnectionFactory getConnectionFactory() {
         if (connectionFactory == null) {
@@ -827,7 +848,7 @@ public class JmsConfiguration implements
     }
 
 
-    protected void configureMessageListenerContainer(DefaultMessageListenerContainer container,
+    protected void configureMessageListenerContainer(AbstractMessageListenerContainer container,
                                                      JmsEndpoint endpoint) throws Exception
{
         container.setConnectionFactory(getListenerConnectionFactory());
         if (endpoint instanceof DestinationEndpoint) {
@@ -852,7 +873,7 @@ public class JmsConfiguration implements
         if (errorHandler != null) {
             container.setErrorHandler(errorHandler);
         }
-        
+
         container.setAcceptMessagesWhileStopping(acceptMessagesWhileStopping);
         container.setExposeListenerSession(exposeListenerSession);
         container.setSessionTransacted(transacted);
@@ -870,6 +891,33 @@ public class JmsConfiguration implements
             container.setMessageSelector(endpoint.getSelector());
         }
 
+        if (container instanceof DefaultMessageListenerContainer) {
+            DefaultMessageListenerContainer listenerContainer = (DefaultMessageListenerContainer)
container;
+            configureDefaultMessageListenerContainer(endpoint, listenerContainer);
+        } else if (container instanceof SimpleMessageListenerContainer) {
+        	SimpleMessageListenerContainer listenerContainer = (SimpleMessageListenerContainer)
container;
+        	configureSimpleMessageListenerContainer(listenerContainer); 
+        }
+    }
+
+    private void configureSimpleMessageListenerContainer(SimpleMessageListenerContainer listenerContainer)
{
+        if (maxConcurrentConsumers > 0) {
+            if (maxConcurrentConsumers < concurrentConsumers) {
+                throw new IllegalArgumentException("Property maxConcurrentConsumers: " +
maxConcurrentConsumers + " must be higher than concurrentConsumers: "
+                        + concurrentConsumers);
+            }
+            listenerContainer.setConcurrency(concurrentConsumers + "-" + maxConcurrentConsumers);
+        } else if (concurrentConsumers >= 0) {
+            listenerContainer.setConcurrentConsumers(concurrentConsumers);
+        }
+
+        listenerContainer.setPubSubNoLocal(pubSubNoLocal);
+        if (taskExecutor != null) {
+            listenerContainer.setTaskExecutor(taskExecutor);
+        }
+    }
+
+    private void configureDefaultMessageListenerContainer(JmsEndpoint endpoint, DefaultMessageListenerContainer
container) {
         if (concurrentConsumers >= 0) {
             container.setConcurrentConsumers(concurrentConsumers);
         }

Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConsumer.java?rev=1156306&r1=1156305&r2=1156306&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConsumer.java
(original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConsumer.java
Wed Aug 10 18:43:07 2011
@@ -22,20 +22,23 @@ import org.apache.camel.FailedToCreateCo
 import org.apache.camel.Processor;
 import org.apache.camel.SuspendableService;
 import org.apache.camel.impl.DefaultConsumer;
-import org.springframework.jms.listener.DefaultMessageListenerContainer;
+import org.springframework.jms.listener.AbstractMessageListenerContainer;
 import org.springframework.jms.support.JmsUtils;
 
 /**
- * A {@link org.apache.camel.Consumer} which uses Spring's {@link DefaultMessageListenerContainer}
implementations to consume JMS messages
+ * A {@link org.apache.camel.Consumer} which uses Spring's {@link AbstractMessageListenerContainer}
implementations
+ * to consume JMS messages.
  *
- * @version 
+ * @version
+ * @see DefaultJmsMessageListenerContainer
+ * @see SimpleJmsMessageListenerContainer
  */
 public class JmsConsumer extends DefaultConsumer implements SuspendableService {
-    private DefaultMessageListenerContainer listenerContainer;
+    private AbstractMessageListenerContainer listenerContainer;
     private EndpointMessageListener messageListener;
     private volatile boolean initialized;
 
-    public JmsConsumer(JmsEndpoint endpoint, Processor processor, DefaultMessageListenerContainer
listenerContainer) {
+    public JmsConsumer(JmsEndpoint endpoint, Processor processor, AbstractMessageListenerContainer
listenerContainer) {
         super(endpoint, processor);
         this.listenerContainer = listenerContainer;
         this.listenerContainer.setMessageListener(getEndpointMessageListener());
@@ -45,7 +48,7 @@ public class JmsConsumer extends Default
         return (JmsEndpoint) super.getEndpoint();
     }
 
-    public DefaultMessageListenerContainer getListenerContainer() throws Exception {
+    public AbstractMessageListenerContainer getListenerContainer() throws Exception {
         if (listenerContainer == null) {
             createMessageListenerContainer();
         }
@@ -127,7 +130,9 @@ public class JmsConsumer extends Default
     protected void doStop() throws Exception {
         if (listenerContainer != null) {
             listenerContainer.stop();
-            ((JmsEndpoint)getEndpoint()).destroyMessageListenerContainer(listenerContainer);
+            listenerContainer.destroy();
+            // TODO: The async destroy code does not work well, there is a JIRA ticket
+            // getEndpoint().destroyMessageListenerContainer(listenerContainer);
         }
 
         // null container and listener so they are fully re created if this consumer is restarted

Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java?rev=1156306&r1=1156305&r2=1156306&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
(original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
Wed Aug 10 18:43:07 2011
@@ -18,6 +18,7 @@ package org.apache.camel.component.jms;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -56,7 +57,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.core.task.TaskExecutor;
 import org.springframework.jms.core.JmsOperations;
+import org.springframework.jms.listener.AbstractMessageListenerContainer;
 import org.springframework.jms.listener.DefaultMessageListenerContainer;
+import org.springframework.jms.listener.SimpleMessageListenerContainer;
 import org.springframework.jms.support.converter.MessageConverter;
 import org.springframework.jms.support.destination.DestinationResolver;
 import org.springframework.transaction.PlatformTransactionManager;
@@ -162,18 +165,18 @@ public class JmsEndpoint extends Default
                 wait();
             }
         }
-        DefaultMessageListenerContainer listenerContainer = createMessageListenerContainer();
+        AbstractMessageListenerContainer listenerContainer = createMessageListenerContainer();
         return createConsumer(processor, listenerContainer);
     }
     
-    private void destroyMessageListenerContainerInternal(DefaultMessageListenerContainer
listenerContainer) {
+    private void destroyMessageListenerContainerInternal(AbstractMessageListenerContainer
listenerContainer) {
         listenerContainer.destroy();
         destroying = false;
         synchronized (this) {
             notifyAll();
         }
     }
-    public void destroyMessageListenerContainer(final DefaultMessageListenerContainer listenerContainer)
{
+    public void destroyMessageListenerContainer(final AbstractMessageListenerContainer listenerContainer)
{
         destroying = true;
         this.getReplyManagerExecutorService().execute(new Runnable() {
             public void run() {
@@ -182,11 +185,11 @@ public class JmsEndpoint extends Default
         });
     }
 
-    public DefaultMessageListenerContainer createMessageListenerContainer() throws Exception
{
+    public AbstractMessageListenerContainer createMessageListenerContainer() throws Exception
{
         return configuration.createMessageListenerContainer(this);
     }
 
-    public void configureListenerContainer(DefaultMessageListenerContainer listenerContainer,
JmsConsumer consumer) {
+    public void configureListenerContainer(AbstractMessageListenerContainer listenerContainer,
JmsConsumer consumer) {
         if (destinationName != null) {
             listenerContainer.setDestinationName(destinationName);
         } else if (destination != null) {
@@ -205,13 +208,23 @@ public class JmsEndpoint extends Default
             if (log.isDebugEnabled()) {
                 log.debug("Using custom TaskExecutor: {} on listener container: {}", configuration.getTaskExecutor(),
listenerContainer);
             }
-            listenerContainer.setTaskExecutor(configuration.getTaskExecutor());
+            setContainerTaskExecutor(listenerContainer, configuration.getTaskExecutor());
         } else {
             // include destination name as part of thread name
             String name = "JmsConsumer[" + getEndpointConfiguredDestinationName() + "]";
             // use a cached pool as DefaultMessageListenerContainer will throttle pool sizing
+            // TODO: The refactored ExecutorServiceManager was not good, now we dont have
the JDK API anymore
+            // we need the CachedThreadPool here, but the refactored API does not offer that
anymore
             ExecutorService executor = getCamelContext().getExecutorServiceManager().getDefaultExecutorService(name,
consumer);
-            listenerContainer.setTaskExecutor(executor);
+            setContainerTaskExecutor(listenerContainer, executor);
+        }
+    }
+
+    private void setContainerTaskExecutor(AbstractMessageListenerContainer listenerContainer,
Executor executor) {
+        if (listenerContainer instanceof SimpleMessageListenerContainer) {
+            ((SimpleMessageListenerContainer) listenerContainer).setTaskExecutor(executor);
+        } else if (listenerContainer instanceof DefaultMessageListenerContainer) {
+            ((DefaultMessageListenerContainer) listenerContainer).setTaskExecutor(executor);
         }
     }
 
@@ -233,7 +246,7 @@ public class JmsEndpoint extends Default
      * @return a newly created consumer
      * @throws Exception if the consumer cannot be created
      */
-    public JmsConsumer createConsumer(Processor processor, DefaultMessageListenerContainer
listenerContainer) throws Exception {
+    public JmsConsumer createConsumer(Processor processor, AbstractMessageListenerContainer
listenerContainer) throws Exception {
         JmsConsumer consumer = new JmsConsumer(this, processor, listenerContainer);
         configureListenerContainer(listenerContainer, consumer);
         return consumer;
@@ -778,7 +791,7 @@ public class JmsEndpoint extends Default
     public void setErrorHandler(ErrorHandler errorHandler) {
         getConfiguration().setErrorHandler(errorHandler);
     }
-    
+
     @ManagedAttribute
     public void setExplicitQosEnabled(boolean explicitQosEnabled) {
         getConfiguration().setExplicitQosEnabled(explicitQosEnabled);

Added: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/SimpleJmsMessageListenerContainer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/SimpleJmsMessageListenerContainer.java?rev=1156306&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/SimpleJmsMessageListenerContainer.java
(added)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/SimpleJmsMessageListenerContainer.java
Wed Aug 10 18:43:07 2011
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jms;
+
+import org.springframework.jms.listener.SimpleMessageListenerContainer;
+
+/**
+ * The simple {@link org.springframework.jms.listener.SimpleMessageListenerContainer container}
which listen for messages
+ * on the JMS destination.
+ * <p/>
+ * This implementation extends Springs {@link org.springframework.jms.listener.SimpleMessageListenerContainer}.
+ *
+ * @version
+ */
+public class SimpleJmsMessageListenerContainer extends SimpleMessageListenerContainer {
+
+    private final JmsEndpoint endpoint;
+
+    public SimpleJmsMessageListenerContainer(JmsEndpoint endpoint) {
+        this.endpoint = endpoint;
+    }
+
+    @Override
+    protected boolean runningAllowed() {
+        // do not run if we have been stopped
+        return endpoint.isRunning();
+    }
+}

Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEndpointConfigurationTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEndpointConfigurationTest.java?rev=1156306&r1=1156305&r2=1156306&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEndpointConfigurationTest.java
(original)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsEndpointConfigurationTest.java
Wed Aug 10 18:43:07 2011
@@ -34,6 +34,7 @@ import org.springframework.jms.core.JmsO
 import org.springframework.jms.core.JmsTemplate;
 import org.springframework.jms.listener.AbstractMessageListenerContainer;
 import org.springframework.jms.listener.DefaultMessageListenerContainer;
+import org.springframework.jms.listener.SimpleMessageListenerContainer;
 import org.springframework.jms.support.converter.SimpleMessageConverter;
 import org.springframework.util.ErrorHandler;
 
@@ -116,6 +117,15 @@ public class JmsEndpointConfigurationTes
     }
 
     @Test
+    public void testCreateSimpleMessageListener() throws Exception{
+    	 JmsEndpoint endpoint = (JmsEndpoint) resolveMandatoryEndpoint("jms:Foo.Bar?consumerType=Simple");
+         JmsConsumer consumer = endpoint.createConsumer(dummyProcessor);
+
+         AbstractMessageListenerContainer container = consumer.getListenerContainer();
+         assertTrue("Should have been a SimpleMessageListenerContainer",container instanceof
SimpleMessageListenerContainer);
+    }
+
+    @Test
     public void testCacheConsumerEnabledForQueue() throws Exception {
         JmsEndpoint endpoint = (JmsEndpoint) resolveMandatoryEndpoint("jms:Foo.Bar");
         assertCacheLevel(endpoint, DefaultMessageListenerContainer.CACHE_AUTO);
@@ -148,6 +158,12 @@ public class JmsEndpointConfigurationTes
         JmsEndpoint endpoint = (JmsEndpoint) resolveMandatoryEndpoint("jms:queue:Foo?maxConcurrentConsumers=5");
         assertEquals(5, endpoint.getMaxConcurrentConsumers());
     }
+    
+    @Test
+    public void testMaxConcurrentConsumersForSimpleConsumer() throws Exception {
+        JmsEndpoint endpoint = (JmsEndpoint) resolveMandatoryEndpoint("jms:queue:Foo?maxConcurrentConsumers=5&consumerType=Simple");
+        assertEquals(5, endpoint.getMaxConcurrentConsumers());
+    }
 
     @Test
     public void testInvalidMaxConcurrentConsumers() throws Exception {
@@ -159,14 +175,40 @@ public class JmsEndpointConfigurationTes
             assertEquals("Property maxConcurrentConsumers: 2 must be higher than concurrentConsumers:
5", e.getMessage());
         }
     }
+    
+    @Test
+    public void testInvalidMaxConcurrentConsumersForSimpleConsumer() throws Exception {
+    	JmsEndpoint endpoint = (JmsEndpoint) resolveMandatoryEndpoint("jms:queue:Foo?concurrentConsumers=5&maxConcurrentConsumers=2&consumerType=Simple");
+        
+    	try {
+            endpoint.createConsumer(new CamelLogger());
+            fail("Should have thrown exception");
+        } catch (IllegalArgumentException e) {
+            assertEquals("Property maxConcurrentConsumers: 2 must be higher than concurrentConsumers:
5", e.getMessage());
+        }
+    }
 
     @Test
     public void testConcurrentConsumers() throws Exception {
         JmsEndpoint endpoint = (JmsEndpoint) resolveMandatoryEndpoint("jms:queue:Foo?concurrentConsumers=4");
         assertEquals(4, endpoint.getConcurrentConsumers());
     }
+    
+    @Test
+    public void testConcurrentConsumersForSimpleConsumer() throws Exception {
+    	JmsEndpoint endpoint = (JmsEndpoint) resolveMandatoryEndpoint("jms:queue:Foo?concurrentConsumers=4&consumerType=Simple");
+        
+        assertEquals(4, endpoint.getConcurrentConsumers());
+    }
 
     @Test
+    public void testPubSubNoLocalForSimpleConsumer() throws Exception{
+    	JmsEndpoint endpoint = (JmsEndpoint) resolveMandatoryEndpoint("jms:queue:Foo?pubSubNoLocal=true&consumerType=Simple");
+      
+        assertTrue("PubSubNoLocal should be true", endpoint.isPubSubNoLocal());
+    }
+    
+    @Test
     public void testIdleTaskExecutionLimit() throws Exception {
         JmsEndpoint endpoint = (JmsEndpoint) resolveMandatoryEndpoint("jms:queue:Foo?idleTaskExecutionLimit=50");
         assertEquals(50, endpoint.getIdleTaskExecutionLimit());



Mime
View raw message