Chamar um Webservices de um EJB - Atribuir Timeout (Weblogic 12c)

5 respostas
java
B

Fala aí rapaziada, quanto tempo!
Estou tendo um problema em atribuir o timeout na chamada de um webservices a partir de um EJB
Usando Weblogic como container.

[edit]
O Web Service não está no mesmo servidor, se eu atribuir um timeout para o JTA a transação exprira sem uma exception e não cancela a chamada anterior.
Esse processo inicia a partir de um MDB, quando JTA expria o EJB consome a mensagem JMS de novo e de novo e de novo e cada chamada para o web service continua ativa no Servidor WS.
[/edit]

Meus passos

  1. Criados os stubs com wsimport
  2. Criada uma classe proxy para chamar o webservice
  3. Webservice chamado a partir do EJB.

Já atribuí as configurações abaixo:

// Setting timeout
    BindingProvider bindingProvider = (BindingProvider) getService();
    Map<String, Object> context = bindingProvider.getRequestContext();
    context.put(JAXWSProperties.CONNECT_TIMEOUT, 5000);
    context.put(JAXWSProperties.REQUEST_TIMEOUT, 20000);

Se eu chamo o webservice a partir de um programa client/server (como Swing ou um simples main) funciona corretamente lançando um SocketTimeoutException, mas chamando pelo EJB o timeout atribuido não é respeitado.

Também tentei atribuir o timeout em um annotation no EJB, mas não funcionou também.
Also tried to set a annotation to EJB method, but not worked either.

@AccessTimeout(value=2000)

Alguma idéia de como atribuir o timeout em uma chamada de Webservices de um EJB no Weblogic.

Grande abraço para todos

5 Respostas

L

talvez isso aqui te ajude (veja a sessão Seting Transactions Timeout) https://docs.oracle.com/cd/E11035_01/wls100/jta/trxejb.html

B

Fala aí @lucciano01, transaction timeout não retorna exception, apenas cancela a transação e o servidor entra em looping consumindo a mensagen JMS novamente, mesma situação de atribuir o timeout nas configurações do JTA, preciso que ocorra uma exception para que eu possa efetuar o tratamento do timeou. De qualquer forma valeu pelo help.

D

Seu MDB está sendo iniciado por uma fila JMS no weblogic e esse MDB dispara uma chamada de serviço?

O WS é assíncrono ou síncrono? Usa WS-AT? Ele usa unchunked streaming mode? Está exposto em um barramento?

B

Boa tarde amigo, muito obrigado pelo retorno! Vamos lá.

Sim, a chamada para o WS parte de um MDB quando há uma mensagem na fila.

O WS é síncrono

Não tenho essa informação, ele é um serviço padrão exposto no Oracle SOA Suit

Sim, está, utilizamos o Oracle SOA Suit para esse serviço.

O mais engraçado é que os parâmetros de timeout funcionam perfeitamente se faço a chamada a partir de uma aplicação desktop. Tenho a impressão que o Weblogic está sobrepondo essas informações de timeout.

D

SOA suite, blz…
Vc está usando o container do SOA Suite como container EJB? Se estiver verifique no console as configurações de timeout de JTA, acho que ele pode estar sobescrevendo. Verifique no console na aba services/JTA a propriedade “timeout seconds”, se puder fazer um teste aumentando o valor…

Se o seu serviço usa WS-AT ele terá uma policy declarando isso no WSDL. É bem visível. Resumidamente, serve para vc propagar uma transação do container cliente para o container do seu serviço, por exemplo eu poderia propagar uma transação que eu gerei no EJB e usar ela lá no SOA.

Caso o seu serviço seja um proxy no OSB, verifque o unchunked streaming mode ele é uma opção do business do Oracle Service Bus, desmarque essa opção para teste, ela serve para fazer streaming mandando status code http 102, mas ela dá alguns problemas estranhos quando vc tem soluções de BIGIP na frente do serviço de negócio.

Caso o seu caso seja BPEL ou mediator no SOA suite, verifique se por um acaso vc não está tratando de alguma o forma o header de ws-addressing, não imagino que seja o seu caso. Para fazer correlação entre transações o soa suite se apoia no WS-Addressing, ao ser instanciado além do ECID e instanceID é gerado o messageID, esse ID é propagado para os processos acionados pelo BPEL(PAI), se por exemplo um BPEL(filho) for chamado mesmo que ele esteja em outro composite o mesmo poderá fazer parte da mesma transação.

Criado 15 de janeiro de 2016
Ultima resposta 26 de jan. de 2016
Respostas 5
Participantes 3