Identificação de Erros no Fluxo de Mediação

Este tópico oferece informações sobre as várias maneiras de lidar com erros de execução no fluxo de mediação, incluindo maneiras de utilizar as primitivas de mediação de Parada e Falha, onde procurar informações sobre falha na mensagem e como lidar com falhas do WSDL.

Terminal de Falhas

As primitivas de mediação que processam mensagens possuem um terminal de falha, que propaga informações de exceção junto à mensagem de entrada quando há uma falha de execução na primitiva de mediação. As informações da exceção são armazenadas no elemento failInfo no contexto da mensagem. Você deve ligar o terminal de falha de uma primitiva de mediação à outra primitiva para acessar o failInfo. O terminal de falha de uma primitiva somente propaga informações de falha para falha dentro da lógica da primitiva e não para qualquer primitiva de recebimento de dados.

Se um terminal de falha da primitiva não estiver ligado, as informações de falha não serão armazenadas no elemento failInfo. Nesse caso, o fluxo falha e somente as informações da exceção são exibidas nos registros de saída do WebSphere.

Falha de Execução em uma Primitiva de Mediação

Quando ocorre uma falha de execução em uma primitiva de mediação, o terminal de falha é disparado. Uma exceção no tempo de execução é emitida e o fluxo é considerado como falho. Se o componente do fluxo de mediação estiver executando em uma transação global, as primitivas que utilizam os recursos e têm participação na transação global podem escolher pelo rollback.

Nós utilizaremos o fluxo de exemplo mostrado abaixo para ilustrar o comportamento de rollback quando o componente do fluxo de mediação estiver executando em uma transação global.

Fluxo de Exemplo

Nesse fluxo, supõe-se que uma transação global não está configurada e que ocorreu uma falha de execução na primitiva Customizar. Já que o terminal de falha não estava ligado, ocorreu uma falha no fluxo. O trabalho realizado pela primitiva Transformar é ignorado, já que ela não persiste na informação e não interage com um recurso externo ao fluxo. O Registro, porém, seria concluído, já que o componente de fluxo da mediação não está sob uma transação global e, conseqüentemente, ainda registraria no banco de dados. Isso é porque ele interage com um recurso externo.

No mesmo fluxo, se uma transação global estiver configurada e ocorrer uma falha de execução novamente na primitiva Customizar, o trabalho realizado pela primitiva Transformar será ignorado novamente. Porém, se a primitiva Registro possuir sua propriedade do modo de transação configurada como same, a transação será revertida e nenhuma entrada ocorrerá no banco de dados. Se a propriedade do modo de transição estivesse configurada como new, a transição confirmaria fora da transação global, assim uma entrada ainda ocorreria no banco de dados.

Por padrão, um componente do fluxo de mediação não é configurado com um qualificador de transação global. Você pode incluir um qualificador para executar o componente do fluxo de mediação em uma transação global. Isso é realizado configurando um qualificador no componente de fluxo de mediação no editor de montagem; na página de implementação da visualização propriedades, inclua um qualificador de Transação com uma propriedade de global.

Informações de Falha na Mensagem

Quando há uma falha de execução em uma primitiva de mediação, as informações de exceção são armazenadas no elemento failInfo do contexto da mensagem. Essa é uma imagem de uma mensagem no XPath Expression Builder, mostrando o failnfo:

failInfo no XPath

Primitiva de Mediação de Parada

A primitiva de Parada possui um terminal de entrada e nenhum terminal de saída. Quando a falha de uma primitiva de mediação ou um terminal de saída estiver ligado à primitiva de Parada, as mensagens que chegam nesse terminal são consumidas pela primitiva de Parada e o caminho de fluxo específico é interrompido.

O editor de fluxo de mediação gera avisos se um terminal de saída de uma primitiva de mediação não estiver ligado. Utilize o terminal de Parada para suprimir esses avisos. No tempo de execução, terminais de saída que não estão ligados são propagados automaticamente para Parada.

No exemplo a seguir, o terminal de falha da primitiva de Filtro de Mensagem é ligado a um Logger de Mensagens para armazenar a mensagem com falha. Para indicar que não são mais necessárias ações, o Registro de Mensagens é ligado a uma primitiva de Parada.


Figura do Logger de Mensagens ligado à primitiva de Parada

Falha na Primitiva de Mediação

Utilize a primitiva Falha se quiser parar o fluxo de execução e emitir uma exceção. Você pode ligar um terminal de falha ou saída da primitiva à primitiva Falha. Se o componente do fluxo de mediação estiver executando em uma transação global, as primitivas que utilizam os recursos e têm participação na transação global podem escolher pelo rollback.

