2016-10-07 9 views
1

以前のプロジェクトでは、Guiceをラクダと併用することがよくありました。私のアプローチはCamelのMainクラスを拡張し、そこに事前設定されたコンテキストを挿入することでした。 コンテキストの開始を制御する必要がありました。コンテキストの開始前に私はいくつかの準備をしました(例えば、ハワイと他のセットアップの開始)。camel-cdi CamelContextを自動起動しないようにして、自動検出しない方法RouteBuilder

RouteBuilderで同じことをしました。 1つの中央RouteBuilderがonExceptionのようなものを設定し、RoutePoliciesを追加し、他のルートで自動スタートを設定し、もちろん他のすべてのルートを追加しました。

私はCDIを愛することを学び、ラクダの2.17(およびヒューズ6.3)のCDIサポートは完了したようです。

  • だから何が(ヒューズ上のOSGiバンドルとして展開)ラクダのコンテキストの開始を制御するラクダ-CDIとの良好なアプローチでしょうか?

  • RouteBuilder(およびその他のもの)の自動検出を無効にするか、制御する方法を教えてください。

+0

私は混乱します。なぜあなたのルートビルダーを発見したくないのですか?ラクダのCDの背後にある点は、あなたのために見上げることです。 hawt.ioのような他のコンポーネントを起動する必要がある場合は、CDIライフサイクルで管理されている独自のコンポーネントにする必要があります。例を挙げるのに役立つかもしれません。 –

+0

私はいくつかのコンテキストスコープ設定をすべてのルートが始まる前にやりたいからです。例えば。ルートポリシーと自動起動の動作。通常、私は、ルーティングしていないが、他のルートを含む1つのメインルートを持っています。 – dermoritz

答えて

2

だから何が(ヒューズ上のOSGiバンドルとして展開)ラクダのコンテキストの開始 を制御するために、ラクダ-CDIとの良好なアプローチでしょうか?

キャメルCDIは常に自動的に設定されたキャメルコンテキストを開始します。それは言われて、それはルートが例えばPostConstructライフサイクルイベントを宣言することで、開始されないようにこれらをカスタマイズすることが可能である:

@ApplicationScoped 
class CustomCamelContext extends DefaultCamelContext { 

    @PostConstruct 
    void customize() { 
     setAutoStartup(false); 
    } 
} 

その例では、そのキャメルコンテキストに追加の経路に沿って開始されません文脈と

これは、その段階で行われたすべての検証でコンテキストを開始するというCamelの原則を尊重します。しかし、ルーティングを開始しない機能があります。

RouteBuilder(および他の のもの)の自動検出を無効または制御する方法はありますか? @ContextNameで修飾

RoutesBuilder豆が自動的ラクダCDIによって対応CamelContext豆に添加します。そのようなCamelContextが存在しない場合、それは自動的に作成されます。一方、RoutesBuilderのユーザー定義の修飾子で修飾されたBeanは、CamelContext Beanの自動作成をトリガーしません。これは、アプリケーションの実行中に後で追加する必要があるかもしれないCamelルートに使用できます。たとえばで:@DoNotDiscoverと資格なしキャメルコンテキストBeanが明示的に宣言されていない場合は

@DoNotDiscover 
class MyRouteBuilder extends RouteBuilder { 
    // ... 
} 

MyRouteBuilder Beanが自動検出されません。それでもアプリケーション実行中に使用することができます。例:

@Inject 
@DoNotDiscover 
Instance<RouteBuilder> routes; 

@Inject 
CamelContext context; 

for (RouteBuilder route : routes) 
    route.addRoutes(route); 
+0

あなたの最後のコードは、唯一の自動発見ルートビルダーの中にあると思いますか?あなたはすべて、私が必要とするすべてのコントロールを得るために正しい方向に私を押し込んだ - ありがとう。 – dermoritz

+1

これは実際にアプリケーションにデプロイされたどのBeanでも構いませんが、ブートストラップ時にロジックが実行されるようにするには(CDI Beanが熱心にインスタンス化されないので)、その部分を '@Observes @Initialized (ApplicationScoped.class) 'またはより具体的には' @ Observes CamelContextStartedEvent'を返します。 –

+0

https://issues.apache.org/jira/browse/CAMEL-10391で自動ディスカバリと起動を無効にする方法についての議論が始まりました。 –

関連する問題