martes, octubre 27, 2009

Instalación de OpenCms 7.5.0 en Glassfish 2

Hola,

para los que conozcais la herramienta OpenCms (gestor de contenidos open source), sabréis que se trata de una aplicación web java que se despliega habitualmente sobre un servidor Tomcat.

Sin embargo, por diferentes cuestiones, a veces es necesario desplegarlo sobre otros servidores de aplicaciones y es aquí cuando empezamos a tener problemas. En el caso de Glassfish 2, al que me he tenido que enfrentar, la instalación no funcionaba.

OpenCms se distribuye como un .war, por lo cual su instalación sobre un servidor de aplicaciones no debería dar ningún problema y sin embargo, los da.

En diferentes foros, se nos brindan varias soluciones, ninguna de las cuales nos sirvió, porque se suele hablar de modificar ciertos parámetros en el archivo web.xml o bien, modificar ciertas clases de la herramienta. Seguimos las instrucciones, pero no conseguimos hacerlo funcionar.

Esta pequeña investigación, que nos permitió encontrar una solución, siguió los siguiente pasos:

1.- Instalación "por las bravas"

Dado que la instalación no era posible inicialmente, una de mis compañeras tuvo una idea.

En el mismo servidor donde teníamos instalado el Glassfish, instalamos y arrancamos un Tomcat. Desplegamos la aplicación sobre el Tomcat sin problemas y llevamos a cabo del proceso de instalación. En el caso de OpenCms, la instalación no termina al desplegar el .war, sino que debemos entrar en un wizard que proporciona la aplicación y seguir los pasos necesarios hasta tener el producto operativo.

A continuación, paramos el Tomcat y copiamos la carpeta "opencms", que se encontrará dentro del directorio "webapps" del Tomcat y la llevamos al directorio de despliegue de aplicaciones del Glassfish: "
/domains/domain1/applications/j2ee-modules/".

Tras arrancar el servidor Glassfish, la aplicación OpenCms estaba funcionando perfectamente.

2.- Retocar el war

Una vez teníamos el OpenCms funcionando sin problemas, desarrollamos unos servicios web que debían funcionar sobre la aplicación OpenCms, en el mismo contexto. El caso es no conseguíamos desplegar los servicios web.

La investigación que permitió resolver el problema, también nos dió la clave sobre lo que podía estar impidiendo que el .war se desplegase correctamente en Glassfish.

Como cada servidor de aplicaciones sigue sus propias reglas (esto pasa también con WebSphere, JBoss o Weblogic), aparte de los archivos de configuración estándar, disponen de sus propios archivos adicionales. En el caso de Glassfish, existe un archivo llamado "sun-web.xml" que se debe incluir en el directorio "\WEB-INF" de la aplicación. Para OpenCms, basta con añadir el archivo "sun-web.xml" con el siguiente contenido:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
<context-root>/opencms</context-root>
<class-loader delegate="true"/>
<jsp-config>
<property name="keepgenerated" value="true">
<description>Keep a copy of the generated servlet class' java code.</description>
</property>
</jsp-config>
</sun-web-app>


La segunda cosa que había que cambiar es la siguiente: en el archivo "web.xml" de Tomcat se refleja una versión anterior del archivo, la 2.4. El encabezado que viene en el archivo dentro del .war que nos bajamos es el siguiente:

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">


Si lo cambiamos por este otro:


<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">


Podíamos desplegar servicios web sin problemas en la aplicación. En definitiva, la solución para realizar la instalación sin problemas consiste en:

  • Obtener el .war de OpenCms.
  • Editar el .war.
  • Añadir el archivo "sun-web.xml".
  • Modificar la cabecera del archivo "web.xml".
  • Realizar el despliegue con este .war modificado.
Espero que esto os sirva de ayuda a alguno de vosotros.