Primeros pasos con Java Web Start

domingo, 25 de abril de 2010

Hace algún tiempo tuve que aprender a usar esta definición de la plataforma Java para desarrollar una pequeña aplicación Swing que se ejecutaría vía Java Web Start desde un link en una aplicación Web. Para usar Java Web Start se requiere más que nada realizar varias configuraciones, nada de programación.

Para hacer esto seguí estos sencillos pasos.

Pasos para habilitar la ejecución de JavaWebStart desde una aplicación Web

1. Empaquetar la aplicación
Lo primero que deberemos hacer será empaquetar nuestra aplicación en un archivo JAR. Además, para poder ejecutar nuestra aplicación desde una aplicación de JavaWebStart deberemos firmar el JAR digitalmente, pero esto se explicará más adelante. Para empaquetar nuestra aplicación usamos la herramienta de línea de comandos de Java. Aunque en todo caso, puede usarse cualquier herramienta disponible en nuestro IDE, si se dispone de uno.


<MIAPLICACION_DIR>.jar –cf <nombre-archivo-jar>.jar <clase-java1>.class <clase-java2>.class <clase-javaN>.class


2. Firma digital
Ya tenemos casi listo nuestro JAR, ahora solo deberemos firmarlo. Esta firma digital es importante ya que todas las aplicaciones se ejecutan dentro de un sandbox, que es un espacio de seguridad del cliente donde se ejecutará la aplicación. Los pasos son los siguientes.

a) Generar el Keystore: Desde línea de comandos entrar al direcotorio bin de nuestra instalación de Java (el JAVA_HOME).

<JAVA_HOME>\bin>keytool -genkey -alias test –keyalg RSA -keystore test.jks

Luego se habrá generado el archivo test.jks en el directorio bin .

b)
Lo siguiente será firmar el JAR con la herramienta KeyTool IUI disponible en KeyTool IUI 2.4.1

Con estos pasos tendremos una aplicación empaquetada y firmada que podrá ejecutarse en el cliente. Para más información al respecto de firma digital escuche el podcast de Javahispano no. 080 - Criptografia y Firma Digital.

3. Archivo de configuración de Java Web Start
Ahora crearemos el archivo de configuración de nuestra aplicación Java Web Start en nuestro editor de texto preferido. El archivo de configuración tendrá el nombre que deseemos y con la extensión .jnlp (holaMundo.jnlp). Se puede encontrar más información sobre cómo crearlo y más opciones de configuración en el siguiente enlace JNLP File Syntax.

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+"
codebase="http://localhost:8080/micontextoweb/javaws"
href="TheTime.jnlp"
>
<!-- Información general de nuestra aplicación -->
<information>
<title>Hola Mundo</title>
<vendor>Jorge Ruiz Aquino</vendor>
<homepage href="/micontextoweb" />
<description>Archivo de ejemplo</description>
</information>
<offline-allowed/>
<!-- Se establecen los permisos para la aplicación dentro del sandbox -->
<security>
<all-permissions/>
</security>
<!--
Se listan los recursos necesarios para la ejecución de la aplicación,
como la versión mínima de Java requerida, la ubicación del JAR de nuestra aplicación,
además de las librerías externas que se usarán.
-->
<resources>
<j2se version="1.5+" />
<jar href="http://localhost:8080/micontextoweb/javaws/AplicacionFirmada.jar"/>
</resources>
<!-- Se establece el nombre de la clase que contiene el método main() -->
<application-desc main-class="ClaseMain" />
</jnlp>

Los permisos en nuestra configuración anterior son necesarios además de la firma digital que hemos agregado al JAR en el paso anterior.

Ahora que tenemos nuestro archivo AplicacionFirmada.jar y nuestra configuración JavaWebStart holaMundo.jnlp; pondremos estos archivos y las librerías necesarias en donde corresponda dentro de nuestro servidor Web. En mi caso, será en mi servidor Web Apache Tomcat /micontextoweb/javaws/, tal como está configurado en el archivo .jnlp, en el apartado .

4. Soporte de JNLP en el servidor Web
Lo siguiente será asegurarse que el servidor Web soporta archivos de tipo JNLP, que es la extensión de las aplicaciones Java Web Start. Para esto se debe habilitar el soporte del tipo MIME en la configuración del servidor, por ejemplo, en el servidor Web Tomcat se puede habilitar en la configuración del archivo /conf/web.xml agregando un nuevo mapping para el tipo MIME. Por defecto Tomcat ya lo tiene habilitado.

<mime-mapping>
<extension>jnlp</extension>
<mime-type>application/x-java-jnlp-file</mime-type>
</mime-mapping>


5. Soporte de JNLP en el navegador Web

Posteriormente, en nuestra aplicación Web agregaremos una porción de código Javascript para verificar que el navegador soporta el tipo MIME. Aunque, actualmente la mayoría de los navegadores soporta este tipo de archivos.

function mimetypeCheck() {
// First, determine if Webstart is available
if (navigator.mimeTypes['application/x-java-jnlp-file']) {
plugin = navigator.mimeTypes['application/x-java-jnlp-file'];
} else {
document.write ("no jnlp file association
");
}
// Next, check for appropriate version family
for (var i = 0; i < navigator.mimeTypes.length; i++) {
plugin = navigator.mimeTypes[i];
}
}
mimetypeCheck();


6. Enlace a la aplicación Java Web Start en la aplicación Web
Finalmente, agregamos un enlace en nuestra aplicación Web para poder descargar la aplicación JNLP.

<a href="http://localhost:8080/micontextoweb/javaws/archivo.jnlp">Descargar JNLP</a>



Ahora estamos listo para arrancar el servidor Web y probar la ejecución de nuestra primera aplicación Java Web Start.


Suerte con su primera taza de Java Web Start.