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.