TryCatch ノードにおける例外のキャッチ

例外が入力ノードに戻される前に、メッセージ・フローで例外をキャッチするための設計を行えます。 1 つのフローの中に 1 つ以上の TryCatch ノードを組み込めば、一連のノードのための Single Point of Failure 機能を用意できます。 この技法によって、非常に具体的なエラー処理とリカバリーが可能になります。

TryCatch ノードは、メッセージ・フローの中である種の判断を行うポイントになるだけで、実際のメッセージ処理は行いません。 TryCatch ノードはメッセージを受信すると、そのメッセージを try ターミナルへ伝搬します。 ブローカーは、そのターミナルに接続している一連のノード (try フロー) に制御を渡します。

例外が try フローで生成されると、ブローカーは制御を TryCatch ノードに戻します。 このノードは、ExceptionList の現行内容をローカル・エラー・ログに書き込み、現行例外に関する情報を ExceptionList に書き込みます (保管されている情報に上書きします)。

このノードは次に、catch ターミナルに接続している一連のノード (catch フロー) にそのメッセージを伝搬します。 ここで伝搬されるメッセージ・ツリーの内容は、try ターミナルに伝搬された内容、つまり TryCatch ノードが最初に受け取った時のツリーの内容と同一です。 このノードは、ExceptionList に書き込んだ新しい例外情報でこのツリーを更新します。 try フローにある各ノードがメッセージ・ツリーに対して行った変更や追加は、catch フローに伝搬されるメッセージ・ツリーには反映されません。

ただし、try フローが外部データベースの更新を伴う処理を完了していた場合、その更新内容は失われません。 catch フローによってメッセージが処理されている間、更新はそのまま保持され、更新をコミットするかロールバックするかの決定が、メッセージ・フローの構成内容と、対象データベースと対話する個々のノードの構成内容に基づいて行われます。 設定した構成内容に基づいて更新がコミットされる場合は、行われた変更をロールバックするためのロジックを catch フロー内に組み込む必要があります。

構成オプションを確認するには、整合されたメッセージ・フローのためのノードの構成を参照してください。

ブローカーがメッセージ・フロー内の次のキャッチ・ポイント (別の TryCatch ノードの場合もありますが、最後のノードの場合は常に入力ノードになります) に制御を戻すのは、以下の場合です。

以下の例では、入力ノードで例外をキャッチするためのフロー構成の方法を示します。 まず、MQInput ノードの catch ターミナルを、エラーを記録するための Trace ノードに接続します。


このメッセージ・フローには、MQInput ノード、Compute ノード、MQOutput ノードがあります。MQInput ノードの catch ターミナルは、Trace ノードに接続されています。

以下の例では、メッセージ・フローの中に 2 つの処理フローがあります。 つまり、Filter ノードの true ターミナルに接続されている処理フローと、false ターミナルに接続されている処理フローです。 ここでは、メッセージの 2 つの経路にそれぞれ TryCatch ノードを組み込みます。 そして、両方の TryCatch ターミナルの catch ターミナルを共通のエラー処理サブフローに接続します。


このメッセージ・フローには MQInput ノードがあり、その後に、メッセージ内の値を検査するためにコーディングされた Filter ノードがあります。TryCatch ノードは、Filter ノードの true ターミナルに接続しており、その try ターミナルは Compute ノードに接続しており、その後に MQOutput ターミナルが続いています。 その catch ターミナルは、共通のエラー処理ルーチンを用意した error1 というサブフローに接続しています。 2 番目の TryCatch ターミナルは、Filter ノードの false ターミナルに接続しています。 その try ターミナルと catch ターミナルは、最初の TryCatch ターミナルと同じ一連のノードに接続しています。

メッセージ・フロー内の入力ノードに catch ターミナルがない場合 (Real-timeInput などの場合) に、そのフロー内でエラーを処理するには、TryCatch ノードを組み込む必要があります。 以下の例では、このエラー処理を行うために、どのようにフローに接続できるかを示しています。 この例の場合は、キャッチした例外を調べて、動的に出力キュー名を設定するために、catch フロー内の Compute ノードに ESQL を構成しています。


このメッセージ・フローには、Real-timeInput ノードがあり、その後に TryCatch ノードがあります。TryCatch ノードの try ターミナルは、通常の out フロー (Compute の後に Publication が続く) に接続しており、catch ターミナルは、catch フロー (Trace の後に Compute が続き、さらに MQOutput が続く) に接続しています。
関連概念
メッセージ・フローの概要
デプロイメントの概要
関連タスク
サブフローの使用
メッセージ・フローの作成
メッセージ・フローの内容の定義
構成可能プロパティーの編集
整合されたメッセージ・フローのためのノードの構成
集約フロー内の例外の処理
関連資料
組み込みノード
WebSphere MQ Enterprise Transport
WebSphere MQ Mobile Transport
WebSphere MQ Multicast Transport
WebSphere MQ Real-time Transport
WebSphere MQ Telemetry Transport
WebSphere MQ Web Services Transport
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac18880_