Author: dkulp
Date: Tue Aug  2 01:18:01 2011
New Revision: 1152991

URL: http://svn.apache.org/viewvc?rev=1152991&view=rev
Log:
Use an async process to destroy the JMS DefaultMessageListenerContainer
as the destroy method can take quite a while.  (might be an issue in
ActiveMQ).   This chops the build time on my machine from 15min 28s
to  10min 36s.

Modified:
    
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

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=1152991&r1=1152990&r2=1152991&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
 Tue Aug  2 01:18:01 2011
@@ -127,7 +127,7 @@ public class JmsConsumer extends Default
     protected void doStop() throws Exception {
         if (listenerContainer != null) {
             listenerContainer.stop();
-            listenerContainer.destroy();
+            
((JmsEndpoint)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=1152991&r1=1152990&r2=1152991&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
 Tue Aug  2 01:18:01 2011
@@ -81,6 +81,7 @@ public class JmsEndpoint extends Default
     // scheduled executor to check for timeout (reply not received)
     private ScheduledExecutorService replyManagerExecutorService;
     private final AtomicBoolean running = new AtomicBoolean();
+    private volatile boolean destroying;
 
     public JmsEndpoint() {
         this(null, null);
@@ -155,9 +156,30 @@ public class JmsEndpoint extends Default
     }
 
     public JmsConsumer createConsumer(Processor processor) throws Exception {
+        synchronized (this) {
+            while (destroying) {
+                wait();
+            }
+        }
         DefaultMessageListenerContainer listenerContainer = 
createMessageListenerContainer();
         return createConsumer(processor, listenerContainer);
     }
+    
+    private void 
destroyMessageListenerContainerInternal(DefaultMessageListenerContainer 
listenerContainer) {
+        listenerContainer.destroy();
+        destroying = false;
+        synchronized (this) {
+            notifyAll();
+        }
+    }
+    public void destroyMessageListenerContainer(final 
DefaultMessageListenerContainer listenerContainer) {
+        destroying = true;
+        this.getReplyManagerExecutorService().execute(new Runnable() {
+            public void run() {
+                destroyMessageListenerContainerInternal(listenerContainer);
+            }
+        });
+    }
 
     public DefaultMessageListenerContainer createMessageListenerContainer() 
throws Exception {
         return configuration.createMessageListenerContainer(this);
@@ -1007,6 +1029,7 @@ public class JmsEndpoint extends Default
         return super.createEndpointUri();
     }
 
+    
 
 
 }


Reply via email to