openxava / documentación / Liferay en Glassfish

Es posible hacer correr sin problemas una aplicación OX V 3.1.4 instalando Liferay 5.2.3 sobre un servidor Glassfish V 2.1 ya existente y con el motor de base de datos Postgresql V 8.4.
Estos pasos pueden aplicar a cualquier versión de Liferay 5.x sobre Glassfish 2.x.
La guía de administración de Liferay se usó como base para los pasos aquí descritos.
También se usó el excelente artículo escrito por Scott Fehrman, Liferay 5.0 on existing Glassfish v2.
Mis agradecimientos y reconocimientos a Oscar Caro por su valioso aporte y ayuda para armar esta solución.
Acá se introduce la variante de crear un dominio propio denominado lportal para desplegar Liferay, aunque se puede trabajar perfectamente sobre el dominio por omisión de Glassfish (domain1).

Pre-requisitos


Descargas de software


Estos archivos están disponibles en la página oficial de descargas de Liferay (www.liferay.com)

Descomprima el archivo liferay-portal-dependencies-5.2.3.zip en un directorio seleccionado.
Descomprima el archivo liferay-portal-sql-5.2.3.zip en un directorio seleccionado.

Configuración de base de datos Postgresql

Ir al PGAdmin III e iniciar sesión en su servidor porgresql de preferencia.
Crear una nueva base de datos denominada lportal con soporte UTF8
glassfish-liferay_es010.png
Seleccione la base de datos lportal y haga click en el icono de comandos sql
glassfish-liferay_es020.png
Esto nos lleva a la consola de comandos:
glassfish-liferay_es030.png
Seleccione la opción de abrir archivos, bien por el menú Archivo opción Abrir... o por el botón glassfish-liferay_es040.png de la barra de tareas:
Esto nos lleva a la caja de dialogo para abrir archivos de script de sql:
glassfish-liferay_es050.png
Ubique el directorio donde descomprimió el archivo liferay-portal-sql-5.2.3.zip, y seleccione el archivo create-minimal-postgresql.sql de la ruta:

<TU-DirectorioSQL>\liferay-portal-sql-5.2.3\create-minimal\create-minimal-postgresql.sql

Pulse abrir.
Se cargara el archivo en la consola de sql:
glassfish-liferay_es060.png
Borre las tres primeras líneas del archivo cargado ya que estas corresponden a borrar y crear la base de datos lportal, la cual esta en blanco en nuestro caso:
Borrar:
drop database lportal;
create database lportal encoding = 'UNICODE';
\c lportal;


Pulse el botón glassfish-liferay_es070.png para ejecutar el script.
Al terminar la ejecución cierre la ventana del asistente de comandos sql.
Pulse refrescar sobre su base de datos lportal y en la sección tablas deben aparecer 139 tablas recién creadas.
Cierre el PGAdmin III.

Crear un nuevo dominio en Glassfish

Vamos a crear un dominio denominado lportal, con la clave de administrador lportallportal (Ud puede usar el nombre de portal y clave de administrador que mejor se ajuste a sus preferencias).
Abrir una consola de comandos del sistema.
Ir al directorio de instalación de GlassFish y al subdirectorio bin.
en el directorio bin de la instalación de Glassfish escribir y ejecutar el siguiente comando:

asadmin create-domain --adminport 14848 -instanceport 18080 lportal

Donde:

Seguidamente el comando nos solicita el nombre del usuario administrador:
Please enter de admin user name> lportal
Indicamos el nombre lportal y pulsamos enter.
Luego nos solicitan el password o clave del usuario administrador:
Please enter de admin password> lportallportal
Indicamos la clave lportallportal y pulsamos enter.
Luego nos solicitan confirmar el password o clave del usuario administrador:
Please enter de admin password again> lportallportal
Indicamos nuevamente la clave lportallportal y pulsamos enter.
Paso siguiente nos solicita el master password del servicio y su confirmación, pulsamos enter en ambos casos para aceptar el valor por omisión.
>Please enter the master password [Enter to accept the default]:
> Please enter the master password again [Enter to accept the default]:
Acá se muestra un ejemplo de la salida de la consola:
> Using port 14848 for Admin.
>Using port 18080 for HTTP Instance.
>Default port 7676 for JMS is in use. Using 50684
> Default port 3700 for IIOP is in use. Using 50685
> Default port 8181 for HTTP_SSL is in use. Using 50686
> Default port 3820 for IIOP_SSL is in use. Using 50687
> Default port 3920 for IIOP_MUTUALAUTH is in use. Using 50688
> Default port 8686 for JMX_ADMIN is in use. Using 50689
> Domain being created with profile:developer, as specified by variable AS_ADMIN_PROFILE in configuration file.
>Security Store uses: JKS
>Domain lportal created.

