311.3. 他の XML ファイルからルートをインポートする方法


Camel 2.3 の時点で利用可能

Xml 設定 を使用して Camel でルートを定義する場合、他の XML ファイルでいくつかのルートを定義したい場合があります。たとえば、多くのルートがあり、一部のルートが個別の XML ファイルにあると、アプリケーションを維持するのに役立つ場合があります。必要に応じて簡単にインポートできる、共通の再利用可能なルートを他の XML ファイルに保存することもできます。

Camel 2.3 では、新しい <routeContext/> タグで <camelContext/> の外側でルートを定義できるようになりました。

注意: <routeContext> を使用すると、それらは分離され、既存の <onException>、<intercept>、<dataFormats>、および <camelContext> で定義された同様のクロスカット機能を再利用できません。つまり、<routeContext> は現在分離されています。これは Camel 3.x で変更される可能性があります。

たとえば、次のように、いくつかのルートを含む myCoolRoutes.xml という名前のファイルを作成できます。

myCoolRoutes.xml

次に、CamelContext を含む XML ファイルで、Spring を使用して myCoolRoute.xml ファイルをインポートできます。
<camelContext/> 内では、以下に示すように、ID で <routeContext/> を参照できます。

また、CamelContext 内にルートを持ち、RouteContext で外部化することもできます。

<routeContextRef/> は 好きなだけ持つことができます。

再利用可能なルート

<routeContext/> で定義されたルートは、複数の <camelContext/> で再利用できます。ただし、再利用されるのはその定義だけです。実行時に、各 CamelContext は定義に基づいてルートの独自のインスタンスを作成します。

311.3.1. テスト時間の除外。

テスト時に、テストシナリオに適用できない、または有用でない一致するルートを初期化から選択的に除外できることが望ましい場合がよくあります。たとえば、Spring コンテキストファイル routes-context.xml と、org.example.routes パッケージ内の 3 つのルートビルダー RouteA、RouteB、および RouteC を使用できます。packageScan 定義は、これら 3 つのルートすべてを検出して初期化します。

RouteC はテストシナリオには適用できず、テスト中に多くのノイズが発生するとします。この特定のテストからこのルートを除外できると便利です。これを可能にするために、SpringTestSupport クラスが変更されました。単一のクラスまたはクラスの配列を除外するためにオーバーライドできる 2 つのメソッド (excludedRoute および excludeRoutes) を提供します。

public class RouteAandRouteBOnlyTest extends SpringTestSupport {
    @Override
    protected Class excludeRoute() {
        return RouteC.class;
    }
}

spring による camelContext 初期化にフックして MyExcludedRouteBuilder.class を除外するには、spring コンテキストの作成をインターセプトする必要があります。createApplicationContext をオーバーライドして Spring コンテキストを作成する場合、getRouteExclusiveApplicationContext() メソッドを呼び出して、除外を処理する特別な親 Spring コンテキストを提供します。

@Override
protected AbstractXmlApplicationContext createApplicationContext() {
    return new ClassPathXmlApplicationContext(new String[] {"routes-context.xml"}, getRouteExcludingApplicationContext());
}

RouteC は初期化から除外されます。同様に、RouteC のみをテストする別のテストでは、RouteB と RouteA をオーバーライドして除外できます。

@Override
protected Class[] excludeRoutes() {
    return new Class[]{RouteA.class, RouteB.class};
}
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.