Question

Je veux courir simple Apache Camel exemple qui copie les fichiers d'un répertoire à l'autre:

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

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

Si je lance cet exemple en utilisant Apache Camel 2.0.0 le programme quitte immédiatement après context.start(); et ne fait rien. Si j'ajoute Thread.sleep(30000); après le démarrage du CamelContext, les fils de fond font leur travail et les fichiers sont copiés de la source vers le répertoire de destination pendant 30 secondes.

Cependant, si je lance le même code en utilisant Apache Camel 1.6.2 les blocs méthode de start() automatiquement et je ne ai pas besoin de mettre le fil conducteur de dormir afin d'obtenir les fichiers copiés. Je ne l'ai pas trouvé une allusion au fait que ce comportement a changé de 1.x Camel 2.x. Est-ce vraiment le comportement prévu? Est-il possible de laisser la méthode bloquer l'exécution start () dans Camel 2.0.0?

Merci

Était-ce utile?

La solution

Ouais début d'appel () sur le contexte de chameau ne doit jamais bloquer le fil. Et ce comportement correct de Camel 2.0.

Vous pouvez utiliser la classe MainSupport de org.apache.camel.util comme point de départ pour avoir bloqué jusqu'à ce que vous appuyez sur Ctrl + c ou appelez stop () sur CamelContext.

Voir par exemple principal en chameau ressort qui étend MainSupport et est capable de charger Camel à partir d'un fichier XML de printemps.

Autres conseils

Vous pouvez ajouter

Thread.currentThread().join();

après context.start ();

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top