Fala pessoal, eu de novo perdido aqui
Agora é o seguinte:
Desenvolvemos um sistema web onde os clientes possuem leitoras de smart cards (manipuladas por applets no browser) e os servlets servem para enviar ao applet os comandos de conexão com estas leitoras.
Mas a programação da seqüência de comandos enviados às leitoras deve ser programada no lado servidor, então criei uma classe que representa uma leitora virtual, chamada VirtualCardTerminal.
O ideal seria que ela tivesse a iniciativa das comunicações. Entretanto, não achei que é possível, pois deve ser uma aplicação web cliente/servidor. O que eu faço é o seguinte: Quando o servidor recebe requisições do cliente, ele envia estes comandos à leitora encapsulados na resposta para o cliente. E a resposta deste comando, pela leitora, é enviada em uma nova requisição ao servidor. Esta arquitetura não achei muito adequada, mas está funcionando bem. Se alguém tiver alguma sugestão ou opinião aqui, por favor fique à vontade para dizer.
Agora, eu utilizo vários redirecionamentos para esta arquitetura.
A idéia é a seguinte:
Um servlet (GetApplicationsServlet) recebe a chamada do cliente, inicia uma thread (GetApplicationsManager) que efetua chamadas a esta leitora virtual (VirtualCardTerminal), que responde como se fosse a própria leitora física que tá lá no cliente.
A classe VirtualCardTerminal recebe os parâmetros (request, response) do servlet e deve redirecionar (com um forward de um objeto RequestDispatcher) para um outro servlet (SendAPDUServlet) responder ao cliente.
Depois, a resposta deste comando é recebida pelo primeiro servlet, que utilizando monitores sincronizados informa ao objeto VirtualCardTerminal que a resposta já foi recebida e ele pode continuar e responder ao GetApplicationsManager.
O problema é que quando eu uso
RequestDispatcher dispatcher = request.getRequestDispatcher(“sendApdu”);
ele está retornando null quase sempre. Antes disso, eu apenas defino parâmetros para ele com
request.setAttribute(“apdu”, apdu);
E não mexi no response antes de chegar aqui.
Esse caminho “sendApdu” está funcionando certinho.
Alguém sabe o que pode acontecer pra esse método ficar retornando null??
Agradeço muito
Abraços