集約フロー内の例外の処理

集約フローを使用する場合、例外が生じることがあります。このトピックでは、この対処方法について説明します。

始める前に:

このタスクを完了するには、以下のタスクを完了している必要があります。

例外の処理

AggregateReply ノードのダウンストリームでエラーが検出される場合、ブローカーは例外をスローします。 また、メッセージ・フロー内の別のノードも、ESQL THROW ステートメントを使用して例外をスローします。 いずれの場合にも、例外がスローされた場合、それは以下の 2 つの場所のどちらかでキャッチされます。

  • 応答が到着する入力ノード
  • AggregateReply ノード

下の表では、イベントと、AggregateReply ノードのダウンストリームにスローされた例外に生じる事柄をリストしています。

イベント 伝搬されるメッセージ 出力ターミナル 例外がキャッチされる場所
予期された応答が入力ノードに到着し、AggregateReply ノードの In ターミナルに渡される。 これが集約の完成に必要な最後の応答。 すべての応答を含む集約された応答メッセージ Out Input ノード
予期しない応答が入力ノードに到着し、AggregateReply ノードに渡される。 これが有効な応答として認識されず、 「不明なメッセージ・タイムアウト」プロパティーが 0 に設定されている。 受け取られたメッセージ Unknown Input ノード
集約のすべての応答がまだ到着していないのでタイムアウトが生じる。 受け取ったすべての応答を含む集約された応答メッセージ Timeout AggregateReply ノード
保持されたメッセージが有効な応答と認識されなかったために、不明タイムアウトが生じる。 保持されたメッセージ Unknown AggregateReply ノード
最後の応答が到着したとき以外に、集約の完成したことが判明した。 すべての応答を含む集約された応答メッセージ Out AggregateReply ノード

集約フローで生じるエラーを処理する場合、 メッセージ・フローのそれぞれのノードのインスタンスすべてにおいて、 これらの例外をキャッチする必要があります。 これを行うには、次のようにします。

  1. 「ブローカー・アプリケーション開発」パースペクティブに切り替えます。
  2. 作業するメッセージ・フローを開きます。
  3. これらの例外を自分で処理したい場合、 それぞれの入力および AggregateReply ノードの catch ターミナルを、 発生したエラーを処理するノードのシーケンスに接続します。

    エラー処理に対する統合アプローチを行うには、これらのノードすべての catch ターミナルをノードの単一シーケンスに接続するか、または 1 つの一貫した方法でエラーを処理するサブフローを作成し、それをそれぞれの catch ターミナルに接続します。

  4. ブローカーにデフォルトのエラー処理を使用してこれらの例外を処理させる場合には、これらのノードの catch ターミナルを接続しないでください。
AggregateReply ノードの catch ターミナルを接続し、 このターミナルを介して伝搬されるメッセージを後で処理するために検索できる宛先に出力したい場合は、 トランスポート固有の処理を行うために Compute ノードを catch フローに組み込む必要があります。 例えば、メッセージを MQOutput ノードから WebSphere MQ キューに書き込みたい場合は、MQMD ヘッダーを追加する必要があります。

以下の ESQL の例は、 MQMD ヘッダーを追加して、AggregateReply ノードが受信する応答を渡す方法を示しています。

-- Add MQMD
SET OutputRoot.MQMD.Version = 2;
.
-- Include consolidated replies in the output message
SET OutputRoot.XML.Data.Parsed = InputRoot.ComIbmAggregateReplyBody;
.

例外についての情報を出力メッセージで伝搬したい場合は、 Compute ノードの 「計算モード」プロパティーに 「例外」 を含む値を設定する必要もあります。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac12340_