第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 NodeId 列にログノードの 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 番目のルートを追加します。