Boa tarde a todos,
Estou aqui dando manutenção num sistema em EJB 2.1 (contextualização: nunca trabalhei com EJB antes), migrando a aplicação para o JBoss 5.1 (o sistema hoje está em produção, funcionando normalmente, mas em um servidor de aplicação proprietário).
Num formulário, se eu aciono a pesquisa, cancelo, e efetuo novamente a pesquisa, eu recebo o erro de chamadas concorrentes:
O botão pesquisar do form aciona uma action (é, usa Struts 1.3) e, essa action faz uma chamada para a interface EJBObject, seria tipo assim:
pesquisa.jsp -> SistemaAction -> ListHandler
SistemaAction.java
[code]public ActionForward executePesquisar(ActionMapping mapping,
SistemaActionForm meuForm,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
...
int idConsulta;
ListHandler handler = getHandler(request.getSession());
if ((validacao_dados){
idConsulta = handler.criaPesquisaPaginada(...);
}
else{
idConsulta = handler.criaPesquisaPaginada(...);
}
...
}[/code]
A interface ListHandler extende javax.ejb.EJBObject.
A exceção estoura quando efetuo a chamada para o método criaPesquisaPaginada(), na tentativa de efetuar uma nova pesquisa.
Minha dúvida é como contornar esse problema. Eu tentei usar um bloco synchronized na chamada do criaPesquisaPaginada(), mas, não ajudou muito. Uma outra sugestão que achei pesquisando no google foi mudar para stateless, mas, não acho que isso seria uma boa saída.
(Nota: o sistema tem quase 20 anos, não faço idéia quem montou essa arquitetura, e eu infelizmente não tenho autorização da gerência para refazer nada, apenas para adaptar o que precisar )