O que define se um WebServices eh Assincrono?  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
alexmdo
JavaChild

Membro desde: 31/08/2006 14:51:56
Mensagens: 102
Offline

Boa noite galera,

Uma duvida: Seria correto afirmar que se o meu contrato de servico define uma operation que eh do tipo one-way, ele se torna assincrono se eu tiver que consumir ele numa determinada tecnologia?

Em outras palavras, gerando o client de consumo deste servico, se de uma forma procedural chamar este servico que poderia demorar uns 30 minutos para executar, o resto do meu codigo executaria sem antes terminar o processamento deste servico? Ou eu teria que definir alguma estratégia/pattern sendo que ao chegar neste serviço, eu o delegasse numa fila de mensageria. Neste ponto, vale lembrar que a execução seria instantânea, porem, o cliente teria que aguardar pelo retorno, correto?

Abracos a todos!!!

This message was edited 1 time. Last update was at 24/06/2010 00:19:16


Alexandre Marinho de Oliveira

SCJP 1.5
SCWCD 1.5
SCBCD 1.5
victor.godinho
Java Ninja
[Avatar]

Membro desde: 22/04/2007 14:33:46
Mensagens: 256
Offline

WebService não é assíncrono. Neste caso que você citou de a "chamada demorar 30 minutos, e o código do client continuar sendo executado" não aconteceria. O tal do "código client" irá ficar esperando uma resposta (independente do retorno ser um erro, ou o resultado esperado).

Agora... Não entendi se sua necessidade é que a chamada SEJA assíncrona, ou se NÃO seja.

De qualquer forma, caso você queira deixar assíncrono, teriam sim que ser feito através de alguma lógica interna (criação de uma thread.. wathever..), como você mesmo comentou.



Não sei se consegui responder exatamente sua dúvida... Bem, qualquer coisa posta ai!

--
http://victorgodinho.com
[WWW]
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

victor.godinho wrote:WebService não é assíncrono. Neste caso que você citou de a "chamada demorar 30 minutos, e o código do client continuar sendo executado" não aconteceria. O tal do "código client" irá ficar esperando uma resposta (independente do retorno ser um erro, ou o resultado esperado).

Agora... Não entendi se sua necessidade é que a chamada SEJA assíncrona, ou se NÃO seja.

De qualquer forma, caso você queira deixar assíncrono, teriam sim que ser feito através de alguma lógica interna (criação de uma thread.. wathever..), como você mesmo comentou.



Não sei se consegui responder exatamente sua dúvida... Bem, qualquer coisa posta ai!


Na verdade, é perfeitamente possível, sim, que ele seja assíncrono. Basta que o contrato do serviço defina, na verdade, duas operações: a operação que vai receber a chamada, e a operação que vai ser chamada na resposta.

[]´s

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

Kenobi
GUJ Master
[Avatar]

Membro desde: 14/11/2003 13:06:37
Mensagens: 1678
Localização: Brasil
Offline

Na verdade do ponto de vista lógico não é Assíncrono porque ele responde por padrão empty, vazio para o request. Essa resposta entrentato não é do fluxo de negócio e sim um entendimento que ele recebeu a tarefa e deu ok no processamento.

Mas qualquer operação sem tipo de retorno especificada por um contrato WSDL é assíncrona por padrão !! Isso é meio ambíguo, mas é assim que funciona.


Quanto à especificação no WSDL, em binding, tente colocar a tag <enableAsyncMapping>true</enableAsyncMapping> do jax-ws, isso deve desacoplar seu client .




This message was edited 1 time. Last update was at 24/06/2010 10:05:31


----------------------------------------------------------
SOA|EXPERT - http://www.soaexpert.com.br
SOA de um jeito simples e eficiente.
[WWW] [MSN] [ICQ]
alexmdo
JavaChild

Membro desde: 31/08/2006 14:51:56
Mensagens: 102
Offline

Obrigado a todos pela resposta.

Kenobi, entendi perfeitamente o que você disse.

Somente uma coisa ainda não ficou muito claro pra mim: Do ponto de vista conceitual, WebService cujo contrato não possui um retorno, ele é assincrono? Ele foi feito pra atender este tipo de requisição?

Ou tudo isso envolve uma questão ferramental que seria possível torná-lo assincrono? Por exemplo, delegar para uma fila de mensageria a implementação do serviço ou ainda realizar este tipo de parametrização no framework (client JAX-WS)?

[]s

This message was edited 1 time. Last update was at 24/06/2010 11:27:23


Alexandre Marinho de Oliveira

SCJP 1.5
SCWCD 1.5
SCBCD 1.5
Kenobi
GUJ Master
[Avatar]

Membro desde: 14/11/2003 13:06:37
Mensagens: 1678
Localização: Brasil
Offline

Sim do ponto de vista conceitual ele sempre será Assíncrono caso não tenha retorno. A implementação, como você irá fazer, é dependente da plataforma que irá utilizar.

Isso nunca terá haver com a utilização de JMS por exemplo. Isso é sua escolha de implementação da definição do "Contrato" - WSDL, que dita as regras do jogo .

This message was edited 3 times. Last update was at 24/06/2010 11:36:55


----------------------------------------------------------
SOA|EXPERT - http://www.soaexpert.com.br
SOA de um jeito simples e eficiente.
[WWW] [MSN] [ICQ]
alexmdo
JavaChild

Membro desde: 31/08/2006 14:51:56
Mensagens: 102
Offline

Ficou claro Kenobi.

Muito obrigado pelo esclarecimento.

[]s a todos!!!

Alexandre Marinho de Oliveira

SCJP 1.5
SCWCD 1.5
SCBCD 1.5
 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team