Den untergeordneten Nachrichtenfluss zur Fehlerbehandlung erstellen

Befolgen Sie die nachfolgenden Anweisungen, um den untergeordneten Nachrichtenfluss zur Fehlerbehandlung zu erstellen. Ausführlichere Anweisungen erhalten Sie jeweils über die Links am Ende eines jeden Schritts.

  1. Erstellen Sie ein neues Nachrichtenbrokerprojekt namens 'Error Handler Message Flows'.
    Hinweise finden Sie im Abschnitt Nachrichtenflussprojekte erstellen in der WebSphere Message Broker-Dokumentation.
  2. Erstellen Sie einen neuen Nachrichtenfluss namens 'Error_Handler'.
    Anweisungen hierzu finden Sie in der Dokumentation zu WebSphere Message Broker im Abschnitt Nachrichtenfluss erstellen.
  3. Fügen Sie im Nachrichtenflusseditor die in der folgenden Tabelle aufgelisteten Knoten hinzu und benennen Sie diese um.
    Die entsprechenden Anweisungen finden Sie in der WebSphere Message Broker-Dokumentation unter Nachrichtenflussknoten hinzufügen.
    Hinweis: Der Empfangs- bzw. Sendeknoten in der Tabelle unterscheidet sich vom MQInput- bzw. MQOutput-Knoten.
    Alle untergeordneten Nachrichtenflüsse starten mit einem Empfangsknoten und enden mit einem Sendeknoten.
    Palettenfächer Knotentyp Knotenname
    Aufbau Input Start Subflfow
    Routing Filter Check Backout Count
    Aufbau TryCatch TryCatch
    Transformation Rechnen Copy Message
    Aufbau Throw Throw To Complete Rollback
    Aufbau Output Back To Main Flow
    Aufbau Output STAFF_UPDATE_ERROR
  4. Verbinden Sie die Knoten wie in der folgenden Tabelle angegeben.
    Anweisungen hierzu finden Sie in der Dokumentation zu WebSphere Message Broker im Abschnitt Nachrichtenflussknoten verbinden.
    Anhand des Diagramms unter Informationen zum Mustercode 'Error Handler' können Sie überprüfen, ob die Knoten korrekt verbunden sind.
    Knotenname Terminal Mit diesem Knoten verbinden
    Input Ausgangsterminal Check Backout Count
    Check Backout Count True TryCatch
    TryCatch Try Back To Main Flow
    Abfangterminal Copy Message
    Copy Message Ausgangsterminal STAFF_UPDATE_ERROR
    STAFF_UPDATE_ERROR Ausgangsterminal Throw To Complete Rollback
  5. Konfigurieren Sie die Knoteneigenschaften wie in der folgenden Tabelle angegeben. Akzeptieren Sie die Standardwerte für alle Eigenschaften, es sein denn, es ist ein alternativer Wert in der Tabelle aufgeführt.
    Anweisungen hierzu finden Sie in der Dokumentation von WebSphere Message Broker im Abschnitt Nachrichtenflussknoten konfigurieren.
    Knotenname Seite Eigenschaft Wert
    STAFF_UPDATE_ERROR Erweitert Transaktionsmodus no
    Throw To Complete Rollback Grundeinstellung Nachrichtennummer 3002
    Grundeinstellung Nachrichtentext Vom Nachrichtenfluss 'Error_Handler'.
  6. Klicken Sie im Projekt 'Error Handler Message Flows' doppelt auf die Datei Error_Handler.esql, um sie im ESQL-Editor zu öffnen. Kopieren Sie die im Folgenden wiedergegebenen ESQL-Code-Module in die ESQL-Datei und speichern Sie dann die Datei. Weitere Informationen hierzu finden Sie in der WebSphere Message Broker-Dokumentation unter ESQL erstellen.
    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. Speichern Sie den Nachrichtenfluss.
Sie können jetzt den Hauptnachrichtenfluss erstellen, der den untergeordneten Nachrichtenfluss zur Fehlerbehandlung enthält (siehe Hauptnachrichtenfluss erstellen).

Zurück zur Erstellung des Mustercodes 'Error Handler'