Realizar chamada local a aplicativo (hw) [Resolvido]

Boa tarde!

Estou fazendo alguns testes com o Mentawai, e precisaria fazer uma página de alguma forma realizar a leitura de um dado de um hardware. Tenho as funções de acesso mapeadas em Java com o JNA. Porém, se eu coloco as chamadas em uma Action, a requisição é realizada no servidor…
Alguém tem alguma ideia de como fazer isso?

Fiz um teste simples, criando uma interface wrapper pra uma função de leitura do hardware. Primeiro testei em uma aplicação local, e funcionou corretamente. Aí, tentei simplesmente realizar a chamada em uma action. Aí o Tomcat gritou, e retornou:

javax.servlet.ServletException: Exception while invoking action HelloWorld: null / java.lang.reflect.InvocationTargetException / Could not initialize class com.sun.jna.Native / java.lang.NoClassDefFoundError org.mentawai.core.Controller.service(Controller.java:746) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

Alguém pode me dar uma direção, sobre o que posso tentar pra fazer isso funcionar?

O erro eu consegui corrigir. A JVM tem que ser 32 bits. Instalei e modifiquei a qual seria utilizada no projeto e funcionou. O ponto agora, é executá-la no cliente, e não no servidor… alguém tem alguma sugestão?

O dispositivo de hardware que você quer usar deve ser acessado por um driver instalado no cliente, não? E seu programa roda no servidor. Como o acesso remoto a hardware não é muito trivial (principalmente para esse tipo de hardware que você está querendo usar, pelo que imagino) então a rigor não dá para fazer o que você quer fazer. Mas há algumas coisas que você pode tentar fazer.

  1. Você pode (na remota eventualidade de você realmente estar querendo fazer isso, já que vai dar um bom trabalho) criar uma applet assinada, que acessa esse hardware. Prepare-se para ter muitos problemas que você não previu - o menor deles é que mesmo assinadas corretamente, applets não conseguem acessar direito as coisas no Windows 7 e/ou Vista. Se conseguir fazer isso (sempre tem um jeito ninja de fazer as coisas) é necessário criar um instalador para os drivers do hardware - não dá para simplesmente “ei, espetei o hardware e agora posso usar qualquer browser para acessá-lo” - as coisas não funcionam bem assim. Não ache, por exemplo, que mesmo assinada sua applet possa instalar alguma coisa no computador - você precisa de um instalador, já que você precisa de uma “elevação de privilégios” para instalar alguma coisa e por design os browsers não podem fazer essa elevação.

  2. Você pode criar uma aplicação desktop que acessa essa sua aplicação web (e aí você pode usar uma linguagem mais adequada para lidar com esses dispositivos de hardware). Não precisaria usar Java; poderia usar C# incorporando uma instância do Internet Explorer, por exemplo. (ugh)

Bom… as duas sugestões me parecem um tanto quanto traumatizantes… A primeira, porque tem grande chance de dar dor de cabeça e, possivelmente, não funcionar. A segunda porque eu teria que simplesmente refazer todo o resto do sistema… Estive dando uma olhada, e li alguma coisa sobre o Java Web Start, onde eu posso iniciar uma aplicação local pela web… será que eu consigo fazer essa aplicação devolver dados para a minha aplicação web? Alguém já mexeu ou sabe onde tem documentação boa? (os links no site da Oracle estão quase todos quebrados) Sabe se é viável?

Discutimos sobre o projeto aqui, e realmente a saída será usar Java Web Start. Uma aplicação em Swing que o servidor manda…