Mostrando entradas con la etiqueta Liferay. Mostrar todas las entradas
Mostrando entradas con la etiqueta Liferay. Mostrar todas las entradas

miércoles, 13 de marzo de 2013

Liferay - Desplegar portlets en Weblogic en modo producción

La entrada de hoy, además de tener un título largo, ofrece la solución a un problema con el que, en su día, me estuve peleando durante un largo tiempo. Se trata del despliegue de portlets de Liferay en un servidor Weblogic configurado en modo producción. 

Lo primero que habrá que aclarar es qué es eso del modo producción. Se trata de un estado configurable en nuestro servidor que indica que ya no se está realizando desarrollos de los entregables que se instalan en él. Al contrario del modo desarrollo, este estado mantiene activos una serie de mecanismos de seguridad para impedir un mal uso del servidor que pueda poner en peligro los servicios que se están proporcionando.

Existen numerosas diferencias entre el modo desarrollo y el modo producción de un servidor Weblogic (las cuales podéis encontrar aquí), pero la que nos afecta ahora mismo es que en producción no están activos ni el despliegue automático ni el despliegue en caliente de los entregables.

Es por eso que el despliegue de portlets, que normalmente se realiza con despliegue automático (autodeploy), se complica en aquellos servidores Weblogic en modo producción. Y, en este punto, es cuando tenemos que buscar el modo de poder desplegar portlets en nuestro servidor.

Antes de empezar hay que aclarar que esto ha sido probado para Liferay versión 6.1.1, instalado en un servidor Weblogic versión 10.3.6, por lo que no sé si se puede hacer de igual manera con otras versiones. También voy a dar por hecho que ambas herramientas están instaladas correctamente y en funcionamiento.

Los pasos que hay que seguir son los siguientes:

  • Generar un portlet y empaquetarlo utilizando la herramienta Maven. Esto generará el entregable en formato WAR que tendremos que instalar.
  • Se debe editar el fichero portal-ext.properties del entregable de Liferay que tenemos instalado en Weblogic. Este fichero se habrá generado en la instalacción si se han seguido los pasos correctamente, y en él ya se habrán añadido ciertos parámetros de la configuración, como el JNDI del origen de datos asociado al esquema de la Base de Datos al que atacará nuestro portal. En este fichero habrá que incluir la siguiente línea para que liferay trate de hacer un despliegue automático:
auto.deploy.enabled=true
Se pueden añadir otros elementos como los listeners que van a usarse en el despliegue automático o la ruta del directorio dónde se automatizan los despliegues. Hay gran cantidad de información por internet sobre posibles elementos configurables de Liferay.

  • Se reiniciará el servidor para asegurarnos de que los cambios en la configuración se cargan correctamente.
  • Ahora podremos poner nuestro WAR en el directorio que hayamos especificado para los despliegues automáticos. Por defecto, se trata del directorio deploy que se encuentra en el dominio dónde hemos instalado Liferay. Este paso es muy importante, ya que es el que activa el proceso que transforma el WAR en un directorio descomprimido (o exploited) que puede instalarse en nuestro servidor con el contenido del portlet.
  • El directorio generado aparecerá en la ruta que se haya especificado en el fichero portal-ext.properties. Si no se ha indicado nada, el entregable descomprimido que desplegaremos aparecerá en el directorio autodeploy del servidor Weblogic, ya que, por defecto, todo entregable que se ponga en él, se desplegará automáticamente si nos encontramos en modo desarrollo.
  • Al estar en modo producción, este proceso de despliegue automático no se llevará a cabo, por lo que habrá que acceder a la consola de Weblogic e instalar manualmente el entregable descomprimido generado.
Una vez hecho todo esto, el portlet estará listo para ser incluido en nuestro portal.

Espero que os haya sido útil la explicación y ya sabéis: cualquier duda, comentario o sugerencia constructiva será siempre bienvenido.

martes, 12 de marzo de 2013

Liferay - actionURL, renderURL y resourceURL

Quienes han trabajado con Liferay saben de sobra que, al menos al principio, no es un camino de rosas. Ofrece tantas posibilidades que, en ocasiones, esto hace que uno no sepa cuáles elegir si nadie les guía un poco.

Para quien no sepa qué es Liferay, aquí dejo un enlace que explica, en términos generales, qué nos ofrece esta herramienta. Como la mayoría de la buena documentación, está en inglés, pero, ¿qué mejor explicación y guía que aquellas hechas por los propios creadores?

Probablemente acabe escribiendo una gran cantidad de entradas sobre esta herramienta, pero me parece conveniente comenzar con una aclaración de conceptos sobre tres elementos que podremos utilizar en nuestros ficheros JSP y que nos abrirán un sin fin de posibilidades. Hablamos de actionURL, renderURL y resourceURL.

actionURL

Este tag crea una URL que, al asociarse a un enlace HTML (tag <a>), permite la ejecución de un método definido la clase principal de nuestro portlet (aquella que hereda de la clase MVCPortlet) sin que se recargue la página en el navegador. 

Para hacer uso de esta herramienta, se debe añadir en nuestro código JSP el siguiente tag:

<liferay-portlet:actionURL name="metodoPortlet"></liferay-portlet:actionURL>

Esta URL se enlazará con el tag <a> de la siguiente forma: (esto es igual en los tres casos de los que se habla en esta entrada)

<a href="<%=metodoPortlet.toString()%>" /> Haz click aquí </a>

En la clase principal de nuestro portlet tendrá que encontrarse un método público con el mismo portlet que la URL (en este caso, metodoPortlet), el cual será llamado al hacer uso del enlace.

Es posible crear tantos pares de actionURL y métodos como sean necesarios, permitiendo, por ejemplo, la carga y muestra de datos al hacer click en un botón.

renderURL

Este tag ofrece dos posibilidades en función de si en su interior definimos o no un parámetro llamado "jspPage", cuyo valor debe ser la ruta de un fichero JSP.

Si no lo definimos, esta URL nos permitirá, al hacer click en un enlace, se vuelva a ejecutar el método doView() de nuestro portlet, heredado de la clase MVCPortlet, sin necesidad de recargar la página. Para ello, definiremos la URL de la siguiente manera, pudiendo añadir parámetros que se pasarán en método GET:

<liferay-portlet:renderURL var="testRenderURL">
</liferay-portlet:renderURL>
Si definimos el parámetro "jspPage", el funcionamiento será similar, pero cargará el fichero JSP al igual que el método include(). Se definirá, en este caso, del siguiente modo:

<liferay-portlet:renderURL var="testRenderURL">    <liferay-portlet:param name="jspPage" value="/html/portlet/test/test.jsp"/></liferay-portlet:renderURL> 

resourceURL

El funcionamiento de este tag es bastante similar al anterior, con dos excepcione. La primera es que en lugar de ejecutar el método doView(), ejecuta el método serverResource(), que es el recomendado para, por ejemplo, la carga de documentos PDF para visualizarlos en el navegador, entre muchos otros usos.

La segunda diferencia se debe a que no se recomienda cargar ficheros JSP en el método serverResource(), aunque es posible, por lo que no procesa automáticamente el fichero indicado en el parámetro "jspPage" (o, al menos, yo no he encontrado ningún ejemplo en el que ocurra así).

Este tag se define de la siguiente manera:

<portlet:resourceURL var="someUrl" id="veryImportantResource'" ></portlet:resourceURL>

Espero que tras leer esta entrada, al menos se entienda para qué sirve cada una de estas URLs. El resto ya es cuestión de imaginación. Seguro que con un poco de ingenio podréis sacarle un gran partido a estas tres herramientas con miles de posibilidades.