Hi

Check this page again as its updated how to stop a route from a route
http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html

Also there was a bug so the MBean for the scheduled thread pool was
not removed when you removed the route.

This has been fixed in 2.11.0, and upcoming releases of 2.10.x.
The thread pool is stopped though. Its just the mbean not being removed.



On Thu, May 2, 2013 at 6:20 PM, mdo <manfred.doh...@gmail.com> wrote:
> Hello,
>
> I've constructed a thread leak somehow. I found some discussions/issues
> describing past thread leaking problems, e.g.:
> http://stackoverflow.com/q/10071814
> http://stackoverflow.com/q/14992793
> https://issues.apache.org/jira/browse/CAMEL-5072
> http://camel.465427.n5.nabble.com/FTP-ConsumerTemplate-Threads-remaining-alive-td5548338.html
>
> So obviously there has been some work to fix those issues. In one case Claus
> advised the user that he must stop a producer template. I'm not sure how to
> solve my problem. Find my setup description of a Quartz-triggered file
> consumer route below.
>
> A file consumer:
> from("file:///tmp/x/?sendEmptyMessageWhenIdle=true")
> .noAutoStartup()
> .routeId(routeId)
> .choice()
>     .when(body().isNull())
> ...
>
> The null-Body is used as route-stop-trigger, I use a processor that starts
> up a thread as described here:
> http://camel.apache.org/how-can-i-stop-a-route-from-a-route.html
> ... with these actions:
> exchange.getContext().getInflightRepository().remove(exchange);
> exchange.getContext().stopRoute(exchange.getFromRouteId());
> I also tried a stop() on the getFromEndpoint() here.
>
>
> A Quartz route, periodically firing the file consumer route based on cron
> definitions:
> from("quartz://timer-"+routeId+"?stateful=true&cron=...")
>     .routeId("quartz-"+routeId)
>     .process(new RouteStartProcessor(routeId));
>
> process() in RouteStartProcessor:
> CamelContext context = exchange.getContext();
> context.startRoute(routeId);
>
> I now added a loop to the RouteStartProcessor waiting for the file consumer
> route to shutdown itself (to prevent overlaps), evaluated by:
> routeStopped = context.getRouteStatus(routeId).isStopped();
>
> This actually does work fine, so I assume that the route gets stopped
> successfully. Logs: o.a.c.impl.DefaultShutdownStrategy - Graceful shutdown
> of 1 routes completed in 0 seconds
>
> Whenever Quartz fires and the consumer route gets re-started this brings up
> a new thread id which I can see in the logs.
>
> Albeit the route obviously is shut down, the threads stay alive, all in
> state: java.lang.Thread.State: WAITING (parking)
>
> I dug around a bit in the VM's MBeans, there are:
> * 2 consumers, a FileConsumer and a QuartzConsumer
> * a large amount of threadpools (equal to the number of waiting threads),
> having IDs like FileConsumer(0x138dc688)
>
> Attributes of an example instance:
> Thread pool profile: --
> Shutdown: false
> Active count: 0
> Pool size: 1
> Task queue size: 0
> Route:
> Keep alive time: 0
> Source:
> Completed task count: 2
> Core pool size: 1
> Largest pool size: 1
> Task count: 2
> Id: FileConsumer(0x138dc688)
> Maximum pool size: 2147483647
> Task count: 2
>
>
> My environment:
> Linux
> JDK 7
> GlassFish 3
> CDI Camel context
> Camel 2.11.0
>
>
> Any hints? Thanks in advance!
>
> Regards, mdo.
>
>
>
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/2-11-File2-Quartz-threads-leaking-tp5731922.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
FuseSource is now part of Red Hat
Email: cib...@redhat.com
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Reply via email to