Exemplo: Identificação de erros no fluxo de mediação

Você pode criar fluxos de mediação especiais para identificação de erros e chamar esses fluxos a partir de outro fluxo de mediação. Por exemplo, suponha que você tenha um módulo de mediação chamado ErrorFlowModule que possua um componente de fluxo de mediação ErrorFlow e uma exportação ErrorFlowExport. No componente do fluxo de mediação, você poderia ter uma primitiva Filtro de Mensagens que possui um número de códigos de erro definidos como padrões, associados aos terminais. Dependendo do código de erro, a mensagem é roteada para um caminho diferente no fluxo.

No seu módulo de mediação chamado CreditCheckModule, crie uma importação com ligação SCA chamada ErrorFlow que tenha a mesma interface que a exportação do módulo de mediação ErrorFlowModule. Na página de detalhes da visualização propriedade da importação, selecione a interface de importação, clique com o botão direito do mouse e selecione Ligar (Avançado). Selecione ErrorFlowModule e ErrorFlowExport como destinos dessa importação.

No componente de fluxo da mediação CreditCheck, você possui um Filtro de Mensagens que envia sua mensagem de saída para a operação getAmount da interface CreditLimitService. O terminal de falha do Filtro de Mensagens está ligado à primitiva XSL Transformation e, assim, propagado ao ErrorFlowModule por meio da interface de importação ErrorFlow.

A imagem a seguir mostra o fluxo de pedido do componente de fluxo da mediação CreditCheck:

Fluxo de Exemplo de Identificação de Erros

Nós de Falha para Mensagens de Falha WSDL

Falhas WSDL são condições de erro de negócios (por exemplo, StockSymbolNotFound, ou NoSuchUser). No fluxograma da mediação, as falhas WSDL são manipuladas através de nós de falha de legenda e de falha de entrada, que possuem um terminal para cada tipo exclusivo de mensagem de falha. Os nós de falha de legenda e de entrada são criados no editor do fluxo de mediação quando há uma falha WSDL definida na operação de origem e de destino:

  • Um nó de falha de entrada é criado quando uma operação de origem possui uma mensagem de falha WSDL definida. O nó de falha de entrada possui um terminal de entrada para cada tipo de mensagem de falha definido na operação de origem. Qualquer mensagem propagada para um nó de falha de entrada resultará em uma mensagem de erro de falha WSDL sendo retornada da operação de origem. A ligação a esse nó significa que a mensagem de falha é retornada ao cliente. O nó de falha de entrada é criado nos fluxos de pedido e de resposta.
  • Um nó de falha de legenda é criado no fluxo de resposta para cada operação de destino que possua uma mensagem de falha WSDL definida. O nó de falha de legenda possui um terminal de saída para cada tipo de mensagem de falha definido na operação de destino. Quando uma falha WSDL ocorre, o nó de falha de legenda propaga a mensagem para a primitiva ou nó ao qual ele está ligado. A ligação a partir de um terminal de saída do nó de legenda identifica o fluxo que terá efeito quando a chamada para aquela operação resultar nesta falha específica.

Utilizaremos um exemplo para ilustrar como os nós de falha são ligados. Suponha que você possua uma interface de origem StockQuoteService com uma operação getQuote que solicite uma cotação de ações de uma interface DelayedServicePortType do fornecedor de serviços.

  • A interface StockQuoteService possui uma operação getQuote que tem entradas chamadas customerID e símbolo, uma saída chamada valor e duas falhas; invalidCustomerID e invalidSymbol.
  • A interface DelayedServicePortType possui uma operação getQuote, que tem uma entrada chamada stockSymbol, uma saída chamada stockValue e uma falha chamada invalidSymbol.
No fluxo de pedido, você pode enviar a mensagem de entrada para uma primitiva Consulta ao Banco de Dados que recupera o customerID e configura uma propriedade isValid na mensagem. Você pode utilizar uma primitiva Filtro de Mensagens para rotear a mensagem com base no valor de isValid. Se o customerID for válido, a mensagem é enviada para a operação de destino. Se o customerID não for válido, a mensagem é retornada ao cliente por meio do nó de falha de entrada. A imagem a seguir mostra esse fluxo:


Falha WSDL: Exemplo de Fluxo de Pedido

No fluxo de resposta, você pode ligar o terminal de símbolo inválido do nó de falha de legenda ao terminal de símbolo inválido do nó de falha de entrada com uma primitiva XSL Transformation entre eles. A imagem a seguir mostra o fluxo de pedido:

Exemplo de Fluxo de Pedido da Falha WSDL

Feedback
(C) Direitos Autorais IBM Corporation 2005, 2006. Todos os Direitos Reservados.