57.9. CDI イベントへの Camel イベント
Camel 2.17 から利用可能
Camel は、Camel コンテキスト、サービス、ルート、および交換 イベントをリッスンするためにサブスクライブできる管理 イベントのセットを提供します。Camel CDI は、CDI オブザーバーメソッド を使用して確認できる CDI イベントにこれらの Camel イベントをシームレスに変換します。以下に例を示します。
void onContextStarting(@Observes CamelContextStartingEvent event) { // Called before the default Camel context is about to start }
void onContextStarting(@Observes CamelContextStartingEvent event) {
// Called before the default Camel context is about to start
}
Camel 2.18 の時点で、特定のルート(RouteAddedEvent
、RouteStartedEvent
、RouteStoppedEvent
および RouteRemovedEvent
)のイベントを明示的に定義しているはずです。以下に例を示します。
from("...").routeId("foo").to("..."); void onRouteStarted(@Observes @Named("foo") RouteStartedEvent event) { // Called after the route "foo" has started }
from("...").routeId("foo").to("...");
void onRouteStarted(@Observes @Named("foo") RouteStartedEvent event) {
// Called after the route "foo" has started
}
CDI コンテナーに複数の Camel コンテキストが存在する場合、 @ContextName
などの Camel コンテキスト Bean 修飾子を使用して、オブザーバー解決で指定された特定の Camel コンテキストにオブザーバーメソッドの 解決 を改良できます。以下に例を示します。
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 }
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 }
void onExchangeCompleted(@Observes @Default ExchangeCompletedEvent event) {
// Called after the exchange 'event.getExchange()' processing has completed
}
この例では、修飾子が指定されていない場合、 @Any
修飾子は暗黙的に考慮され、すべての Camel コンテキストの対応するイベントが受信されます。
CDI イベントへの Camel イベント変換のサポートは、Camel イベントをリッスンするオブザーバーメソッドがデプロイメントで検出され、Camel コンテキストごとに検出される場合にのみアクティベートされることに注意してください。