2012-01-17 10 views
6

Tengo una aplicación web ejecutándose con soporte para algunas piezas de hardware específicas. Esto se logra en los siguientes pasos:Soporte de hardware desde una aplicación web

  1. usuario ejecuta un pequeño instalador que coloca los archivos de Java (y un par más ) en la máquina cliente. La pieza principal es un contenedor llamado "hardwareManager"
  2. Visita del usuario de la aplicación web. La aplicación web ejecuta un applet de Java que, debido a un archivo .java.policy colocado durante la instalación, tiene permiso para interactuar con la máquina cliente fuera del entorno limitado del navegador.
  3. El applet comprueba que el hardwareManager se está ejecutando, y si no ejecuta un comando para iniciarlo.
  4. El usuario interactúa con la aplicación web que envía comandos al applet a través del javascript. A continuación, el applet escribe comandos en un archivo de texto en la máquina del cliente. El archivo de texto es constantemente monitoreado por el hardwareManager que ejecuta los comandos que lee.

Esto funciona, pero parece torpe. Tengo algunas ideas sobre cómo mejorarlo, pero no sé cuál vale la pena probar, si es que hay alguno.

¿Sería mejor configurar el hardwareManager como un socketServer y hacer que el applet se conecte directamente a él, en lugar de pasar por los archivos de texto? ¿Es eso posible?

¿Hay alguna manera de eliminar el applet por completo y que el javascript se comunique directamente con el hardwareManager? ¿Tal vez escribiendo el hardwareManager para ser un servidor http local? ¿En qué puerto debería ejecutarse? ¿Las limitaciones de javascript xss caben aquí?

+3

Si hace que el hardwareManager acepte solicitudes HTTP, definitivamente puede acceder directamente al JS, incluso mejor puede diseñarlo para implementar comandos como un servicio web REST. XSS: no hay problema aquí. Por supuesto, necesitaría tener el hardwareManager ejecutándose para que acepte los comandos, y una forma de saber en qué puerto. – Viruzzo

+0

añadiendo a la respuesta de @Viruzzu, puede usar [Jetty] (http://docs.codehaus.org/display/JETTY/Embedding+Jetty) que permite incrustar fácilmente un servidor http dentro de una aplicación java. entonces simplemente dirige el código javascript a localhost para interactuar con el hardwareManager –

+1

Viruzzo, por favor haga una respuesta para que yo pueda votar. – pkh

Respuesta

2

Sería menos complicado comenzar la aplicación Java con Java Web Start. Esto eliminaría la necesidad de demonizar o instalar el administrador de hardware de Java.

Otra alternativa es utilizar un navegador integrado dentro de Java. Supongo que esto no es una opción, ya que depende en gran medida de Javascript (supongo que para proporcionar una experiencia rica del cliente).

Si ya tiene que instalar algo en la máquina cliente, ¿por qué eligió ir con una aplicación web?

Hablando de la experiencia: Teníamos una aplicación Java EE que necesitaba imprimir en impresoras PoS en el sitio del cliente. Instalamos una pequeña aplicación de "sincronizador" que se conecta a través de SSH y sincroniza todos los archivos de los clientes. Después, carga el JAR y ejecuta el programa. Este programa se conecta a través de RMI con el servidor y se suscribe a una cola JMS para recibir las asignaciones de impresión.

Aplicado a su caso: ¿Por qué no permite que su aplicación Java se conecte directamente al servidor? Puede usar HTTP, SOAP o incluso JMS sobre RMI. A continuación, puede iniciar el comando de hardware desde el servidor (en lugar de desde el entorno de webbrowser de JavaScript limitado). De esta forma, obtendrá muchísimas funciones: autenticación, almacenamiento en memoria intermedia de comandos e incluso puede compartir hardware entre múltiples clientes.

Esquema:

    <----AJAX------> Web browser 
ApplicationServer     
        <---HTTP/SOAP--> Java hardware manager application 

Puede iniciar la aplicación Java utilizando Java Web Start, que permite actualizar automáticamente la aplicación (en lugar de tener que pasar cada cliente un nuevo instalador).

+0

'Si ya tiene que instalar algo en la máquina cliente, ¿por qué eligió ir con una aplicación web?' Es principalmente una aplicación web y ahora necesita soporte de hardware opcional para algunos usuarios. –

Cuestiones relacionadas