GlassFish una excelente opción de código abierto: Deploy
Después de un rato de frustración por errores de configuración por fin logre desplegar más de 1 aplicación Web desarrolladas en Grails y con distintas versiones del framework (1.1.1 y 1.3.1). Para empezar hay dos forma de hacer un deploy en GlassFish, una en consola del SO y la otra con la consola de administración de GlassFish (Administration console). Yo uso la segunda opción por que es más fácil memorizar pantallas que comandos, pero no es bueno no tomar en cuenta lo poderosa que puede ser una consola en tareas administrativas con un grado mayor de complejidad.
Una vez que ya se haya instalado el GlassFish correctamente para hacer un deploy de forma rápida tenemos que ir a la sección de Applications en donde encontraremos un pequeño administrador para hacer deploy.
Pantalla 1 .- Consola de Administración de GlassFish en la sección de Applications
Al dar clic al botón deploy aparecerá un formulario donde tendremos que buscar en nuestro equipo el WAR que vamos a desplegar, el tipo de objeto que será desplegado, el nombre con que será llamado e identificado ,el servidor virtual donde se alojará, entre otras. Antes de querer desplegar una aplicación con Grails recomiendo descargar
este HelloWorld y subirlo a GlassFish para estar seguros de que GlassFish está funcionando correctamente.
Pantalla 2.- Formulario para subir y desplegar un aplicación en GlassFish
Al finalizar el deploy corremos la aplicación entrando a http://localhost/helloWorld o con la liga de Launch en la sección en donde empezamos (
Applications).
Desplegar una aplicación Grails versión 1.1.1
Este escenario no necesita una configuración especial, sólo hay que seguir el proceso normal de deploy y no es obligatorio crear un WAR sin JARS (grails war --nojars). A diferencia de Tomcat, GlassFish si te permite montar varias Grails app con todos sus JARS pero el problema comienza cuando tienes aplicaciones con versión 1.2.2 a 1.3.1, hasta ahora con estás he tenido problemas; por lo general el mensaje de error es similar a esto:
An error has occurred
There is no installed container capable of handling this application
com.sun.enterprise.deploy.shared.FileArchive@1e46947
Desplegar una aplicación Grails versión 1.3.1
El caso de aplicaciones de versión 1.3.1 es especial por que el archivo MANIFEST.MF que se genera en el WAR crea conflictos en el proceso de deploy que usa GlassFish. La solución o Workaround no está del lado de GlassFish sino en la cancha del core de Grails, por tanto tendremos que modificar un archivo de nombre _GrailsWar.groovy que se encuentra en /tu_grails_folder/scripts que es el script que se encarga de la construcción del WAR. Lo que hay que hacer es buscar las siguiente líneas y comentarlas:
// OSGi bundle headers
attribute(name:"Bundle-ManifestVersion",value:"2") // <-- Está se comenta
attribute(name:"Bundle-Name",value:"${grailsAppName}") // <-- Está se comenta
attribute(name:"Bundle-SymbolicName",value:"${grailsAppName}") // <-- Está se comenta
Entonces ahora cuando se construya un WAR con versión 1.3.1 el archivo MANIFEST.MF no tendrá los elementos que le crean conflictos al GlassFish. Ahora si, al hacer el WAR y desplegarlo en GlassFish no mostrará ningún mensaje de error y como dije esto es un WorkAround y es posible que pronto haya una mejor solución para esto.
Espero que esto le sea de utilidad y las fuentes del siguiente artículo son las siguientes:
Gails 1.2.2 and GlassFish
Update: La modificación del _GrailsWar.groovy funciona también para las versión 1.3.2 y 1.3.3 de Grails