Esto nos crea el dominio solicitado con algunas librerías y archivos .war pre cargados por defecto. Estos últimos deben ser eliminados puesto que no los necesitamos e incluso pueden hacer que nuestra aplicación OX no funcione adecuadamente a la larga. En especial el archivo amserver.war puede ser fuente de conflictos. Por lo que procedemos a eliminar estos archivos.

Detener Glassfish si se encuentra ejecutandose


> {GLASSFISH-DIR}\bin\asadmin stop-domain lportal

Borrar Archivos

Ir a directorio de dominios en Glassfish (domains) y buscar el dominio creado por nosotros (lportal), una vez alli vamos al directorio denominado autodeploy. Una vez alli procedemos a borrar todos los .war existentes en el directorio. Acá se muestra un ejemplo de los posibles archivos a borrar:


Copiar Librerías requeridas

Ahora vamos a copiar algunos archivos requeridos por Liferay:

Seleccionar los archivos descomprimidos de liferay-portal-dependencies-5.2.3.zip y copiarlos al directorio lib dentro del dominio lportal.

> {GLASSFISH-DIR}\domains\lportal\lib

Esta es una muestra de los archivos a copiar:



Adicionalmente se requiere copiar a ese directorio los archivos siguientes:


Note que ya incluimos el driver jdbc de postgresql. Usamos la versión jdbc4 porque con la versión jdbc3 se presenta un error al momento de efectuar la conexión.
En versiones de Liferay anteriores a la 5.2 se puede requerir copiar además los siguientes archivos:



Iniciar GlassFish


> {GLASSFISH-DIR}\bin\asadmin start-domain lportal

Iniciar sesión de Administrador


Ir a la pagina:
http://localhost:14848
para abrir una sesión en la consola de administrador para el dominio lportal.
Note el uso del puerto 14848 según nuestra configuración.
Esto nos lleva a la ventana de login de la consola donde debemos indicar nuestras credenciales de administrador para el dominio en cuestión, con nombre de usuario: lportal y contraseña: lportallportal.
glassfish-liferay_es080.png

Recursos JDBC y Pool de Conexiones

Ahora procedemos a crear los recursos y pool de conexiones de Liferay.

Pool de Conexión

En la ventana de consola de administración de Glassfish, en la sección de Tareas Comunes seleccionamos: Crear nuevo conjunto de conexión JDBC.
En la ventana de configuración que se abre colocar los valores siguientes:
Nombre : LiferayPool (Nombre del conjunto de conexión)
Tipo de Recurso: javax.sql.ConnectionPoolDataSource (Tipo del recurso de conexión, también se puede usar : javax.sql.DataSource)
Proveedor de la base de datos: PostgreSQL (Nuestro proveedor de servicios de base de datos)
Pulsamos el botón siguiente.
En la ventana de dialogo, en la sección de Propiedades adicionales colocamos:
Nombre Valor
DatabaseName lportal
Password <Nuestro Password de Postgresql>
PortNumber 5432 ( o nuestro valor de Puerto del Server de Postgresql)
ServerName localhost (o nuestra Ruta de Servidor de Postgresql)
User <Nuestro Usuario de Postgresql>
Hacemos click en finalizar. Podemos probar nuestra conexión seleccionando la que acabamos de crear de la lista de conexiones disponibles y pulsando la opción sondeo. Al hacer esto nos debería indicar que se realizo la conexión satisfactoriamente.

Por la consola de comandos podemos efectuar esta tarea mediante la orden:
{GLASSFISH-DIR}/bin/asadmin create-jdbc-connection-pool \
--datasourceclassname org.postgresql.ds.PGConnectionPoolDataSource \
--host localhost \
--port 14848 \
--user lportal \
--restype javax.sql.ConnectionPoolDataSource \
--description "Lferay pool" \
--property ServerName=localhost:Password=postgres:DatabaseName=lportal:User=postgres:PortNumber=5432 \
LiferayPool
Pulsamos enter:
>Please enter the admin password> lportallportal
>Command create-jdbc-connection-pool executed successfully.

