だから何が(ヒューズ上の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);
私は混乱します。なぜあなたのルートビルダーを発見したくないのですか?ラクダのCDの背後にある点は、あなたのために見上げることです。 hawt.ioのような他のコンポーネントを起動する必要がある場合は、CDIライフサイクルで管理されている独自のコンポーネントにする必要があります。例を挙げるのに役立つかもしれません。 –
私はいくつかのコンテキストスコープ設定をすべてのルートが始まる前にやりたいからです。例えば。ルートポリシーと自動起動の動作。通常、私は、ルーティングしていないが、他のルートを含む1つのメインルートを持っています。 – dermoritz