Crear el subflujo de manejo de errores

Utilice las siguientes instrucciones para crear el subflujo de manejo de errores. Para obtener instrucciones más detalladas, pulse en los enlaces que se proporcionan al final de cada paso.

  1. Cree un nuevo proyecto de Message Broker llamado Error Handler Message Flows.
    Para obtener instrucciones, consulte Creación de un proyecto de Message Broker en la documentación de WebSphere Message Broker.
  2. Cree un nuevo flujo de mensajes llamado Error_Handler.
    Para obtener instrucciones, consulte Crear un flujo de mensajes en la documentación de WebSphere Message Broker.
  3. En el Editor de flujos de mensajes, añada y renombre los nodos que se listan en la siguiente tabla.
    Para obtener instrucciones, consulte Añadir un nodo en un flujo de mensajes en la documentación de WebSphere Message Broker.
    Nota: los nodos Input y Output de la tabla son diferentes de los nodos MQInput y MQOutput.
    Todos los subflujos empiezan con un nodo Input y finalizan con un nodo Output.
    Cajones de la paleta Tipo de nodo Nombre de nodo
    Construcción Input Start Subflow
    Direccionamiento Filter Check Backout Count
    Construcción TryCatch TryCatch
    Transformación Compute Copiar mensaje
    Construcción Throw Throw To Complete Rollback
    Construcción Output Back To Main Flow
    Construcción Output STAFF_UPDATE_ERROR
  4. Conecte los nodos tal como se indica en la siguiente tabla.
    Para obtener instrucciones, consulte Conexión a nodos de flujo de mensajes en la documentación de WebSphere Message Broker.
    Para comprobar que ha conectado los nodos correctamente, consulte el diagrama de Acerca del ejemplo del Manejador de errores.
    Nombre de nodo Terminal Conectar a este nodo
    Input Out Check Backout Count
    Check Backout Count True TryCatch
    TryCatch Try Back To Main Flow
    Catch Copiar mensaje
    Copiar mensaje Out STAFF_UPDATE_ERROR
    STAFF_UPDATE_ERROR Out Throw To Complete Rollback
  5. Configure las propiedades de nodo tal como se indica en la siguiente tabla. Acepte los valores predeterminados para todas las propiedades, a menos que en la tabla se indique un valor alternativo.
    Para obtener instrucciones, consulte Configurar un nodo de flujo de mensajes en la documentación de WebSphere Message Broker.
    Nombre de nodo Página Propiedad Valor
    STAFF_UPDATE_ERROR Avanzadas Modo de transacción no
    Throw To Complete Rollback Básicas Número del mensaje 3002
    Básicas Texto del mensaje Desde el flujo de mensajes Error_Handler.
  6. En el proyecto Error Handler Message Flows, efectúe una doble pulsación en el archivo Error_Handler.esql para abrirlo en el Editor ESQL. Copie y pegue los siguientes módulos de código ESQL en el archivo ESQL y luego guarde el archivo. Para obtener más información, consulte Desarrollo de ESQL en la documentación de WebSphere Message Broker.
    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;
    
    -- Establecer el punto de partida
    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));
    -- Mover el inicio al último hijo del campo al que señala actualmente
       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. Guarde el flujo de mensajes.
Ahora puede crear el flujo de mensajes principal que incorpora el subflujo de manejo de errores, consulte Crear el flujo de mensajes principal.

Volver a Crear el ejemplo de Manejador de errores