Recursos JNDI JDBC

Seguidamente en la sección de Recursos, seleccionamos Recursos JDBC.
En la tabla de recursos disponibles pulsamos la opción nuevo, e indicamos lo siguiente:

Nombre JNDI jdbc/LiferayPool (Nombre de jndi usado por liferay como recurso de datos)
Nombre de Conjunto LiferayPool (Seleccionamos el conjunto de conexión creado en el paso anterior)
Descripción Indicamos una descripción (opcional)
Estado Activado.

Pulsamos en Aceptar. Ya tenemos nuestros recursos de conexión configurados.

Por la consola podemos hacerlo con el comando:

{GLASSFISH-DIR}/bin/asadmin create-jdbc-resource \
--connectionpoolid PostgreSQL_Liferay \
--host localhost \ --port 14848 \
--user lportal \
--enabled=true \
--description "Liferay Portal 5.2.3 Pool" \
jdbc/LiferayPool
Pulsamos enter:
>Please enter the admin password lportallportal
>Command create-jdbc-resource executed successfully.

Recursos JavaMail

Ahora configuramos una sesión para nuestro servicio de correo.
En la consola grafica del Administrador, en la sección Recursos seleccionamos: Sesiones JavaMail.
En la tabla de lista de sesiones disponibles pulsamos el botón nuevo.
En la ventana de configuración que se abre ingresamos los siguientes valores:

Nombre JNDI mail/MailSession
Host de Correo localhost
Usuario Predeterminado root@localhost
Dirección de remite predeterminada root@localhost
Descripción Liferay mail
Estado Activa
Pulsamos Aceptar. Ya tenemos la sesión de correo configurada.
Estos valores debes adecuarlos a tu propia configuración en tu entorno real de correo. Estos valores son solo de muestra.
Acá se presenta como hacer esto por la consola de comandos:
{GLASSFISH-DIR}/bin/asadmin create-javamail-resource \
--mailhost localhost \
--mailuser root@localhost \
--fromaddress root@localhost \
--host localhost \
--port 14848 \
--user lportal \
--enabled=true \
--description "Liferay Portal Mail" \
mail/MailSession
Pulsamos enter:
>Please enter the admin password lportallportal
>Command create-javamail-resource executed successfully.

Desplegar Liferay


Detener Glassfish si se encuentra ejecutandose


> {GLASSFISH-DIR}\bin\asadmin stop-domain lportal

Copiar el archivo liferay-portal-5.2.3.war al directorio autodeploy del dominio lportal de Glassfish.

Esto hará que se despliegue la aplicación al iniciar Glassfish nuevamente. Lo importante es que la ruta de contexto del archivo de despliegue quede igual a /, para que de esta forma el portal sea nuestra aplicación de inicio al navegar a la ruta : http://localhost:18080.

Iniciar y detener GlassFish


> {GLASSFISH-DIR}\bin\asadmin start-domain lportal
> {GLASSFISH-DIR}\bin\asadmin stop-domain lportal

Al finalizar esta tarea debemos tener el archivo liferay-portal-5.2.3 desplegado en el modulo {GLASSFISH-DIR}\domains\lportal\applications\j2ee-modules\liferay-portal-5.2.3.

Se puede desplegar el archivo por la consola mediante el comando:

{GLASSFISH-DIR}/bin/asadmin deploy \
--host localhost \
--port 14848 \
--user lportal \
--contextroot / \
--precompilejsp=false \
--verify=false \
--name "Liferay-Portal-5.2.3" \
--enabled=true \
${LIFERAY}/liferay-portal-5.2.3.war

Configurar Liferay para trabajar con Postgresql

Detener Glassfish si se encuentra ejecutándose

> {GLASSFISH-DIR}\bin\asadmin stop-domain lportal

Ir a la ruta de clases del archivo desplegado, en el path:

{GLASSFISH-DIR}\domains\lportal\applications\j2ee-modules\liferay-portal-5.2.3\WEB-INF\classes

Dentro de este directorio creamos el archivo:

portal-ext.properties

Con el siguiente contenido (portal-ext.properties):

