第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 キャンバスで) ) パターンをクリックし、(Design キャンバスで)- From_from1ノードをクリックします。- Route_route1コンテナーが拡張し、- Choice_choice1ノードが追加されます。エラーアイコンは、- Choice_choice1ノードに子ノードが必要なことを示しています。子ノードは、次のステップで追加します。
- Routing ドロワーから、When (  ) パターンをクリックし、キャンバスで ) パターンをクリックし、キャンバスで- Choice_choice1ノードをクリックします。- Choice_choice1コンテナーが拡張し、- When_when1ノードが追加されます。- When_when1ノードに付随する は、1 つまたは複数の必要なプロパティー値を設定する必要があることを示しています。
				注記 は、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 フィールドのボタンをクリックして使用可能な言語のリストを開き、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 を選択します。 ボタンをクリックして、使用可能な言語のリストを開き、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 番目のルートを追加します。
 
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    