Java WebStart desde Cero

¿Asi o desde mas al incio?

¿Quien no a tenido el gusto de actualizar uno de los sistemas que a programado?, pasar todo el día yendo equipo por equipo remplazando un archivo para que se comporte como debe, interrumpiendo el trabajo de los demás y aceptemoslo se vuelve aburrido después de la décima maquina (de 94 maquinas :S).

Por fortuna si esta utilizando la plataforma Java para la creación de su aplicación tiene a la mano un método para instalar y actualizar su aplicación con un solo clic del ratón, sin mas interrupción que pedir a los usuarios que cierren y vuelvan a abrir la aplicación, el sistema Java WebStart y en este tutorial veremos como usarlo y configurarlo.

Java WebStart

En el fondo Java WebStart es bastante sencillo, ponemos el .jar ejecutable en un servidor, le pasamos a los usuarios un archivo .JNLP el cual contiene las indicaciones para automáticamente descargar, instalar la aplicación y actualizar y con un clic la aplicación quedara instalada, para dejar esto mas claro hagamos un pequeño ejemplo de como.

Requerimientos

Para realizar este ejemplo necesitara tener un par de cosas a la mano, que son:

  • Un servidor Web donde pueda subir contenido, en este ejemplo usaremos Apache Tomcat
  • Un archivo .Jar ejecutable
  • Un certificado de sello digital para firmar el .jar (esto lo detallaremos en un momento)

Firmar el .JAR

Como se imaginará esto de bajar archivos ejecutables con un solo clic suena a la pesadilla de cualquier administrador de sistemas, por lo que un requerimiento de Java WebStart es que cada archivo .Jar este firmado vía un certificado de sello digital de modo que la identidad del autor y la integridad del archivo pueda ser verificada, idealmente tendría que ser un certificado expedido por una autoridad confiable, pero para este ejemplo crearemos el certificado nosotros mismos y configuraremos la seguridad de Java para que permita su uso, ya si el sistema le convence y le es útil puede invertir en un certificado mas adecuado.

Para nuestra prueba usaremos los siguientes comandos para crear el certificado y firmar nuestro archivo .jar.

Como ya se mencionó la seguridad por defecto de la plataforma Java rechazará este certificado ya que no proviene de una autoridad confiable, pero al menos en la plataforma IcedTea (La implementación que hallara en Linux), es posible ejecutarla tras aceptar unas confirmaciones de seguridad.

Archivo JNPL

Ahora es necesario crear el archivo JNPL este describirá nuestra aplicación, información del vendedor, un ejemplo del archivo se presenta a continuación, el archivo es un xml típico con etiquetas bastante claras.

Poniendo en marcha

Ya que tenemos el .Jar firmado y el JNPL vamos a la carpeta WebApps de nuestro servidor Apache Tomcat donde crearemos una carpeta y colocaremos tanto nuestro .jar como nuestro .jnpl como se ve en la figura.

Contenido de la carpeta Test en las web Apps del servidor

Inicie el servidor y vaya a http://<ip de su maquina>:8080/Test/Test.jnlp y si le pregunta diga que desea abrir el archivo con Java Web Start y le presentara una pantalla como la siguiente.

Java Web Start

(Bueno IcedTea Web Star, pero eso es por que estoy haciendo el ejemplo en Fedora Linux :P), como puede ver se nos pregunta si deseamos correr la aplicación, le diremos que si.

Hecho esto vera su aplicación en pantalla

La aplicación Instalada en el sistema

Para acceder a la aplicación desde Windows necesitara hacer un paso extra, esto es necesario por que usamos un certificado hecho a mano, esto es agregar la URL del JNLP a la excepciones de seguridad como se ve en la figura.

Agregamos la URL de nuestro JNLP a las excepciones.

Hecho esto vaya a http://<ip del server apache>:8080/Test/Test.jnlp y abra el archivo

Aquí SI es Java Web Start

De nuevo le pedirá que confirme que desea correr la aplicación

Permisos

Acepte y

La aplicación Instalada en el sistema

Corriendo la aplicación desde el cache

Ahora, ya que bajamos la aplicación desde un servidor hay una serie de preguntas obligatorias ¿Necesito acceso a internet para ejecutar la aplicación? y ¿Que pasa si se cae ese servidor? no hace falta que se preocupe por nada, por defecto al ejecutar la aplicación esta se almacena el el cache del Java y si el servidor no esta disponible simplemente ejecutara desde ese cache y ese cache no tiene fecha de expiración, mientras no lo borre manualmente tendrá la aplicación en su equipo.

Poniendo la aplicación en el escritorio

Ahora todo esto es muy bonito, ¿Pero implica que el usuario debe o abrir la URL del JNLP o el JNLP cada vez que quiera usar la aplicación?, No.

Puede mandar la aplicación al escritorio como en enlace directo y que se ejecute con solo hacer clic en el enlace, incluso configurar para que tenga un icono personalizado.

Para hacer esto abra el panel de control de Java y en la sección “Archivos temporales de Internet” haga clic en el botón Ver, esto le presentara todas las aplicaciones Java WebStart que tenga en el cache del sistema

Creando un acceso directo a nuestra aplicación

Use el botón derecho para acceder al menú contextual y seleccione Instalar Accesos Directos, esto creara un acceso directo en el escritorio, el cual iniciara la aplicación

Acceso directo a la aplicación

Actualizando la aplicación

Ahora viene la parte mas interesante de esto, digamos que ya creo una versión 2.0 de su aplicación y desea actualizar a todos los usuarios, ¿Que necesita hacer?

No mucho, solo ponga el nuevo .jar en la misma carpeta que el anterior y edite el campo jar en su JNLP para que contenga el nombre del nuevo archivo

Note la parte <jar href=”Test-2.0.jar” /> en comparación con el archivo anterior, hecho esto cierre la aplicación si esta abierta y de clic en el acceso directo ( o abra el JNLP o vaya a la URL del JNLP y ábralo desde ahí) y…

¡Habemos actualización!

La aplicación se actualizara automáticamente sin necesidad que haga mas movimientos a ese equipo que solicitar al usuario cerrar y volver a abrir la aplicación.

Consideraciones para el uso de Java WebStart

Como puede ver en el ejemplo usamos un solo archivo .Jar y aunque la documentación parece indicar que es posible usar múltiples archivos .Jar hay un detalle que debe considerar, la configuración de su aplicación.

Note que no podemos controlar donde en el disco duro va a ir a dar la aplicación y no podemos mandar archivos que no sean .Jar y aun si se puede no creo sean editables, por lo que los archivos .properties o de configuración de toda la vida requerirán algo de consideración adicional.

Para resolver este problema se me ocurre una posible solución.

Que su aplicación tenga integrado un asistente capaz de detectar si la configuración (ya sea un archivo, una tabla en base de datos, etc) existe y contiene todos los campos necesarios, en caso que no que automáticamente cree los campos necesarios y presente una interfaz gráfica para colocar y/o actualizar la información requerida.

Espero que esta entrada fuera de utilidad y nos vemos en la próxima :)

Referencias

[1] Java Web Start — https://docs.oracle.com/javase/8/docs/technotes/guides/javaws/

[2] Java Web Start (Jnlp) Tutorial — http://www.mkyong.com/java/java-web-start-jnlp-tutorial-unofficial-guide/