Hi Tim, > On 06 Apr 2016, at 16:19, Tim Dudgeon <tdudgeon...@gmail.com> wrote: > > I've found a couple of things I don't understand when using the camel-cdi > component. > > 1. The @ContextName("customname") annotation can be used to specify a custom > name for the camel context. But I'm finding that this annotation is essential. > e.g. if my app comprise just of a couple of classes extending RoutBuilder > then I MUST have this annotation present. > I would have assumed that if I only have a single CamelContext then this > would have been unnecessary?
This should work as you assume. For example, if you execute the following test: @RunWith(Arquillian.class) public class CdiTest { @Deployment public static Archive<?> deployment() { return ShrinkWrap.create(JavaArchive.class) // Camel CDI .addPackage(CdiCamelExtension.class.getPackage()) // Bean archive deployment descriptor .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } static class FirstRoute extends RouteBuilder { @Override public void configure() { from("direct:first").to("mock:first"); } } static class SecondRoute extends RouteBuilder { @Override public void configure() { from("direct:second").to("mock:second"); } } @Test public void test() { } } You see that the two route builders get added to the default Camel context: 2016-04-06 16:56:53,201 INFO [ main] o.a.c.c.CdiCamelExtension : Camel CDI is starting Camel context [camel-1] 2016-04-06 16:56:53,202 INFO [ main] o.a.c.i.DefaultCamelContext : Apache Camel 2.17.0 (CamelContext: camel-1) is starting 2016-04-06 16:56:53,581 INFO [ main] o.a.c.i.DefaultCamelContext : Route: route1 started and consuming from: Endpoint[direct://second] 2016-04-06 16:56:53,585 INFO [ main] o.a.c.i.DefaultCamelContext : Route: route2 started and consuming from: Endpoint[direct://first] 2016-04-06 16:56:53,586 INFO [ main] o.a.c.i.DefaultCamelContext : Total 2 routes, of which 2 are started. 2016-04-06 16:56:53,587 INFO [ main] o.a.c.i.DefaultCamelContext : Apache Camel 2.17.0 (CamelContext: camel-1) started in 0.385 seconds 2016-04-06 16:56:53,649 INFO [ main] o.a.c.c.CamelContextProducer : Camel CDI is stopping Camel context [camel-1] 2016-04-06 16:56:53,649 INFO [ main] o.a.c.i.DefaultCamelContext : Apache Camel 2.17.0 (CamelContext: camel-1) is shutting down 2016-04-06 16:56:53,651 INFO [ main] o.a.c.i.DefaultShutdownStrategy : Starting to graceful shutdown 2 routes (timeout 300 seconds) 2016-04-06 16:56:53,655 INFO [ - ShutdownTask] o.a.c.i.DefaultShutdownStrategy : Route: route2 shutdown complete, was consuming from: Endpoint[direct://first] 2016-04-06 16:56:53,655 INFO [ - ShutdownTask] o.a.c.i.DefaultShutdownStrategy : Route: route1 shutdown complete, was consuming from: Endpoint[direct://second] 2016-04-06 16:56:53,656 INFO [ main] o.a.c.i.DefaultShutdownStrategy : Graceful shutdown of 2 routes completed in 0 seconds 2016-04-06 16:56:53,660 INFO [ main] o.a.c.i.DefaultCamelContext : Apache Camel 2.17.0 (CamelContext: camel-1) uptime 0.459 seconds 2016-04-06 16:56:53,660 INFO [ main] o.a.c.i.DefaultCamelContext : Apache Camel 2.17.0 (CamelContext: camel-1) is shutdown in 0.011 seconds Could you please send more details about your deployment so that I can help identify why that is not working as expected? > 2. I'm try to use a custom thread pool. As described in the docs I use a > @Producer to generate the thread pool profile: > > public class CamelContextFactory { > > @Produces > @ApplicationScoped > CamelContext customize() { > DefaultCamelContext context = new DefaultCamelContext(); > context.setName("mycontext"); > ThreadPoolProfile profile = new > ThreadPoolProfileBuilder("poolName").poolSize(4).maxPoolSize(50).build(); > context.getExecutorServiceManager().registerThreadPoolProfile(profile); > return context; > } > } > > This seems to be executed as expected, but when I try to use the thread pool > in a route like this: > > from("direct:foo" ) > .threads().executorServiceRef("poolName") > .log("route executed"); > > then the pool can't be found: > > Caused by: java.lang.IllegalArgumentException: ExecutorServiceRef poolName > not found in registry or as a thread pool profile. The lookup is done by name so you need to have a @Named("poolName") bean deployed or have the ExecutorService register manually into the Camel context (which you do but for some reasons it does not get found). So in your example, I would try: @Produces @Named("poolName") ThreadPoolProfile profile() { return ThreadPoolProfileBuilder("poolName").poolSize(4).maxPoolSize(50).build(); } And without using a custom Camel context. > Thanks for any advice on these. > Tim Let me know if that helps. Antonin