Hi

I created a JIRA ticket to not forget about this
https://issues.apache.org/jira/browse/CAMEL-4309

On Tue, Aug 2, 2011 at 1:01 PM, Claus Ibsen <[email protected]> wrote:
> Hi
>
> I have noticed since this commit, some of the JMS unit tests start to fail.
> Seen that in camel-jms and also in tests/camel-itest
>
>
>
> On Tue, Aug 2, 2011 at 8:43 AM, Claus Ibsen <[email protected]> wrote:
>> Hi
>>
>> The stop operation on the consumer is synchronous to ensure the
>> operation goes well.
>> I am not to keen that this is changed just with the mind of improving
>> your unit test times.
>> This could break behavior for people using it in production.
>>
>> Also you grab the executor service on the reply manager. That is only
>> to be used when use if you do request/reply over JMS, and for that
>> purpose only.
>>
>> Instead I think we need a way of configuring this on the consumer or
>> endpoint with an option to control, such as:
>> - destroyListenerAsync
>> Mind think of a better name.
>>
>> And then don't use the ReplyManageerExecutorService but a dedicated
>> single threaded executor, you can grab from the executor service
>> manager.
>>
>> Also the change warrant a JIRA ticket imho. Changes to JMS is
>> important we keep track of in the release notes, for end users.
>> As JMS is used a lot.
>>
>>
>> On Tue, Aug 2, 2011 at 3:18 AM,  <[email protected]> wrote:
>>> 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();
>>>     }
>>>
>>> +
>>>
>>>
>>>  }
>>>
>>>
>>>
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> FuseSource
>> Email: [email protected]
>> Web: http://fusesource.com
>> Twitter: davsclaus, fusenews
>> Blog: http://davsclaus.blogspot.com/
>> Author of Camel in Action: http://www.manning.com/ibsen/
>>
>
>
>
> --
> Claus Ibsen
> -----------------
> FuseSource
> Email: [email protected]
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: [email protected]
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to