jdbc.default.jndi.name=jdbc/LiferayPool
#jdbc.default.driverClassName=org.postgresql.Driver
#jdbc.default.url=jdbc:postgresql:localhost:5432/lportal
#jdbc.default.username=postgres
#jdbc.default.password=postgres

Nota: Los valores precedidos por el símbolo # constituyen comentarios. No son necesarios en esta configuración, pero se presentan como muestra de los valores que es posible configurar en este archivo.

Ya nuestro servidor se encuentra listo para usar Liferay.


Iniciar GlassFish



Ir a la página de inicio del portal:
http://localhost:18080

Nos debe re direccionar a la URL:

http://localhost:18080/web/guest

Y presentar la pantalla de inicio de sesión del portal.
Donde ingresamos los valores por omisión para administrador de
Liferay:

Email Address test@liferay.com
Password test
glassfish-liferay_es090.png

Y listo. Tenemos Liferay corriendo en Glassfish con la base de datos en postgresql.

Desplegar una aplicación OX

Para desplegar nuestros portlets de OX en Liferay sobre Glassfish los pasos son los siguientes:

Configurar persistence.xml

Primero debemos configurar nuestro archivo persistence.xml para indicarle que trabaje con hibernate como provider. Esto es necesario puesto que Glassfish usa Toplink como implementación de persistencia JPA por omisión.

Este archivo se encuentra en la carpeta persistence de nuestro proyecto OX en el directorio META-INF.
Aca se muestra como debe lucir el archivo persistence.xml:

<?xml version=//"1.0"// encoding=//"UTF-8"//?>
 
<persistence xmlns=//"http://java.sun.com/xml/ns/persistence"//
  xmlns:xsi=//"http://www.w3.org/2001/XMLSchema-instance"//
  xsi:schemaLocation=//"http://java.sun.com/xml/ns/persistence       http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"//
  version=//"1.0"//>
 
  <!-- GlassFish + Postgresql -->
  <persistence-unit name="default">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>jdbc/miOXApplicationDS</non-jta-data-source>
    <class>org.openxava.session.GalleryImage</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
    </properties>
  </persistence-unit>
 
  <!-- JUnit -->
  <persistence-unit name="junit">
    <properties>
      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
      <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/controlestudiodb"/>
      <property name="hibernate.connection.username" value="postgres"/>
      <property name="hibernate.connection.password" value="postgres"/>
    </properties>
  </persistence-unit>
 
</persistence>

Donde los aspectos relevantes son:

Unidad de persistencia:
<persistence-unit name="default">

Indicando el nombre de la unidad de persistencia por omisión. En este caso default.

Provider:
<provider>org.hibernate.ejb.HibernatePersistence</provider>

Indicando que se usa hibernate como provider.

JNDI:
<non-jta-data-source>jdbc/miOXApplicationDS</non-jta-data-source>

Indicando que el recurso JNDI del servidor Glassfish para obtener acceso a nuestra base de datos tiene el nombre: jdbc/miOXApplicationDS.
Siendo miOXApplicationDS el nombre de nuestra aplicacion OX seguido del sufijo DS.

Dialecto de Hibernate:
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>

Indicando el dialecto que debe usar hibernate. Es necesario en caso de que se use el estereotipo de galería de imágenes.

Generar Portlets


Para generar los porlets se siguen los pasos acostumbrados.
Se corre el archivo build.xml de nuestra aplicación OX como una tarea ant..., Seleccionamos la opción generarPorlets y pulsamos run. Para mas detalles sobre las tareas disponibles y como realizarlas ver la documentación de OX al respecto.
Una vez culminada esta tarea debemos tener en el directorio workspace.dist de nuestra distribución de OX un archivo .war con el nombre de nuestra aplicación.

miOXApplication.war

Este es el archivo que a la larga desplegaremos en nuestro servidor Glassfish.

Recursos JNDI y Conexión de aplicación:

Iniciar GlassFish:


Iniciar sesión de Administrador


Ir a la pagina:
http://localhost:14848

Indicar nuestras credenciales de administrador para el dominio en cuestión, con nombre de usuario: lportal y contraseña: lportallportal.

Recursos JDBC y Pool de Conexiones


Ahora procedemos a crear los recursos y pool de conexiones de Nuestra aplicación OX.

Pool de Conexión


