You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Tarjei Huse (JIRA)" <ji...@apache.org> on 2010/03/24 13:09:08 UTC
[jira] Updated: (CAMEL-2573) Spring context deadlock if route stops
[ https://issues.apache.org/activemq/browse/CAMEL-2573?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tarjei Huse updated CAMEL-2573:
-------------------------------
Attachment: deadlock.log
Complete log showing threadstate when a JMS route is shut down.
> 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.