sexta-feira, 9 de setembro de 2011

Timeout Business Service - Oracle Service Bus

Olá pessoas esse é mais um post meu na internet.

Bom, nesse post vou demonstar como configurar e tratar de forma adequada o timeout de um Business Service no Oracle Service Bus 11g. 

Indicado para desenvolvedores

Pontos importantes:
-Ao lançar o timeout o business não impede o provedor de continuar com seu processamento, em outra palavras, se o timeout do provedor for maior que do business service em serviço transacionais podem haver problemas de integridade.


Pré-requisitos:
Eclipse com OEPE: 11.1.1.4
OSB: 11.1.1.4
SoapUI 4.x ou superior
Ter algum familiaridade com OSB.

Configuração de projetos
Baixe sconfig nesse link e importe no seu eclipse.
Baixe o projeto SoapUI nesse LINK e importe.
Publique o projeto no OSB.


Ao abrirmos o projeto vamos se deparar com a estrutura abaixo:


Para configurar o timeout clique no business service e navegue até a aba HTTP Transport.



Aqui temos duas opções de configurações voltadas para timeout sendo elas:

Connection Timeout: Ele determina quanto tempo esperar até ocorrer o ack do TCP.
Read Timeout: Ele determina quanto tempo esperar o response após o request ser enviado. 

O valor dessas propriedades está em segundos.

Vamos alterar os valores para 3 segundos cada e publique o projeto no OSB.Após publicar selecione o Business dentro do SBConsole, iremos verificar que as propriedades estão configuradas corretamente, a partir do SBConsole também é posssível alterar essas propriedades.


Bom, vamos aos testes para compreender como funciona o controle de timeout no OSB.

Primeiro vamos alterar o nosso mock do SoapUI. Clique no response e vá na opção Script, adicione o um sleep de 5 segundos por exemplo, na função sleep os valores estão em milisegundos.


Logo após isso vamos testar no business, altere o endpoint do business para o endpoint do mock. E abra o test console do Business do OSB, execute o teste e veja o resultado.

Após esgotar o tempo o business lançou um erro como o descrito na figura abaixo, isso significa que o teste foi com sucesso. Mas notou que a exceção lançada não está em um formato de fault??
Esse ponto é um pouco ruim, se deixarmos em aberto sem efetuar o tratamento adequado pode gerar má interpretação de erros por parte do cliente. No exemplo que temos, há um tratamento de erros nesse tratamento estamos traduzindo esse erro para o formato esperado pelo cliente.

Clique no proxy local e vá até o error handler para conferir.
Para conferir como a mensagem será tratada e enviada para o cliente acione o proxy soap. Após a execução o erro retornado estará formado conforme o seguinte.
Feito isso já termos nosso projeto com tratamento de timeout configurado e com sua falta tratada de forma correta.

Obrigado!! Nós vemos por ai!

Nenhum comentário: