Criando o Subfluxo de Manipulação de Erro

Utilize as instruções a seguir para criar o subfluxo de manipulação de erro. Para obter instruções mais detalhadas, clique nos links fornecidos no final de cada etapa.

  1. Crie um novo projeto do Message Broker chamado Fluxos de Mensagens do Manipulador de Erros.
    Para obter instruções, consulte Criando um Projeto do Message Broker na documentação do WebSphere Message Broker.
  2. Crie um novo fluxo de mensagens denominado Error_Handler.
    Para obter instruções, consulte Criando um fluxo de mensagens na documentação do WebSphere Message Broker.
  3. No editor de Fluxo de Mensagens, inclua e renomeie os nós listados na tabela a seguir.
    Para obter instruções, consulte Incluindo um nó do fluxo de mensagens na documentação do WebSphere Message Broker.
    Nota: Entrada e saída na tabela são diferentes de MQInput e MQOutput.
    Todos os subfluxos começam com um nó de entrada e terminam com um nó de saída.
    Gavetas de Paleta Tipo de Nó Nome de Nó
    Construção Input Start Subflow
    Roteamento Filtro Check Backout Count
    Construção TryCatch TryCatch
    Transformação Compute Copiar Mensagem
    Construção Throw Throw To Complete Rollback
    Construção Saída Back To Main Flow
    Construção Out STAFF_UPDATE_ERROR
  4. Conecte os nós conforme listado na tabela a seguir.
    Para obter instruções, consulte Conectando nós de fluxo de mensagens na documentação do WebSphere Message Broker.
    Para verificar se você conectou os nós corretamente, consulte o diagrama em Sobre a amostra Manipulador de Erros.
    Nome de Nó Terminal Conectar a esse Nó
    Input Out Check Backout Count
    Check Backout Count True TryCatch
    TryCatch Teste Back To Main Flow
    Catch Copiar Mensagem
    Copiar Mensagem Out STAFF_UPDATE_ERROR
    STAFF_UPDATE_ERROR Out Throw To Complete Rollback
  5. Configure as propriedades do nó conforme listadas na tabela a seguir. Aceite os valores padrão para todas as propriedades, a menos que seja listado um valor alternativo na tabela.
    Para obter instruções, consulte Configurando um nó do fluxo de mensagens na documentação do WebSphere Message Broker.
    Nome de Nó Ativo Propriedade Valor
    STAFF_UPDATE_ERROR Avançado Modo de transação não
    Throw To Complete Rollback Básico Número de mensagem 3002
    Básico Texto de mensagem Do fluxo de mensagens Error_Handler.
  6. No projeto Fluxos de Mensagem de Manipulador de Erro, dê um clique duplo no arquivo Error_Handler.esql para abri-lo no editor ESQL. Copie e cole os seguintes módulos de código ESQL no arquivo ESQL e salve o arquivo. Para obter mais informações, consulte Desenvolvendo ESQL na documentação do 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;
    
    -- 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. Salve o fluxo de mensagens.
Agora você pode criar o fluxo de mensagens principal, que incorpora o subfluxo de manipulação de erros, consulte Criando o fluxo de mensagens principal.

Voltar para a Amostra Construindo o Manipulador de Erros