Mastodon

Instalación de Liferay en un servidor GlassFish v3 para producción

En un anterior post mencioné los Portales en Java, y la facilidad que nos da el utilizar una plataforma con muchas funcionalidades, y nosotros simplemente deberíamos hacer los componentes que faltan. Estos componentes se llaman Portlets.

Ahora mencionaré uno de los gestores de Portlets en Java que, según mi opinión, es bastante útil. Su nombre LIFERAY. Pero no hablaré de sus cualidades, ni todo lo que puede hacer.. eso ya lo hizo Pedro Edison en su blog :), y como no hay que amontonar la red con lo mismo, esta vez mostraré cómo instalar el LIFERAY desde cero. No desde la instalación de un .exe, sino desde un archivo .war y sobre GlassFish v3 usando MySQL como gestor de base de datos.

Esto no lo he inventado, sino lo tomé del tutorial mismo de Liferay... pero como está en inglés, y el lector promedio de este blog busca más información en castellano, quiero hacer un aporte a la comunidad con este post.


Recursos


Para esta tarea necesitamos lo siguiente:
  1. Sistema operativo, cualquiera compatible con Java. Aunque estos pasos funcionan en todos los sistemas operativos con Java SE 6, en este post lo orientaré más a Windows... porque el lector promedio de este blog busca más información en Windows... etc etc etc.
  2. JDK 6. El cual lo puedes descargar desde aquí: http://java.sun.com/javase/downloads/widget/jdk6.jsp
  3. GlassFish v3. Si no lo has instalado, aquí lo mostraremos de la manera más fácil. Puedes descargar la versión .zip desde aquí: http://download.java.net/glassfish/3.0.1/release/glassfish-3.0.1-ml.zip. Esta es la versión multilingual, es decir, nos aparecerá en castellano los textos para entendernos mejor.
  4. El .war de Liferay: http://downloads.sourceforge.net/lportal/liferay-portal-5.2.3.war
  5. Archivos adicionales para preconfigurar el Contenedor Web: http://downloads.sourceforge.net/lportal/liferay-portal-dependencies-5.2.3.zip
  6. MySQL instalado ya sea localmente o en otro host, pero que tengamos acceso a ese computador. Pude haber hecho con PostgreSQL, pero tengo un par de inconvenientes: me han bloqueado todo tipo de instalación en el computador de donde trabajo, y... conozco casi nada sobre PostgreSQL.. así que mis disculpas a los amigos del elefantito. Pero si sois curiosos, sabréis como acomodar esto.
    OJO: que sea el MySQL puro, no uno de esos que vienen enlatados con Apache + PHP + PHPMyAdmin. Ya hablaré de este paquetito *AMP en otro post, que para unos es un alivio, pero puede ser un dolor de cabeza si no se usa con prudencia. El MySQL se puede descargar desde aquí: http://dev.mysql.com/downloads/mysql/
  7. El JDBC de la base de datos que vamos a utilizar. Cómo estamos en MySQL, este se puede descargar desde aquí: http://dev.mysql.com/downloads/connector/j/ Si decides usar otro motor de base de datos, pues no te olvides de conseguir el JDBC correspondiente.
Hasta aquí es lo necesario para una instalación básica. Pero quiero compartir mi experiencia de esta instalación:
  1. Usar el JDK de Sun. Toda esta instalación funciona bien con OpenJDK sobre un Ubuntu, CentOS, etc... pero el Captcha para autenticación no funciona correctamente sobre OpenJDK, por tanto usar el JDK de Sun.
  2. Descargar el Xerces-J. La instalación descrita aquí funciona correctamente, pero cuando se agregan nuevos portlets, el Contenedor Web no es capaz de interpretar los archivos de despliegue de ellos. Para este ejemplo usaremos la versión 2.9.0: http://archive.apache.org/dist/xml/xerces-j/Xerces-J-bin.2.9.0.zip

Instalación y preconfiguración de GlassFish v3 

