エラー処理サブフローの作成

エラー処理サブフローを作成するには、以下の手順に従ってください。 詳細な指示については、各ステップの終わりにあるリンクをクリックしてください。

  1. Error Handler Message Flows という名前の新しいメッセージ・ブローカー・プロジェクトを作成します。
    手順については、WebSphere Message Broker 資料の メッセージ・ブローカー・プロジェクトの作成を参照してください。
  2. Error_Handler という新規のメッセージ・フローを作成します。
    手順については、WebSphere Message Broker 資料の メッセージ・フローの作成を参照してください。
  3. メッセージ・フロー・エディターで、次の表にリストされているノードを追加して名前変更します。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの追加を参照してください。
    注: 表の Input および Output は、MQInput と MQOutput とは異なります。
    すべてのサブフローは Input ノードで開始し、Output ノードで終了します。
    パレット・ドロワー ノード・タイプ ノード名
    Construction Input Start Subflow
    Routing Filter Check Backout Count
    Construction TryCatch TryCatch
    Transformation Compute Copy Message
    Construction Throw Throw To Complete Rollback
    Construction Output Back To Main Flow
    Construction Output STAFF_UPDATE_ERROR
  4. 次の表に示されているように、ノードを接続します。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの接続を参照してください。
    ノードが正しく接続されたかどうかを確認するには、Error Handler サンプルについての図を 参照してください。
    ノード名 ターミナル 接続先のノード
    Input Out Check Backout Count
    Check Backout Count True TryCatch
    TryCatch Try Back To Main Flow
    Catch Copy Message
    Copy Message Out STAFF_UPDATE_ERROR
    STAFF_UPDATE_ERROR Out Throw To Complete Rollback
  5. 次の表に示されているように、ノードのプロパティーを構成します。この表に代替値が示されていなければ、すべてのプロパティーに関してデフォルト値を受け入れます。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの構成を参照してください。
    ノード名 ページ プロパティー
    STAFF_UPDATE_ERROR 拡張 トランザクション・モード いいえ
    Throw To Complete Rollback 基本 メッセージ番号 3002
    基本 メッセージ・テキスト Error_Handler メッセージ・フローから。
  6. 「Error Handler Message Flows」プロジェクトで、「Error_Handler.esql」ファイルをダブルクリックして、ESQL エディターで開きます。以下の ESQL コード・モジュールを ESQL ファイルにコピー、および貼り付けし、ファイルを保存します。詳しくは、WebSphere Message Broker 資料の ESQL の開発を参照してください。
    CREATE FILTER MODULE Error_Handler_Filter
       CREATE FUNCTION Main() RETURNS BOOLEAN
       BEGIN
          IF Root.MQMD.BackoutCount='0' THEN
          RETURN TRUE;
          ELSE
             RETURN FALSE;
          END IF;
       END;
    END MODULE;
    
    CREATE DATABASE MODULE Error_Handler_Database
    CREATE FUNCTION Main() RETURNS BOOLEAN
    BEGIN
    
    DECLARE Error INTEGER;
    DECLARE Text CHARACTER;
    DECLARE Place INTEGER;
    DECLARE LastPlace INTEGER;
    DECLARE NodeName CHARACTER;
    DECLARE Label CHARACTER;
    DECLARE FlowName CHARACTER;
    
    -- Set the start point
    DECLARE start REFERENCE TO ExceptionList.*[1];
    WHILE start.Number IS NOT NULL DO 
       SET Error = start.Number;
          IF Error = 3001 THEN
             SET Text = SUBSTRING(start.Insert.Text FROM 1 FOR 250);
             ELSE
             SET Text = SUBSTRING(start.Text FROM 1 FOR 250);
          END IF;
       SET Label = start.Label;
       SET Place = POSITION('.' IN Label);
       SET LastPlace = Place;
          WHILE Place <> 0 DO
             SET Label=SUBSTRING(Label FROM (Place+1));
             SET Place=POSITION('.' IN Label);
             SET LastPlace = LastPlace + Place;
          END WHILE;
       SET Label=start.Label;
       SET FlowName=SUBSTRING(Label FROM 1 FOR (LastPlace-1));
       SET NodeName=SUBSTRING(Label FROM (LastPlace+1));
    -- Move start to the last child of the field to which it currently points
              MOVE start LASTCHILD;
    END WHILE;
    INSERT INTO Database.ERRORS(MSGID,TEXT,ERRORNUM, ERRORDATE,MSGDATA,FLOWNAME,NODENAME)
    VALUES(CAST(Root.MQMD.MsgId AS BLOB),Text,Error,CURRENT_TIMESTAMP,BITSTREAM(Root),
    FlowName,NodeName);
          RETURN TRUE;
       END;
    END MODULE
    
    CREATE COMPUTE MODULE Error_Handler_Compute
    CREATE FUNCTION Main() RETURNS BOOLEAN
    BEGIN
    CALL CopyMessageHeaders();
    CALL CopyEntireMessage();
    RETURN TRUE;
    END;
    
    CREATE PROCEDURE CopyMessageHeaders() BEGIN
    DECLARE I INTEGER 1;
    DECLARE J INTEGER;
    SET J = CARDINALITY(InputRoot.*[]);
    WHILE I < J DO
    SET OutputRoot.*[I] = InputRoot.*[I];
    SET I = I + 1;
    END WHILE;
    END;
    
    CREATE PROCEDURE CopyEntireMessage() BEGIN
    SET OutputRoot = InputRoot;
    END;
    END MODULE;
    
  7. メッセージ・フローを保存します。
これで、エラー処理サブフローを組み込むメイン・メッセージ・フローを作成できるようになりました。 メイン・メッセージ・フローの作成を参照してください。

Error Handler サンプルの作成に戻る