Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CamelContext.start() doesn't block

I want to run a simple Apache Camel example that copies files from one directory to another:

CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {

  public void configure () throws Exception {
    from("file://c:/fromdir/").to("file://c:/todir/");
  } 
});
context.start();

If I run this example using Apache Camel 2.0.0 the program exits immediately after context.start(); and does nothing. If I add Thread.sleep(30000); after the starting of the CamelContext, the background threads do their work and files get copied from the source to the destination directory for 30 seconds.

However, if I run the same code using Apache Camel 1.6.2 the start() method blocks automatically and I don't need to put the main thread to sleep in order to get files copied. I haven't found a hint that this behavior changed from Camel 1.x to 2.x. Is this really the intended behavior? Is it possible to let the start() method block the execution in Camel 2.0.0?

Thanks

like image 603
Christoph Metzendorf Avatar asked Dec 03 '22 06:12

Christoph Metzendorf


2 Answers

Or you can add

Thread.currentThread().join();

after context.start();

like image 192
eirikma Avatar answered Dec 28 '22 22:12

eirikma


Yeah calling start() on camel context should never block the thread. And this correct behavior of Camel 2.0.

You can use the MainSupport class from org.apache.camel.util as a starting point to have blocked until you hit ctrl + c or call stop() on CamelContext.

See for example Main in camel-spring which extends MainSupport and is capable of loading Camel from a spring XML file.

like image 44
Claus Ibsen Avatar answered Dec 28 '22 20:12

Claus Ibsen