La instalación de GlassFish v3 es bastante simple, más aún si es un .zip como el que sugerí para descargar: Solo hay que descomprimirlo. Por ejemplo, lo descomprimiremos en la raíz de C: Y tendrá una estructura como esta.

A partir de este momento, cada vez que mencione %GLASSFISH_HOME% se entenderá al directorio del GlassFish que se descomprimió. Es decir c:\glassfishv3

Importante: Mucho se acostumbra crear una carpeta con el mismo nombre del archivo comprimido, lo cual es una práctica no recomendada aquí, ya que el comprimido ya tiene una carpeta. Si se hace eso, se tendría una carpeta llamada glassfishv3, y dentro otra vez glassfishv3, y ocasionará confusión. Por tanto, no usar la opción "crear una carpeta con el nombre del archivo .zip". Simplemente descomprimirlo directamente a la raíz de "C:". Ojo que ya lo advertí :P.

Ahora, extraemos el contenido del archivo liferay-portal-dependencies-5.2.3.zip en cualquier carpeta, luego tomamos los archivos .jar que se obtuvieron y los pondremos dentro de %GLASSFISH%\glassfish\domains\domain1\lib. En esta misma carpeta ponemos el .jar del JDBC de MySQL, y los archivos xercesImpl.jar y xml-apis.jar de Xerces



Después de esto, iniciamos el GlassFish v3...
%GLASSFISH_HOME%\bin\asadmin start-domain



... para continuar con el siguiente paso.

Debemos modificar las propiedades de la máquina virtual donde se ejecutará el Liferay. Para ello seleccionamos del menú de la izquierda: Configuration > JVM Settings.
Y cambiamos los valores de MaxPermSize y Xmx a los siguientes:

  • -XX:MaxPermSize=256m
  • -Xmx1024m

Clic en "Save". Detenemos el GlassFish, y lo volvemos a iniciar.
%GLASSFISH_HOME%\bin\asadmin stop-domain%GLASSFISH_HOME%\bin\asadmin start-domain

Preparación de la base de datos

El Liferay utiliza una base de datos por omisión llamada HSQLDB, pero podemos configurarlo para que funcione con cualquier otra base de datos. En este caso veremos con MySQL. En sí, se necesita crear una base de datos en MySQL, configurar un Pool de Conexiones, y ajustar un poco el .war para que utilice este Pool.

Sugerencia: Antes de hacer esto, recomiendo siempre crear un usuario que acceda a esta base de datos, y no usar el root para tal fin. ¿Cómo crear ese usuario?.
Desde una ventana del símbolo del sistema, ejecutar
mysql -u root -p
Con esto se ejecutará el cliente de MySQL con el usuario root y pedirá la contraseña. Bueno, le ponemos y nos mostrará el prompt mysql>.


Escribimos lo siguiente para crear la base de datos lportal:

create database lportal;

y luego escribimos lo siguiente para el usuario lportal que accederá a esa base de datos:

grant all on lportal.* to lportal@localhost identified by "lportal";




Más sobre los permisos en MySQL, aquí: http://dev.mysql.com/doc/refman/5.1/en/grant.html
Ahora sí, seguimos...

Configuración del pool de conexiones en GFv3 para Liferay

