Oi pessoal,
Bom, antes de tudo, não sei se esta mensagem deveria estar aqui, ou na parte de Ferramentas, ou até em Java EE, sei lá.
Enfim, temos um contexto aqui onde temos um Oracle Service Bus chamando um web service.
Por requisito, pela quantidade de requisições feitas a este serviço, e principalmente pelas atividades desencadeadas por ele, este serviço deverá ser um serviço assíncrono.
Podemos partir para dois modelos (jax-rpc e jax-ws) de implementação, porém qualquer um dos nos trás impossibilidades. Ambos por uma questão “ferramental”. Segue os dois fatos.
Com jax-ws, temos a facilidade de que a especificação nos provê “de fábrica” chamadas assíncronas, via callback ou via pooling, porém isto fica sob responsabilidade de ser ativado durante a geração do consumer deste serviço, via aquela querida e conhecida tag enableAsyncMapping no nosso arquivo de binding. Porém como nesta situação o real consumer do serviço seria o próprio Service Bus (uma vez que ele está ali para expor o serviço no barramento) e também porque jax-ws é uma especificação <ironia-mode>nova</ironia-mode>, ele quando vai consumir um WSDL não nos dá a opção de usar os métodos assíncronos da geração, ou seja, consumir serviços Jax-WS de maneira assíncrona (seja por callback ou pooling) com Oracle Service Bus fica fora das alternativas.
Com jax-rpc, temos uma boa vantagem em cima disso tudo, pois podemos usar neste caso soap em cima de jms para que desse para fazer request-response assíncrono. Pronto, bem tranquilo, com a anotação @WlJmsTransport consigo expor um mesmo serviço que é Http agora também em Jms, basta passar a fila e a connectionFactory que será usada para request e o response virá no reply-to. Porém o Weblogic quando expõe serviços via JMS, tem um outro problema que é na implementação do MDB que fica pendurado na fila para ativar o serviço, ele (por mais insano que possa ser) é um cara singleton que permite a execução de um fluxo por vez. Ou seja, aquele velho cliente que faz N chamadas simultâneas a um processo pesado fica enfileirado e faz um por um…
Problema né? Bom, alguém já passou por algo semelhante, ou tem alguma sugestão de uma implementação assíncrona de WS sem sair do contexto do produto Weblogic?
Valeu,
[]s,