viernes, 24 de febrero de 2012

Compilando una aplicación GWT

Modo de Producción

Si ha completado con éxito las pruebas de la aplicación en modo de desarrollo, proceda a compilarla para generar el código JavaScript, genere un Web Archive (WAR) e instálelo en el servidor web  de su preferencia. La aplicación se ejecutará en modo de producción y será equivalente al modo de desarrollo. Es posible que encuentre algunas fallas que no se presentaron en modo de desarrollo, pero no es frecuente que esto suceda.

Ejecutar su aplicación en modo de producción permite probar la aplicación como si ya hubiese sido instalada en el servidor web final. Puede realizar pruebas desde diferentes navegadores apuntando al URL en donde reside su aplicación en el computador en donde instaló su servidor web de pruebas.

Desempeño de la aplicación (performance)

El modo de desarrollo de GWT utiliza un motor (engine) especial para ejecutar la aplicación como una mezcla de bytecode de Java y JavaScript, por esta razón la ejecución se notará más lenta a como se ejecuta en modo de producción. Aunque habrá ocasiones en las que complejos algoritmos escritos en Java se ejecutarán mucho más rápido en modo de desarrollo dado que el JVM supera a la mayoría de los motores de JavaScript.

Sin embargo, cuando la aplicación despliega grandes cantidades de datos en un número considerable de Widgets, podrá confirmar que el desempeño será mucho mejor cuando la aplicación haya sido instalada en un servidor web.

Desempeño de la aplicación

GWT ha sido diseñado para proveer soporte en múltiples navegadores, de tal manera que el promedio de los desarrolladores no deben preocuparse por cómo acondicionar la aplicación a cada navegador. Pero si crea nuevos Widgets o si utiliza librerías JavaScript de terceros, debe confirmar que estos componentes operan correctamente en cada navegador en donde se ejecutará la aplicación.

Apariencia en diferentes navegadores

Como los Widgets de GWT usan los componentes nativos DOM de cada navegador, la apariencia de la aplicación puede cambiar de un navegador a otro. Cuando utilice una hoja de estilos (stylesheet) verifique que este estilo funciona correctamente en cada navegador.

Compilador GWT

El compilador es el corazón de GWT, convierte código fuente Java en JavaScript. Soporta la gran mayoría del lenguaje Java. La librería de ejecución GWT (GWT runtime library) emula un subconjunto relevante de la librería de ejecución Java (Java runtime library). Cuando una clase de JRE o un método no es soportado, el compilador emitirá un error.

El compilador puede ser ejecutado desde la línea de comando del sistema operativo, pero en este caso continuaremos utilizando las bondades de Eclipse Helios.

Utilizaremos como ejemplo el proyecto creado en el blog Instalando Eclipse y GWT.

Para compilar una aplicación, simplemente abra Eclipse, seleccione el proyecto que va a compilar y desde la barra de comandos seleccione el icono de GWT y luego la opción GWT Compile Project:


El compilador mostrará las siguientes opciones de compilación:



Analicemos estas opciones:

Project

Confirme el nombre del proyecto que va a compilar.

Log Level

Define el  nivel de detalle de los mensajes que aparecerán en el log de la aplicación. Seleccione una de las siguientes: Error, Warn, Info, Trace, Debug, Spam, All.

Output Style

Define el estilo de presentación en el que será generado del código JavaScript. Obfuscated es el estilo que hace que el código JavaScript luzca como una sopa de letras, el código está comprimido y es muy complicado descifrarlo. Además, ayuda a proteger la propiedad intelectual de su aplicación y reduce el tamaño de los archivos JavaScript convirtiéndose en una ventaja cuando el código deba transportarse del servidor web al navegador del cliente. Pretty genera un código JavaScript mucho más claro y entendible. Detailed mejora la versión Pretty y produce más detalles del código.

Intente probar estos estilos de compilación como ejercicio de comparación del código JavaScript generado.

Entry Point Moules

GWT identificará el punto de entrada (entry point) de su proyecto. Sin embargo verifique que el que aparece en esta ventana de opciones es el mismo que se ha definido en el archivo descriptor.

Cuando haya identificado estas opciones, de click en Compile.

