Spring context deadlock if route stops
--------------------------------------

                 Key: CAMEL-2573
                 URL: https://issues.apache.org/activemq/browse/CAMEL-2573
             Project: Apache Camel
          Issue Type: Bug
          Components: camel-jms, camel-spring-integration
    Affects Versions: 2.2.0
         Environment: Linux, Java 1.6 , ActiveMQ 5.3.1.
            Reporter: Tarjei Huse
         Attachments: deadlock.log

I am a bit unsure if this is an Activemq or Camel bug. What happens is the 
following:

I got a route:
@Override
        public void configure() throws Exception {
                /* expects byte message of contentitem + header with index : 
ArrayList<Index> list */
                from(incomming)
                        .routeId(routeName)
                        .onException(Exception.class)
                                
                                .log("Stopping route due to exception")
                                .process(new RouteStoppingProccesor(routeName))
                                //.to(incomming)
                                .end()
                        .unmarshal(new ActiveMqProtobufDataformat())
                        .bean(new ContentItemTranslator(), "translate")
                        .processRef("SolrPoster") // todo add aggregator here
                                ;
        }

The RouteStoppingProccessor looks like this:
public class RouteStoppingProccesor implements Processor {

        private static Logger log = Logger.getLogger("RouteStopper");
        
        private final String routeName;

        public RouteStoppingProccesor(String routeName) {
                this.routeName = routeName;
                
        }
        
        @Override
        public void process(Exchange exchange) throws Exception {
                log.error("\nXXXX: STOP ROUTE: " + routeName + "\n\n");
                exchange.getContext().stopRoute(this.routeName);
        }

}
When the RouteStoppingProcessor is called, the processor hangs:



"DefaultMessageListenerContainer-1" prio=10 tid=0x09607400 nid=0x1bbe in 
Object.wait() [0x6dbba000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0xb1449530> (a java.lang.Object)
        at java.lang.Object.wait(Object.java:485)
        at 
org.springframework.jms.listener.DefaultMessageListenerContainer.doShutdown(DefaultMessageListenerContainer.java:489)
        - locked <0xb1449530> (a java.lang.Object)
        at 
org.springframework.jms.listener.AbstractJmsListeningContainer.shutdown(AbstractJmsListeningContainer.java:211)
        at 
org.springframework.jms.listener.AbstractJmsListeningContainer.destroy(AbstractJmsListeningContainer.java:149)
        at 
org.apache.camel.component.jms.JmsConsumer.doStop(JmsConsumer.java:64)
        at org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:81)
        at org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:100)
        at 
org.apache.camel.util.ServiceHelper.stopService(ServiceHelper.java:93)
        at 
org.apache.camel.impl.RouteService.stopChildService(RouteService.java:212)
        at org.apache.camel.impl.RouteService.doStop(RouteService.java:180)
        at org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:81)
        at org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:100)
        at 
org.apache.camel.impl.DefaultCamelContext.stopRoute(DefaultCamelContext.java:632)
        - locked <0xb1449570> (a org.apache.camel.spring.SpringCamelContext)
        at 
com.scanmine.router.RouteStoppingProccesor.process(RouteStoppingProccesor.java:26)
        at 
org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53)
        at 
org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82)
        at 
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:93)
        at 
org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177)
        at 
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143)
        at 
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88)
        at 
org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49)
        at 
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:74)
        at 
org.apache.camel.processor.RedeliveryErrorHandler.deliverToFailureProcessor(RedeliveryErrorHandler.java:333)
        at 
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:110)
        at 
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88)
        at 
org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49)
        at 
org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:74)
        at 
org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:66)
        at 
org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48)
        at 
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67)
        at 
org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:83)
        at 
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:543)
        at 
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:482)
        at 
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:451)
        at 
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323)
        at 
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:261)
        at 
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:982)
        at 
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:974)
        at 
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:876)
        at java.lang.Thread.run(Thread.java:619)


This also causes the whole CamelContext to lock up. The complete output of kill 
- 3 + a bit of the log is attached. 


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to