59.9. Camel イベントから CDI イベントへ

Camel 2.17 以降で利用可能

Camel は、Camel コンテキスト、サービス、ルート、およびエクスチェンジイベントをリッスンするためにサブスクライブできる一連の 管理イベント を提供します。Camel CDI は、これらの Camel イベントを CDI observer メソッド を使用して監視できる CDI イベントにシームレスに変換します。

void onContextStarting(@Observes CamelContextStartingEvent event) {
    // Called before the default Camel context is about to start
}

Camel 2.18 の時点で、特定のルート (RouteAddedEventRouteStartedEventRouteStoppedEvent、および RouteRemovedEvent) のイベントを監視することが可能です。

from("...").routeId("foo").to("...");

void onRouteStarted(@Observes @Named("foo") RouteStartedEvent event) {
    // Called after the route "foo" has started
}

複数の Camel コンテキストが CDI コンテナーに存在する場合、@ContextName などの Camel コンテキスト Bean 修飾子を使用して、observer resolution で指定されている特定の Camel コンテキストに observer メソッドのソリューションを絞り込むことができます。次に例を示します。

void onRouteStarted(@Observes @ContextName("foo") RouteStartedEvent event) {
    // Called after the route 'event.getRoute()' for the Camel context 'foo' has started
}
 
void onContextStarted(@Observes @Manual CamelContextStartedEvent event) {
    // Called after the the Camel context qualified with '@Manual' has started
}

同様に、@Default 修飾子を使用して、複数のコンテキストが存在する場合、デフォルトの Camel コンテキストの Camel イベントを監視できます。

void onExchangeCompleted(@Observes @Default ExchangeCompletedEvent event) {
    // Called after the exchange 'event.getExchange()' processing has completed
}

その例では、修飾子が指定されていない場合、@Any 修飾子が暗黙的に想定されるため、すべての Camel コンテキストの対応するイベントが受信されます。

Camel イベントの CDI イベントへの変換のサポートは、デプロイメントで Camel イベントをリッスンする observer メソッドが検出され、Camel コンテキストごとに検出された場合にのみアクティブ化されることに注意してください。