13 abril, 2009

Helma NG sobre Google App Engine

Apenas han pasado unas horas desde que comenté que Rhino corría sobre la nueva versión Java de Google App Engine y la gente de Helma acaba de lanzar Helma NG, una versión de su framework JavaScript que funciona directamente sobre el motor de Google. via Simon Willison. Traduzco su artículo:

Con el anuncio de Google de soportar Java en App Engine aparecen de repente muchas nuevas opciones muy atractivas para alojar aplicaciones web basadas en Java. Desde luego, mi primer impulso fue comprobar si ejecutaría Rhino y Helma NG (tenía pocas esperanzas con Helma 1 ya que ejecuta un montón de hilos de fondo y confía mucho en soporte de base de datos relacionales o basada en archivos, ninguna de las cuales está disponible en App Engine).

Para mi sorpresa, Rhino funciona perfectamente sin modificaciones, y sólo tuve que hacer unos pocos cambios a Helma NG para conseguir que la aplicación demo funcionase en App Engine. Esto es algo en contradicción con lo que otros han experimentado, pero descubrí más tarde que tuve suerte de no encontrar ninguna SecurityException, pero por otra parte es virtud de Rhino por no hacer ninguna chapuza truculenta en su interior, y Helma NG de hacer todas sus lecturas de arhivos a través de una estructura de recursos unificada.

Este artículo cubre dos opciones, una usando la framework de aplicaciones web Helma NG y otra usando la interfície Jack para aplicaciones web Javascript. Ambas están actualmente por terminar y sujetas a cambios, pero son suficientes para mojarse los pies.

Prerrequisitos: Instalar el SDK de App Engine y Helma NG


Primero, instala el SDK de App Engine para Java conforme se describe en las páginas de Google. Ya estés usando el plugin de Eclipse o la línea de comandos del SDK, no debe haber diferencias. Yo uso Eclipse, pero las cosas deben ser similares con la línea de comandos.

Siguiente, necesitas Helma NG, que es efectivamente Rhino con una fina capa sobre él de funcionalidad relacionada con el servidor. Helma NG viene con su propia copia de Rhino ya que estamos usando algunas características experimentales de JS 1.8, pero esto podría cambiar pronto en cuanto esas características formen parte de una release de Rhino.

No ha habido una release de Helma NG recientemente por lo que hay que obtenerla de Subversion o Git. Para Subversion, el comando es:

svn co https://dev.helma.org/svn/helma-ng/trunk/ helma-ng

Para Git:

git clone git://github.com/hns/helma-ng.git

Necesitas Apache Ant para construir Helma NG. Cambia al directorio de helma-ng que has bajado (check out) y ejecuta ant en él con el objetivo/target "jar":

ant jar

Si todo ha ido bien, debes tener un archivo llamado lib/helma.jar.

Creando un nuevo proyecto de aplicación web


Una vez que está todo en su sitio, crea una nueva aplicación en App Engine. Con el plugin Eclipse haces esto usando el nuevo asistente de proyectos y seleccionando "Web Application Project" en la categoría Google. Pedirá un nombre de proyecto y un nombre para el paquete. El nombre del paquete no importa a menos que planees escribir código Java, pero es necesario indicar uno.

El nuevo proyecto deberá tener dos subdirectorios, "src" y "war". De nuevo, el directorio src es sólo relevante para el código Java, ya que pondremos directamente nuestro código Javascript en war/WEB-INF y nuestros archivos jar en war/WEB-INF/lib.

Ahora copia algunos archivo jar desde el directorio lib de Helma NG al directorio war/WEB-INF/lib del proyecto. Necesitarás probablemente los siguientes:

  • lib/js.jar
  • lib/helma.jar
  • lib/log4j-1.2.15.jar

App Engine tiene su propio servidor web por lo que no serán necesarios los archivos jar de jetty o de servlet.

A partir de aquí hay dos opciones: Ejecutar la aplicación usando el framework de Helma NG o usando la interfície Jack. La primera opción está sujeta a un rediseño profundo, mientras que la segunda no está terminada, por lo que usa tus herramientas sabiamente :-)

Ejecutando aplicaciones de Helma NG


Para ejecutar la aplicación demo de Helma NG sigue los siguientes pasos:
  1. Copia los directorios de módulos desde el directorio de Helma NG a war/WEB-INF de forma que el directorio resultante sea war/WEB-INF/modules.
  2. Copia la aplicación demo desde apps/demo a war/WEB-INF de forma que el directorio resultante sea war/WEB-INF/demo.
  3. Copia o mueve el directorio static dentro de la aplicación demo dos niveles arriba al directorio war/static.
  4. Edita el archivo web.xml en el directorio war/WEB-INF para que parezca esto, o simplemente copia el archivo.

Ya está. Guarda todos los cambios y pulsa el botón verde de ejecución en Eclipse para iniciar el servidor de desarrollo. Si todo funciona conforme a lo previsto, deberías tener acceso a la aplicación demo en http://localhost:8080/.

Nota: El framework de aplicaciones web Helma está actualmente en estado de rediseño general. Si estás buscando una plataforma de desarrollo estable, recomiendo esperar hasta la inminente versión 0.3.

Ejecutando aplicaciones Jack


Helma NG provee un servlet para ejecutar aplicaciones Jack sin usar la propia infraestructura modular de Helma. En este modo, obtienes un entorno de ejecución (runtime) Javascript relativamente desnudo que cumple totalmente con la propuesta de ServerJS Securable Modules.

Copia el directorio modules desde el directorio de Helma NG a war/WEB-INF de forma que el directorio resultante se llame war/WEB-INF/modules, pero para un entorno mínimo, copia sólo los dos siguientes archivos:
  • modules/global.js para una funcionalidad básica como la carga de módulos y recursos.
  • modules/helma/jack.js para funciones de ayuda usadas por el servlet Jack

Ahora crea un directorio llamado war/WEB-INF/myapp, y crea un archivo en su interior llamado main.js con el siguiente contenido:

  function handler(env) {
    return [200, {"Content-Type": "text/plain"}, "Hello World!"];
  }

Finalmente, edita el archivo war/WEB-INF/web.xml para que se parezca a esto o descárgalo y sobreescríbelo.

Guarda todos los cambios y pulsa el botón verde de ejecución en Eclipse para iniciar el servidor de desarrollo. Si todo funciona conforme a lo previsto, deberías tener acceso a la aplicación demo en http://localhost:8080/.

Si no quieres o necesitas Helma NG, otra opción para ejecutar Jack sobre App Engine es usar la librería Jack original de Tom Robinson.

Nota: El soporte de Jack sobre Helma NG es uy novedoso y, por tanto, bastante incompleto. Siéntete libre de rellenar los agujeros que encuentres.

Publicar un comentario en la entrada

Últimos links en indiza.com