Observe los mensajes que aparecen en la vista Console de Eclipse:



Desde el explorador de proyectos de Eclipse, abra el proyecto ejemplo1, abra el directorio war y luego el directorio ejemplo1. Observe los archivos que se han generado allí como producto del proceso de compilación. El número de archivos HTML corresponde al número de permutaciones hechas por el compilador (ver vista Console de Eclipse).



Abra uno de estos archivos HTML para observar el código JavaScript generado. Compile de nuevo el proyecto cambiando una de las opciones de Output Style y revise el nuevo código JavaScript para que observe las diferencias. Cuando vaya a compilar la aplicación para ser instalada en un servidor web, es recomendable que genere el código en estilo Obfuscated para que los archivos sean más compactos y sean de difícil interpretación para quienes intenten copiar el código sin autorización.

Analicemos algunos de los archivos creados por el compilador GWT:

Ejemplo1.html

Es la página principal de la aplicación (host page) y la que los visitantes a su servidor web podrán ver primero. En esta página serán cargados el resto de los archivos de la aplicación. El archivo HTML debe contener una etiqueta <script> en donde se referencia el archivo de arranque (bootstrap):

<script type="text/javascript" language="javascript"
      src="ejemplo1/ejemplo1.nocache.js"></script>

Archivo de arranque (bootstrap) ejemplo1.nocache.js

Este archivo es responsable de seleccionar la correcta versión de su aplicación para ser cargada por el cliente dependiendo del navegador y los parámetros de ubicación (locale).

Archivos de la aplicación (.cache.html)

Es el conjunto de archivos generados más importantes. Representan una versión de su aplicación ajustada a un navegador específico. Estos archivos son seleccionados por el archivo de arranque (bootstrap) después que ha identificado el navegador desde el cual se está ejecutando la aplicación.

Archivo RPC (.gwt.rpc)

Este archivo es requerido si se está utilizando RPC en la aplicación. Soporta la interface de serialización para tipos de datos transferidos a través de RPC.

Recursos Públicos

Todos los recursos públicos tales como archivos de imágenes, estilos, o archivos XML pueden ubicarse en cualquier parte dentro del subdirectorio war

7 comentarios:

  1. Excelente, me has sacado de algunas dudas que tenía con respecto a la compilación de proyectos en GWT.

    ResponderBorrar
  2. excelente, no había encontrado una guía tan completa en español, voy a paso a paso entendiendo cada uno de los capitulos

    ResponderBorrar
  3. una pregunta amigo, lo que pasa es que tengo una aplicacion en gwt uso gxt, hibernate, mysql, gilead, c3p0 y tengo la siguiente falla:
    Cuando corro mi aplicacion desde el eclipse me funciona perfectamente, pero cuando genero el war con el compilador al desplegarlo en el apache tomcat uno de los modulos funciona bien y el otro no, tiene fallas con la base de datos (por ejemp al registrar no valida bien antes de insertar y al recuperar a veces recupera bien y otras no), no se si sera el error al compilar el codigo java aunque es raro que funcione un modulo y el otro no. Si puedes ayudarme te lo agradeceria =)

    ResponderBorrar
  4. Es dificil darte una opinion acertada acerca de este problema sin conocer muy bien la arquitectura que has implementado. Tendrias que revisar que todas las librerias (.jar) estan dentro de tu estructura de Tomcat. Reiniciar Tomcat para estar seguro de que Tomcat reconoce las librerias. Ademas, tendras que establecer una manera de crear logs que te ayuden a conseguir informacion de como funciona tu aplicacion.

    ResponderBorrar
  5. Buenas, hago lo que pasos de post, pero cuando quiero acceder desde una pagina, me da un 404 diciendo que no encuentra los servicios. Tenes alguna idea de que me puede faltar?

    ResponderBorrar
  6. Cuál es el URL que entras en el browser para acceder a tu aplicación?

    ResponderBorrar
  7. Quizá uno de los siguientes artículos resulva tu problema: http://desarrollandocongwt.blogspot.com/2012/02/ejecutando-una-aplicacion-gwt.html

    ResponderBorrar

Autor de El Efecto Margarita