第5章 コンテンツベースのルーターの追加
このチュートリアルでは、Content-Based Router (CBR) を追加してルートにログを記録する方法を示します。
CBR は、そのコンテンツに基づいてメッセージを宛先にルーティングします。このチュートリアルでは、作成する CBR は、各メッセージの数量フィールドの値 (注文された動物の数) に基づいて、メッセージをさまざまなフォルダー (有効または無効) にルーティングします。各注文の動物の最大値は 10 です。CBR は、数量が 10 より大きいかどうかに応じて、メッセージをさまざまなフォルダーにルーティングします。例えば、ある動物園が 5 頭のシマウマを注文し、3 頭のシマウマしか入手できなかった場合、注文は無効な注文先フォルダーにコピーされます。
ゴール リンクのコピーリンクがクリップボードにコピーされました!
このチュートリアルでは、次のタスクを完了します。
- ルートにコンテンツベースのルーターを追加します
コンテンツベースのルーターを設定します。
- コンテンツベースルーターの各出力ブランチにログエンドポイントを追加します
- 各ログエンドポイントの後に Set Header EIP を追加します
- それ以外の場合は、コンテンツベースのルーターにブランチを追加します
前提条件 リンクのコピーリンクがクリップボードにコピーされました!
このチュートリアルを開始するには、次のいずれかの結果である ZooOrderApp プロジェクトが必要です。
4章ルートの実行 チュートリアルを終了します。
あるいは、以下のような場合もあります。
-
2章環境の設定チュートリアルを完了し、「リソースファイルについて」に記載されているように、プロジェクトの
blueprint.xmlファイルを、提供されるblueprintContexts/blueprint1.xmlファイルに置き換える。
コンテンツベースルーターの追加と設定 リンクのコピーリンクがクリップボードにコピーされました!
ルートにコンテンツベースのルーターを追加して設定するには、次の手順に従います。
-
Project Explorer で
ZooOrderApp/src/main/resources/OSGI-INF/blueprint/blueprint.xmlをダブルクリックして Editor ビューで開きます。 -
Design キャンバスで
To_Receivedノードを選択し、ごみ箱アイコンを選択して削除します。 Palette で Routing ドロワーを開き、Choice (
) パターンをクリックし、(Design キャンバスで) From_from1ノードをクリックします。Route_route1コンテナーが拡張し、Choice_choice1ノードが追加されます。エラーアイコンは、Choice_choice1ノードに子ノードが必要なことを示しています。子ノードは、次のステップで追加します。Routing ドロワーから、When (
) パターンをクリックし、キャンバスで Choice_choice1ノードをクリックします。Choice_choice1コンテナーが拡張し、When_when1ノードが追加されます。When_when1ノードに付随する
は、1 つまたは複数の必要なプロパティー値を設定する必要があることを示しています。
注記このツールは、ルートコンテナーの無効なドロップポイントにパターンを追加することを防ぎます。
キャンバスで
When_when1ノードを選択し、Properties ビューでそのプロパティーを開きます。-
Expression フィールドの
ボタンをクリックして、使用可能なオプションのリストを開きます。
テストメッセージは XML で記述されているため、xpath (XML クエリー言語の場合) を選択します。
注記Expression を選択すると、Properties ビューに、Expression フィールドのすぐ下のインデントされたリストにそのプロパティーが表示されます。このインデントされたリストの Id プロパティーは、式の ID を設定します。Description フィールドに続く Id プロパティーによって
Whenノードの ID が設定されます。インデントされた Expression フィールドに、
/order/orderline/quantity/text() > 10と入力します。この式は、quantity フィールドの値が 10 より大きいメッセージのみが、ルート内のこのパスを (invalidOrders フォルダーに) 移動することを指定します。
残りの各プロパティーはそのままにしておきます。
注記Trim オプション (デフォルトで有効) は、メッセージから先頭または末尾の空白と改行を削除します。
- ルーティングコンテキストファイルを Save します。
Source タブをクリックして、ルートの XML を表示します。
ロギングの追加と設定 リンクのコピーリンクがクリップボードにコピーされました!
ZooOrder アプリケーションの例では、ログメッセージを追加して、ルートを通過するときに XML メッセージを追跡できるようにします。ルートを実行すると、ログメッセージが Console ビューに表示されます。
次の手順に従って、CBR ルートにロギングを追加します。
-
Design タブの Palette で、Components ドロワーを開き、Log コンポーネント (
) をクリックします。
キャンバスで
When_when1ノードをクリックします。When_when1コンテナーが拡張し、Log_log1ノードが追加されます。-
キャンバスで
Log_log1ノードを選択し、Properties ビューでそのプロパティーを開きます。 Message フィールドで、
The quantity requested exceeds the maximum allowed - contact customer.と入力します。
残りのプロパティーはそのままにしておきます。
+
ツールは、ログノード id 値を自動生成します。Fuse Integration パースペクティブの Messages ビューで、ルートでトレースが有効になっている場合、ツールはメッセージインスタンスの Trace Node Id 列にログノードの Id フィールドのコンテンツを挿入します (8章ルートを介したメッセージのトレース チュートリアルを参照してください)。Console では、ルートが実行されるたびに、ログノードの Message フィールドのコンテンツがログデータに追加されます。
- ルーティングコンテキストファイルを Save します。
メッセージヘッダーの追加と設定 リンクのコピーリンクがクリップボードにコピーされました!
メッセージヘッダーには、メッセージを処理するための情報が含まれています。
メッセージヘッダーを追加および設定するには:
-
Palette で、Transformation ドロワーを開き、Set Header (
) パターンをクリックします。
キャンバスで
Log_log1ノードをクリックします。When_when1コンテナーが拡張し、SetHeader_setHeader1ノードが追加されます。キャンバスで
SetHeader_setHeader1ノードを選択し、Properties ビューでそのプロパティーを開きます。-
Expression フィールドのボタンをクリックして使用可能な言語のリストを開き、constant を選択します。
-
インデントされた Expression フィールドに
Invalidと入力します。 -
Header Name フィールドに
Destinationと入力します。 残りのプロパティーはそのままにしておきます。
-
Palette で、Components ドロワーを開き、File (
) コンポーネントをクリックします。
キャンバスで
SetHeader_setHeader1ノードをクリックします。When_when1コンテナーが拡張し、To_to1ノードが追加されます。キャンバスで
To_to1ノードを選択し、Properties ビューでそのプロパティーを開きます。Details タブで、directoryName を Uri フィールドの
target/messages/invalidOrdersに置き換え、Id フィールドに_Invalidと入力します。- ルーティングコンテキストファイルを Save します。
Source タブをクリックして、ルートの XML を表示します。
有効な注文を処理するためのブランチの追加と設定 リンクのコピーリンクがクリップボードにコピーされました!
これまでのところ、CBR は無効な注文 (数量の値が 10 より大きい注文) を含むメッセージを処理します。
有効な注文 (つまり、When_when1 ノードに設定された XPath 式と一致しない XML メッセージ) を処理するようにルートのブランチを追加および設定するには、次のようにします。
-
Palette で、Routing ドロワーを開き、Otherwise (
) パターンをクリックします。
キャンバスで
Choice_choice1コンテナーをクリックします。Choice_choice1コンテナーが拡張し、Otherwise_otherwise1ノードが追加されます。-
キャンバスで
Otherwise_otherwise1ノードを選択し、Properties ビューでそのプロパティーを開きます。 Id フィールドで、
_otherwise1を_elseValidに変更します。
それ以外のブランチのロギングを設定するには、次のようにします。
-
Palette で、Components ドロワーを開き、Log (
) コンポーネントをクリックします。
キャンバスで
Otherwise_elseValidノードをクリックします。Otherwise-elseValidコンテナーが拡張し、Log_log2ノードが追加されます。-
キャンバスで
Log_log2ノードを選択し、Properties ビューでそのプロパティーを開きます。 Message フィールドに、
This is a valid order - OK to process.と入力します。残りのプロパティーはそのままにしておきます。
- ルートを Save します。
それ以外のブランチのメッセージヘッダーを設定するには、次の手順に従います。
- Palette で、Transformation ドロワーを開き、Set Header パターンをクリックします。
キャンバスで
Log_log2ノードをクリックします。Otherwise_elseValidコンテナーが拡張し、SetHeader_setHeader2ノードが追加されます。注記ダイアグラムが混雑したときに、コンテナーを閉じてスペースを解放できます。これを行うには、閉じるコンテナーを選択し、そのコンテナーの
ボタンをクリックします。
コンテナーを再度開くには、コンテナーを選択して、
ボタンをクリックします。
Design タブでコンテナーを閉じたり開いたりしても、ルーティングコンテキストファイルには影響しません。変更はありません。
-
キャンバスで
SetHeader_setHeader2ノードを選択し、Properties ビューでそのプロパティーを開きます。 -
Expression フィールドの
ボタンをクリックして、使用可能な言語のリストを開き、constant を選択します。
-
インデントされた Expression フィールドに
ReadyForDispatcherと入力します。 -
Header Name フィールドに
Destinationと入力します。 残りのプロパティーはそのままにしておきます。
有効なメッセージのターゲットフォルダーを指定するには、次の手順に従います。
-
Palette で、Components ドロワーを開き、File (
) コンポーネントを選択します。
キャンバスで
SetHeader_setHeader2ノードをクリックします。Otherwise_elseValidコンテナーが拡張し、To_to1ノードが追加されます。-
キャンバスで
To_to1ノードを選択し、Properties ビューでそのプロパティーを開きます。 URI フィールドの directoryName を
target/messages/validOrdersに置き換え、Id フィールドに_Validと入力します。ルーティングコンテキストファイルを Save します。
完成したコンテンツベースのルーターは次のようになります。
キャンバスの左下にある Source タブをクリックして、ルートの XML を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
CBR の検証 リンクのコピーリンクがクリップボードにコピーされました!
「ルートを実行する」チュートリアルで説明したように新しいルートを実行し、Console ビューでログメッセージを確認することができます。
実行後、ルートが正しく実行されたかどうかを確認するには、Project Explorer でターゲットの宛先フォルダーを確認します。
-
ZooOrderAppを選択します。 - それを右クリックしてコンテキストメニューを開き、Refresh を選択します。
プロジェクトの root ノード (
ZooOrderApp) でtarget/messages/フォルダーを見つけ、デプロイメントします。target/messages/invalidOrdersフォルダーにmessage1.xmlおよびmessage3.xmlが含まれることを確認します。これらのメッセージでは、
quantity要素の値は 10 を超えます。target/messages/validOrdersフォルダーに有効な注文が含まれる 4 つのメッセージファイルが含まれていることを確認します。-
message2.xml -
message4.xml -
message5.xml message6.xmlこれらのメッセージでは、
quantity要素の値は 10 以下です。注記メッセージの内容を表示するには、各メッセージをダブルクリックして、ルートエディターの XML エディターで開きます。
-
次のステップ リンクのコピーリンクがクリップボードにコピーされました!
次のチュートリアル 6章ルーティングコンテキストに別のルートを追加する では、有効な注文メッセージをさらに処理する 2 番目のルートを追加します。