Entramos a la consola web de GFv3 (http://localhost:4848) y seleccionamos del árbol de la izquierda Resources > JDBC > Connections Pool



 Hacemos clic en el botón "New..." para crear una nuevo Pool de Conexiones. Escribimos:
  • Name: LiferayPool
  • Resource Type: javax.sql.ConnectionPoolDataSource
  • Database vendor: MySQL

 Clic en Next.
Ahora, se mostrarán todas las propiedades de la conexión a la base de datos. Activamos el primer check llamado Ping: Enabled. Esto nos permitirá verificar si la conexión fue correcta después de crear el pool de conexiones. Luego buscamos las siguientes propiedades, y ponemos los valores que se muestran a continuación:
  • URL:jdbc:mysql://localhost/lportal
  • User: lportal
  • Password: lportal
  • UseUnicode: true
  • CharacterEncoding:UTF-8
  • EmulateLocators: true

Hacemos clic en el botón "Save", y si todo está correcto, se creará sin problema.

Con esto solo hemos creado un Pool de Conexión, ahora necesitamos registrarlo en el JNDI del Servidor. Para ello, seleccionamos la opción Resources > JDBC > JDBC Resources


Hacemos clic en "New..." y escribimos los siguientes valores en los campos:
JNDI Name: jdbc/LiferayPool
Pool Name: LiferayPool


¡¡El nombre del recurso es importante!! Debe estar en mayúsculas y minúsculas.

Clic en OK y listo. Seguimos con el siguiente paso.


Despliegue del .war

Como comenté hace un momento, el .war de liferay está preparado para funcionar con una base de datos incrustada llamada HSQLDB. Lo que necesitamos es que se conecte a nuestro MySQL. Por algo hemos preparado el Pool de conexiones. Así que necesitamos editar un archivo llamado portal-ext.properties, adjuntarle el atributo:

jdbc.default.jndi.name=jdbc/LiferayPool 

... y luego ponerlo dentro del .war (en el directorio WEB-INF/classes dentro del .war) antes de desplegarlo.

Notar que el nombre del JNDI (jdbc/LiferayPool)  debe ser exacto cómo se configuró en GlassFish en el paso anterior.

Si te es complicado crear el archivo, aquí puedes descargarlo: http://java.net/downloads/apuntes/resources/liferay/portal-ext.properties

Y si te es complicado poner el .properties dentro del .war, aquí ya tengo un .war preparado (que es el que uso en las instalaciones de Liferay)
http://java.net/downloads/apuntes/resources/liferay/liferay-portal-5.2.3.war

Ahora sí, tomar mucho cuidado con lo siguiente que se va a explicar respecto al despliegue del .war

En la consola del GlassFish, ir a la opción "Applications" del menú izquierdo, y hacemos clic en el botón "Deploy...". En la opción "Location", seleccionamos el archivo .war que de liferay. Al hacer esto, se mostrarán más opciones que corresponden a la configuración del despliegue del .war.

En la casilla llamada "Context Root:" aparecerá el nombre del archivo .war. Borrar este nombre y poner el signo "/".


Ahora, clic en "OK".

Esto tomará un tiempo procesar. Aún cuando ya se haya mostrado el mensaje en GlassFish que fue desplegado correctamente, no necesariamente habrá terminado, porque estará configurando archivos, bibliotecas, creando las tablas de la base de datos, preparando otros recurso, etc etc etc. Así que en esta parte tener paciencia. Se puede revisar el log para ver en qué está. %GLASSFISH_HOME%\glassfish\domains\domain1\logs\server.log.

La Ruta del contexto (Context Root) es importante porque la aplicación se mostrará en la raiz del host, y varios componentes de la aplicación se ubicarán en la misma ubicación, como "/c" y "/widgets".

Ejecutando el Liferay

Después del despliegue, ya podemos verlo en funcionamiento abriendo la siguiente dirección: http://localhost:8080 Sin ruta de contexto, ya que (como acabo de mencionar) está en la raíz del host.


El usuario creado por omisión para administrar este Portal es test@liferay.com y su contraseña es test.

Conclusión

Y esto sería todo para tener en producción un Contenedor de Portlets sobre GlassFish v3. De por sí el GFv3 es pesado para manejar en desarrollo, más aún si se utiliza con Liferay, así que hay que considerarlo si se utiliza en un computador de desarrollo con pocos recursos (entiéndase, no usar Pentium D.. sino algo muy superior, ni menos con 2GB de RAM).

En un siguiente Post veremos (ahora sí) cómo configurar NetBeans 6.9 con un servidor liferay y haremos nuestro primer portlet.


Hasta el siguiente post!
Artículo Anterior Artículo Siguiente