Servlet direcionando para um WebService em outra aplicação
5 respostas
A
Attila
Pessoal,
Estamos versionando um sistema existente, no qual utilizamos o JBOSS como servidor web.
Dai foi solicitado que fosse criado uma Servlet (AppRouter.ear) para receber uma requisição e dependendo da versão ativa, direcionará para outro contexto(arquivo-v1.ear).
Tentei utilizar o RequestDispatcher.forward() para direcionar, mas pelo que li não é possível realizar o direcionamento para outra aplicação.
Dai utilizei também o Response.sendRedirect(), consegui direcionar, porém como se trata de um Webservice SOAP, estou tendo dificuldades com relação aos dados do request/response para consumir este Webservice.
E ai cara… bom nunca precisei fazer isso, mas acredito que sim hein, e faria do mesmo jeito que está fazendo rsrs…
Agora se nao deu certo assim, realmente nao sei o que fazer e precisaria dar um pesquisada…
abraço!
danieldestro
Acho que usar um ESB (Enterprise service Bus) resolve seu caso.
Mas se não quiser usar de tal recurso, que não é simples, constroi um Servlet que atua como proxy entre a requisição e seu webservice.
A
Attila
Fiz uma explicação melhor para deixar mais claro o problema…
A idéia original era a de criar uma Servlet para receber as requisições de um browser/cliente, verificar qual serviço deve ser chamado e de qual versão e encaminhar o cliente para a URL do Webservice conforme EAR da versão correta utilizando o método forward() da classe RequestDispatcher. Este método simplesmente direciona no servidor a requisição para outra Servlet/Webservice sem que o cliente/browser saiba que houve o redirecionamento, e o segundo componente é o responsável de retornar para a o cliente a resposta da requisição inicial.
Fizemos o PoC (Prova de Conceito) utilizando na Servlet o método citado, porém constatamos que não há possibilidade de utilizar este método quando direcionamos para Componentes de diferentes aplicações, tanto utilizando endereço relativo ("…/AutoModular/v1001v") como endereços absolutos (“http://server/AutoModular/v1001/”).
Após o insucesso da idéia original, foi testado o uso do método sendRedirect() da classe HttpServletResponse para realizar o mesmo processo do item 1.
Fizemos o PoC (Prova de Conceito) utilizando na Servlet o método citado passando o endereço absoluto (“http://server/AutoModular/v1001/”), o direcionamento começou a funcionar, porém constatamos que neste direcionamento a Servlet retorna a requisição para o cliente/brower no Header apenas o novo endereço e o browser/cliente é quem é o responsável por realizar uma nova requisição. Desta forma os dados que foram encaminhados inicialmente pelo cliente são perdidos, e na segunda requisição feita não ocorre o envio destes dados. Outro ponto negativo aqui é que existem 2 requisições por parte do cliente o que derruba a performance.