4

あるディレクトリから別のディレクトリにファイルをコピーする単純なApache Camelの例を実行したいと思います。

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

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

Apache Camel 2.0.0 を使用してこの例を実行すると、プログラムは直後に終了context.start();し、何もしません。Thread.sleep(30000);の開始後に追加するCamelContextと、バックグラウンド スレッドが動作し、ファイルがソース ディレクトリから宛先ディレクトリに 30 秒間コピーされます。

ただし、Apache Camel 1.6.2 を使用して同じコードを実行すると、start()メソッドは自動的にブロックされるため、ファイルをコピーするためにメイン スレッドをスリープ状態にする必要はありません。この動作が Camel 1.x から 2.x に変更されたというヒントは見つかりませんでした。これは本当に意図した動作ですか? Camel 2.0.0 で start() メソッドが実行をブロックすることは可能ですか?

ありがとう

4

2 に答える 2

10

または、追加できます

Thread.currentThread().join();

context.start() の後;

于 2010-03-10T12:16:51.213 に答える
8

ええ、ラクダのコンテキストでstart()を呼び出すと、スレッドがブロックされることはありません。そして、Camel2.0のこの正しい動作。

org.apache.camel.utilのMainSupportクラスを開始点として使用して、CamelContextでctrl + cを押すか、stop()を呼び出すまでブロックすることができます。

たとえば、MainSupportを拡張し、SpringXMLファイルからCamelをロードできるCamel-springのMainを参照してください。

于 2009-12-04T16:09:43.897 に答える