ecteruel:
Olá pessoal.
Tenho um problemão aqui e estou há dias tentando resolver sem sucesso.
Tenho uma aplicação cliente-servidor baseada em Servlet e JSP que acessa uma porta USB (enviando dados) e uma outra aplicação (Thread) que escuta essa porta consantemente. Para fazer a comunicação com a porta física estou usando uma JNI.
Acontece que quando a aplicação (thread) abre a porta USB, essa abertura é associada a um objeto que foi instanciado para esse fim.
Quando a aplicação (Servlet/JSP) tenta enviar uma informação pela porta, ela já esta aberta associada a um objeto da outra aplicação(Thread). Sendo assim, eu teria de enviar a informação através do objeto que abriu a porta USB, o que eu não estou conseguindo.
Há alguma maneira de compartilhar esse objeto que abriu a porta entre duas aplicações?
Sim .
Crie uma classe que implementa a interface javax.servlet.ServletContextListener. Este tipo de classe vc configura no web.xml e o método contextInitialized(ServletContextEvent) corre aquando da inicialização da aplicação 1 unica vez. Dentro desse método vc cria o objeto que comu8nica com o USB e a thread.
Depois vc vai adiconar esse objeto no contexto da aplicação com
private ServletContext ctx;
public void contextInitialized(ServletContextEvent e){
// eu não sei qual é a sua classe tou chamado de ObjetoUSB
ObjetoUSB objetoUSB = ... // inicializa
ctx = e.getServletContext();
ctx.setAttribute("objUSB", objetoUSB);
}
Isto deixa o objeto no contexto da plicação que é acessivel de qualquer página. por exemplo:
/// dentro de um página jsp
ObjetoUSB objetoUSB = (ObjetoUSB ) application.getAttribute("objUSB");
Este código vai retornar o mesmo objeto criado no codigo acima.
E ai vc pode manipulá-lo como quiser. É isso.
P.S. Não chame Thread de aplicação porque confunde. Chame Thread de thread , que todo o mundo entende.