En la sección de Tareas Comunes seleccionamos: Crear nuevo conjunto de conexión JDBC.
En la ventana de configuración que se abre colocar los valores siguientes:

Nombre : MyOXPool (Nombre del conjunto de conexión)
Tipo de Recurso: javax.sql.ConnectionPoolDataSource (Tipo del recurso de conexión, también se puede usar : javax.sql.DataSource)
Proveedor de la base de datos: PostgreSQL (Nuestro proveedor de servicios de base de datos)

Pulsamos el botón siguiente.
En la ventana de dialogo, en la sección de Propiedades adicionales colocamos:
Nombre Valor
DatabaseName miOXDB
Password <Nuestro Password de Postgresql>
PortNumber 5432 ( o nuestro valor de Puerto del Server de Postgresql)
ServerName localhost (o nuestra Ruta de Servidor de Postgresql)
User <Nuestro Usuario de Postgresql>
Hacemos click en finalizar. Podemos probar nuestra conexión seleccionando la que acabamos de crear de la lista de conexiones disponibles y pulsando la opción sondeo. Al hacer esto nos debería indicar que se realizo la conexión satisfactoriamente.


Recursos JNDI JDBC


Seguidamente en la sección de Recursos, seleccionamos Recursos JDBC.
En la tabla de recursos disponibles pulsamos la opción
nuevo, e indicamos lo siguiente:

Nombre JNDI jdbc/miOXApplicationDS (Nombre de jndi que colocamos en el persistence-unit de ox)
Nombre de Conjunto MyOXPool (Seleccionamos el conjunto de conexión creado en el paso anterior)
Descripción Indicamos una descripción (opcional)
Estado Activado.

Pulsamos en Aceptar. Ya tenemos nuestros recursos de conexión configurados.
Cerramos sesión de administrador.


Instalar Portlets OX en Liferay



Ir a la página de inicio del portal:
http://localhost:18080

Ingresamos los valores por omisión para administrador de Liferay en el inicio de sesión:

Email Address test@liferay.com
Password test

En el menú de usuario (usualmente arriba a la derecha) seleccionar Panel de Control.
Esto abre el portlet de configuración de
Liferay. En la sección Servidor seleccionar la opción Instalación de Plugins.
glassfish-liferay_es100.png
En el
tab Plugins de portlets seleccionar el botón : Instalar mas portlets.
glassfish-liferay_es110.png
En la ventana de dialogo seleccionar el
tab Subir archivo.
Pulsar
examinar...

Esto abre la ventana de dialogo para seleccionar el archivo .war que se desea instalar.
glassfish-liferay_es130.png
Buscamos en el directorio workspace.dist de nuestra distribución de OX el archivo:



miOXApplication.war


Pulsamos Abrir.
Y hacemos click en el botón
Instalar.


Seguidamente Liferay nos muestra un mensaje de que se logro subir el archivo con éxito y que está siendo instalado.
Pulsamos la opción
volver a mi comunidad que se presenta cerca de la parte superior derecha de la ventana.


Una vez en nuestra pagina de inicio pulsamos
Añadir Pagina.
Indicamos un nombre adecuado para nuestra página y pulsamos
Guardar.
glassfish-liferay_es140.png
Hacemos click en nuestra nueva página para navegar hacia ella.
Paso seguido seleccionamos en el menú de usuario la opción
Añadir potlet//. Esto nos presenta una lista con todos los portlets disponibles en el portal organizados por aplicación.
glassfish-liferay_es150.png
Buscamos en la lista de portlets presentados el nombre de nuestra aplicación OX. Una vez allí seleccionamos un porlet de la lista que se presenta y lo arrastramos hasta el área de trabajo de la página destino en la ubicación que deseemos para nuestro portlet.
Cerramos la ventana con la lista de portlets. Esperamos mientras Liferay presenta el portlet recién instalado en nuestra página destino.
glassfish-liferay_es160.png
En caso de que no aparezca el portlet en la pagina antes referida es recomendable navegar a otra página del portal, puede ser la de inicio, y volver a la página destino.

Al final de este proceso deberíamos tener nuestro portlet de OX corriendo adecuadamente dentro del Liferay.

Se repiten los pasos de seleccionar el portlet de OX y soltar en la pagina deseada tantas veces como sea necesario para construir nuestra aplicación.