第6章 ルーティングコンテキストに別のルートを追加する
このチュートリアルでは、ZooOrderApp
プロジェクトの blueprint.xml
ファイルの Camel コンテキストに 2 番目のルートを追加する方法を説明します。2 番目のルート:
- 最初のルートの otherwise の場合は分岐の終端から直接メッセージ (有効な注文) を受け取ります。
- お客様の国に従って有効なメッセージを並べ替えます。
-
各メッセージを
ZooOrderApp/target/messages
フォルダーの対応する国
フォルダーに送信します。たとえば、シカゴ動物園からの注文は USA フォルダーにコピーされます。
ゴール
このチュートリアルでは、次のタスクを完了します。
- 2 番目のルートに直接接続するために既存のルートを再設定します
- Camel コンテキストに 2 番目のルートを追加します
- 最初のルートのブランチから直接メッセージを受信するように 2 番目のルートを設定します
- コンテンツベースのルーターを 2 番目のルートに追加します
- 2 番目のルートのコンテンツベースルーターの各出力ブランチに、メッセージヘッダー、ロギング、およびターゲット宛先を追加して設定します
前提条件
このチュートリアルを開始するには、次のいずれかの結果である ZooOrderApp プロジェクトが必要です。
5章コンテンツベースのルーターの追加チュートリアルを完了します。
または
-
2章環境の設定チュートリアルを完了し、「リソースファイルについて」に記載されているように、プロジェクトの
blueprint.xml
ファイルを、提供されるblueprintContexts/blueprint2.xml
ファイルに置き換える。
既存のルートのエンドポイントを再設定する
既存のルートは、すべての有効な注文を target/messages/validOrders
フォルダーに送信します。
このセクションでは、既存のルートの Otherwise _elseValid ブランチのエンドポイントを再設定して、代わりに 2 番目のルート (次のセクションで作成します) に接続します。
2 番目のルートと直接接続するように既存のルートを設定するには:
-
ルートエディターで
ZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xml
を開きます。 - キャンバスで、Route_route1 コンテナーを選択して、Properties ビューでそのプロパティーを開きます。
- Shutdown Route プロパティーまで下にスクロールして、Default を選択します。
- キャンバスで、ターミナルファイルノード To_Valid を選択して、そのプロパティーを Properties ビューに表示します。
-
Uri フィールドで既存のテキストを削除して、
direct:OrderFulfillment
を入力します。 -
Id フィールドに
_Fulfill
を入力します。
既存の To_Valid
端末ファイルノードを再使用する代わりに、Components To_Valid
ノードと同じプロパティー値で設定する)。
Direct コンポーネントの詳細は、Apache Camel Component Reference を参照してください。
2 番目のルートを追加する
ルーティングコンテキストに別のルートを追加するには:
- Palette で、Routing ドロワーを開き、Route ( ) パターンをクリックします。
キャンバスで
Route_route1
コンテナーの右をクリックします。キャンバスで Route パターンが
Route_route2
コンテナーノードになります。-
Route_route2
コンテナーノードをクリックして、Properties ビューでそのプロパティーを表示します。プロパティーはそのままにしておきます。 - ファイルを保存します。
ルーティングコンテキストが複雑になるにつれて、作業中はルートエディターを個々のルートに集中させることができます。これを実行するには、Project Explorer で、ルートエディターがキャンバスで表示するルートをダブルクリックします (例: Route_route2
)。
キャンバスにルーティングコンテキストにあるすべてのルートを表示するには、Camel Contexts
フォルダーの上部にあるプロジェクトの .xml
コンテキストファイルエントリー (src/main/resources/OSGI-INF/…
) をダブルクリックします。
米国の注文を処理するための Choice ブランチの設定
このセクションでは、ルートに Choice ブランチを追加し、新しい target/messages/validOrders/USA
フォルダーに USA からの注文を送信するようにルートを設定します。また、メッセージヘッダーとログファイルコンポーネントを設定します。
- Palette で、Components ドロワーを開き、Direct コンポーネントを選択します ( )。
キャンバスで
Route_route2
コンテナーをクリックします。Route_route2
コンテナーが拡張し、Direct コンポーネント (From_from2
ノード) が追加されます。-
キャンバスで
From_from2
ノードをクリックし、Properties ビューでそのプロパティーを開きます。 Uri フィールドで、
name
(direct:
の後) をOrderFulfillment
に置き換え、Idフィールドで、_direct:OrderFulfillment
と入力します。- Palette で、Routing ドロワーを開き、Choice ( ) パターンを選択します。
キャンバスで
From _direct:OrderFulfillment
ノードをクリックします。Route_route2
コンテナーが拡張し、Choice_choice2
ノードが追加されます。Properties ビューで、
Choice_choice2
ノードのプロパティーをそのままにしておきます。- パレットで、Routing ドロワーを開き、When ( ) パターンを選択します。
キャンバスで
Choice_choice2
ノードをクリックします。Choice_choice2
コンテナーが拡張し、When_when2
ノードが追加されます。-
キャンバスで
When_when2
ノードを選択し、Properties ビューでそのプロパティーを開きます。 When_when2
ノードのプロパティーを以下のように設定します。- Expression ドロップダウンリストから xpath を選択します。
-
インデントされた Expression フィールドに、
/order/customer/country = 'USA'
と入力します。 - Trim を有効のままにします。
2 番目の Id フィールドに
_when/usa
と入力します。
- Palette で、Components ドロワーを開き、File ( ) コンポーネントを選択します 。
キャンバスで
When_when/usa
コンテナーをクリックします。When_when/usa
コンテナーが拡張し、To_to1
ノードが追加されます。Properties ビューで:
-
Uri フィールドで、
directoryName
をtarget/messages/validOrders/USA
に置き換えます。 -
Id フィールドに
_US
と入力します。
-
Uri フィールドで、
- ファイルを保存します。
メッセージヘッダーを設定し、ログコンポーネントを追加するには:
- Palette で、Transformation ドロワーを開き、Set Header を選択します。
キャンバスで
When_when/usa
ノードをクリックします。When_when/usa
コンテナーが拡張し、SetHeader_setHeader3
ノードが追加されます。-
キャンバスで
SetHeader_setHeader3
ノードを選択し、Properties ビューでそのプロパティーを開きます。 ノードのプロパティーを次のように設定します。
- Expression ドロップダウンメニューから、constant を選択します。
-
インデントされた Expression フィールドに
USA
と入力します。 - Trim を有効のままにします。
-
Header Name フィールドに
Destination
と入力します。 2 番目の Id フィールドに
_setHead_usa
と入力します。
- Palette で、Components ドロワーを開き、Log コンポーネント ( ) を選択します。
キャンバスで
SetHeader
ノードの上をクリックします。When_when/usa
コンテナーが拡張し、Log_log3
ノードが追加されます。キャンバスで
Log_log3
ノードを選択し、Properties ビューでそのプロパティーを開きます。Properties ビューで:
-
Message フィールドに
Valid order - ship animals to USA customer
と入力します。 -
Id フィールドに
_usa
と入力します。 Logging Level はそのままにします。
-
Message フィールドに
ファイルを保存します。
Route_route2
の USA ブランチは以下のようになります。
ドイツの注文を処理するための Otherwise ブランチの設定
Route_route2
がキャンバスに表示される場合:
- Palette で、Routing ドロワーを開き、Otherwise のパターン ( ) を選択します。
キャンバスで
Choice_choice2
コンテナーをクリックします。Choice_choice2
コンテナーが拡張し、Otherwise_otherwise1
ノードが追加されます。-
Otherwise_otherwise1
ノードを選択し、Properties ビューでそのプロパティーを開きます。 -
Properties ビューで、Id フィールドに
_else/ger
と入力します。 - Palette で、Transformation ドロワーを開き、Set Header パターン ( ) を選択します。
キャンバスで
Otherwise_else/ger
ノードをクリックします。Otherwise_else/ger
コンテナーが拡張し、SetHeader_setHeader3
ノードが追加されます。-
キャンバスで
SetHeader_setHeader3
ノードを選択し、Properties ビューでそのプロパティーを開きます。 Properties ビューで:
- Expression ドロップダウンリストから、constant を選択します。
-
2 番目の Expression フィールドに
Germany
と入力します。 - Trim はそのままにしておきます。
-
Header Name フィールドに
Destination
と入力します。 -
2 番目の Id フィールドに
_setHead_ger
と入力します。
- Palette で、Components ドロワーを開き、Log パターン ( ) を選択します。
キャンバスで、
SetHeader_setHead_ger
ノードの下をクリックします。Otherwise_else/ger
コンテナーが拡張し、Log_log3
ノードが追加されます。必要に応じて、コネクターエラーをLog_log3
ノードからSetHeader_setHead_ger
ノードにドラッグします。-
キャンバスで
Log_log3
ノードを選択し、Properties ビューでそのプロパティーを開きます。 Properties ビューで:
-
Message フィールドに
Valid order - ship animals to Germany customer
と入力します。 -
Id フィールドに
_ger
と入力します。 - Logging Level はそのままにしておきます。
-
Message フィールドに
Components ドロワーで File パターン ( ) を選択し、
Log_ger
ノードの下をクリックします。Otherwise_else/ger
コンテナーが拡張し、To_to1
ノードが追加されます。必要に応じて、コネクターエラーをSetHeader_setHead_ger
ノードからTo_to1
ノードにドラッグします。-
キャンバスで
To_to1
ノードを選択し、Properties ビューでそのプロパティーを開きます。 Properties ビューで:
-
Uri フィールドで、
directoryName
をtarget/messages/validOrders/Germany
に置き換えます。 -
Id フィールドに
_GER
と入力します。
-
Uri フィールドで、
- ファイルを保存します。
Route_route2
のドイツブランチは以下のようになります。
2 番目のルートを確認する
キャンバス上のルートは次のようになります。
完成したルート 1
完成したルート 2
キャンバスの下部にある Source タブで、camelContext 要素の XML は次のようになります。例6.1「デュアルルートコンテンツベースルーターの XML」:
例6.1 デュアルルートコンテンツベースルーターの XML
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd"> <camelContext id="_context1" xmlns="http://camel.apache.org/schema/blueprint"> <route id="_route1" shutdownRoute="Default"> <from id="_from1" uri="file:src/data?noop=true"/> <choice id="_choice1"> <when id="_when1"> <xpath>/order/orderline/quantity/text() > 10</xpath> <log id="_log1" message="The quantity requested exceeds the maximum allowed - contact customer."/> <setHeader headerName="Destination" id="_setHeader1"> <constant>Invalid</constant> </setHeader> <to id="_Invalid" uri="file:target/messages/invalidOrders"/> </when> <otherwise id="_elseValid"> <log id="_log2" message="This is a valid order - OK to process."/> <setHeader headerName="Destination" id="_setHeader2"> <constant>ReadyForDispatcher</constant> </setHeader> <to id="_Fulfill" uri="direct:OrderFulfillment"/> </otherwise> </choice> </route> <route id="_route2"> <from id="_direct:OrderFulfillment" uri="direct:OrderFulfillment"/> <choice id="_choice2"> <when id="when/usa"> <xpath>/order/customer/country = 'USA'</xpath> <log id="_usa" message="Valid order - ship animals to USA customer"/> <setHeader headerName="Destination" id="_setHead_usa"> <constant>USA</constant> </setHeader> <to id="_US" uri="file:target/messages/validOrders/USA"/> </when> <otherwise id="_else/ger"> <log id="_ger" message="Valid order - ship animals to Germany customer"/> <setHeader headerName="Destination" id="_setHead_ger"> <constant>Germany</constant> </setHeader> <to id="_GER" uri="file:target/messages/validOrders/Germany"/> </otherwise> </choice> </route> </camelContext> </blueprint>
ツールが shutdownRoute=" "
属性を 2 番目のルート要素 (<route id="route2">
) に追加した場合は、その属性を削除します。そうしないと、ZooOrderApp
プロジェクトの実行に失敗する可能性があります。
更新されたプロジェクトが期待どおりに機能することを確認するには、次の手順に従います。
-
ZooOrderApp/Camel Contexts/blueprint.xml
をローカルの Camel コンテキスト (テストなし) として実行します。 コンソールの出力の終わりを確認します。次の行が表示されます。
ターゲットの宛先フォルダーを確認して、ルートが正しく実行されたことを確認します。
-
Project Explorer で
ZooOrderApp
を右クリックし、Refresh を選択します。 target/messages/
フォルダーを展開します。message*.xml
ファイルが以下のように宛先フォルダー内で分散されるはずです。図6.1 プロジェクトエクスプローラーでのターゲットメッセージの宛先
-
Project Explorer で
次のステップ
次のチュートリアル 7章ルーティングコンテキストのデバッグでは、Fuse Tooling デバッガーの使用方法を学習します。