Oi gente,
estou com o seguinte problema:
O usuário vai requisitar alguns dados na aplicação e esta vai consumir um web service(aplicação de outra equipe) assíncrono e em seguinda responde ao usuário algo como “Seu pedido está sendo processado, aguarde alguns instantes…” e libera a aplicação para o usuário navegar.
Quando o web service da outra equipe termina o processamento me devolve uma resposta para aquela solicitação, em seguida minha aplicação deverá pegar essa resposta e mostrar um alerta num item da tela avisando que a resposta chegou, algo como “Você possui novas pendências…clique aqui para ver”.
Os problemas que tenho que resolver são:
1 - Na resposta do web service eu tenho a identificação do usuário que solicitou, o problema é como eu vou conseguir inserir a resposta no contexto do usuário logado? Qual a melhor maneira?
- Até o momento pensei em fazer da seguinte forma, eu guardo o sessionID do usuário logado na requisição e quando chegar a resposta eu recupero a sessão pelo ID e coloco nela os dados de resposta. Alguém tem uma sugestão de solução melhor? Ou se essa meu pensamento tem algum problema?
2 - Tendo a resposta no servidor, como vou avisar o client?
- Pesquisando até agora a solução parece ser ajax reverso. É isso mesmo?
Agradeço a todos que ajudarem.
Uma coisa que faltou dizer é qual a tecnologia do seu projeto. [=
A minha aplicação web utiliza VRaptor 3, Spring, Hibernate.
No mesmo projeto tem um client de web service SOAP(que envia a requisição pra outra aplicação) e tem um server web service(que recebe a resposta do web service da outra equipe), ambos foram feitos com o XFire.
Me parece que é uma questão apenas de colocar a mensagem na sessão (e, em todas as requisições de páginas, checa se essa mensagem já foi consumida). É imperativo que a mensagem apareça assim que a resposta do web service chegue?
Agora, deixa eu adicionar um fator de complicação: o que acontece se o usuário deslogar da aplicação web antes da resposta do web service chegar? Ele tem que ir direto pra uma “inbox”, ou tem que receber a mensagem direto na tela quando se logar de novo? Ou não tem que fazer nada?
[]'s
[quote=carol_programadora]
…
ambos foram feitos com o XFire.[/quote]
Ai!
[quote=Alexandre Saudate]Me parece que é uma questão apenas de colocar a mensagem na sessão (e, em todas as requisições de páginas, checa se essa mensagem já foi consumida). É imperativo que a mensagem apareça assim que a resposta do web service chegue?
[/quote]
O requisito negocial é que se o usuário está logado e solicitou alguns dados, assim que a resposta chegar deve ser avisada da tela.
Eu até pensei no caso de esperar a “próxima” ação do usuário no sistema e ver se tinha pendência a exibir, mas o requisito negocial foi definido que o usuário pode simplesmente solicitar e não fazer mais nada, mas mesmo assim ter o aviso. Por isso pesquisando cheguei no ajax reverso.
[quote=Alexandre Saudate]
Agora, deixa eu adicionar um fator de complicação: o que acontece se o usuário deslogar da aplicação web antes da resposta do web service chegar? Ele tem que ir direto pra uma “inbox”, ou tem que receber a mensagem direto na tela quando se logar de novo? Ou não tem que fazer nada?
[]'s[/quote]
Conforme o requisito definido, se o usuário deslogar e o web service não tiver respondido, ou se respondeu e ainda não deu tempo de jogar a resposta na tela(por exemplo, deslogou bem na hora que ia devolver a mensagem na tela), nesses casos a mensagem pode ser desconsiderada, tanto que é que nem será gravada no banco. Não será preciso exibir nada quando ele logar novamente.
Apesar de parecer estranho esse último requisito e sem eu poder dar muitos detalhes do sistema, imagine que o usuário logado requisite a localização geográfica de determinado veículo, a minha aplicação envia ao web service solicitando a localização e me devolve assim que ele processar. Ou seja, aquela localização só interessa naqueles instantes, por isso após deslogar nada mais é considerado. É mais ou menos isso.
Então, é só jogar a mensagem na sessão, mesmo.
[]'s