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.
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.
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.
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.
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:
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.
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.
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:
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:
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.
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: