Mavenizar Liferay SDK

0
7978

Mavenizar Liferay SDK.

0. Índice de
contenidos.

1. Introducción

El desarrollo
con el plugin SDK de Liferay está muy bien
pero le falta algo fundamental: no tiene soporte de Maven. El soporte
de Maven nos permite hacer de forma sencilla el sitio web del proyecto
con informes muy útiles como: javadoc, cobertura, PMD y
muchos otros informes. Además nos permite integrar de una forma muy cómoda nuestro proyecto con una aplicación de integración continua como Hudson y hacer un seguimiento de la calidad del código con Sonar.

En esta misma web tienes varios tutoriales
que hablan de esta estupenda tecnología. En vez de renunciar
a estas ventajas lo que podemos hacer es adaptar la creación
de un proyecto con el SDK a un proyecto de Maven utilizando Eclipse.

2. Entorno

El tutorial está
escrito usando el siguiente entorno:

  • Hardware:
    Portátil Asus G50Vseries (Core Duo P8600 2.4GHz, 4GB RAM,
    320 GB HD).
  • Sistema operativo: Ubuntu
    9.04 Desktop
  • Mozilla Firefox 2.0.0.20
  • Maven 2.2.20
  • Liferay 5.2.3 (Portal + Plugins SDK)

3. ¿Cómo
hacer la adaptación?

El primer paso
es crear un plugin de tipo portlet de la forma que se ha visto en este tutorial: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=LiferayPluginsSDK y y que vamos a usar de referencia
para crear el proyecto de Maven, a partir de ahora nos referiremos como
REF_PORTLET. Para ello abrimos un terminal, nos situamos en la ruta
SDK_LIFERAY/portlets y escribimos lo siguiente:

./create.sh ref “RefPortlet”

Luego tenemos que crear un proyecto Maven de tipo web, al que nos
referiremos como MAVEN_PORTLET. Para ello abrimos un terminal, nos
situamos en el directorio donde vayamos a crear el proyecto y ponemos
lo siguiente:

mvn archetype:create -DgroupId=com.autentia.training
-DartifactId=maven-portlet -DarchetypeArtifactId=maven-archetype-webapp

Para poder convertir este proyecto en un proyecto de portlet Liferay
tenemos que copiar algunos archivos del proyecto de referencia a este
proyecto Maven.

En primer lugar copiamos todo el contenido del directorio
REF_PORTLET/docroot dentro de la carpeta
MAVEN_PORTLET/src/main/webapp, sobreescribiendo todo el contenido y
borramos el directorio MAVEN_PORTLET/src/main/webapp/WEB-INF/src.

El siguiente paso es importar el proyecto en Eclipse. Para ello dentro
de Eclipse vamos a File → Import → Maven 2 Project.

En la siguiente pantalla pulsamos sobre el botón
“Browser”, seleccionando el directorio
MAVEN_PORTLET, marcamos el fichero pom.xml que detectará
el asistente y pulsamos en “Finish”.

Ahora tenemos que relacionar el proyecto con el servidor que contiene
Liferay. Para ello pulsamos con el botón derecho sobre la
raíz del proyecto y seleccionamos la opción
“Properties” → “Targeted
Runtimes”, seleccionamos el servidor de Liferay y
pulsamos sobre “OK”. De este modo ya tienen que
solucionar los problemas de compilación del proyecto y
podremos hacer uso de las librerías que proporciona Liferay
en tiempo de compilación ya que en ejecución
estas librerías ya existen.

De esta forma ya estamos en disposición de crear nuestro
primer portlet. Para ello creamos una clase dentro de la carpeta
src/main/java que extienda de la clase GenericPortlet como en el
siguiente código:

package com.autentia.training;

import java.io.IOException;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;

public class MavenPortlet extends GenericPortlet {
 
 public void init() throws PortletException {
  editJSP = getInitParameter("edit-jsp");
  helpJSP = getInitParameter("help-jsp");
  viewJSP = getInitParameter("view-jsp");
 }

 public void doDispatch(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {

  String jspPage = renderRequest.getParameter("jspPage");

  if(jspPage != null) {
  	include(jspPage, renderRequest,renderResponse);
	}else{
		super.doDispatch(renderRequest,renderResponse);
	}
 }

 public void doEdit(RenderRequest renderRequest,RenderResponse renderResponse) throws IOException, PortletException {

  if(renderRequest.getPreferences() == null) {
 	 super.doEdit(renderRequest,renderResponse);
	}else{
	 include(editJSP, renderRequest,renderResponse);
	}
 }

 public void doHelp(RenderRequest renderRequest,RenderResponse renderResponse) throws IOException, PortletException {
	include(helpJSP, renderRequest, renderResponse);
 }

 public void doView(RenderRequest renderRequest,RenderResponse renderResponse) throws IOException, PortletException { 
	include(viewJSP, renderRequest, renderResponse);
 }

 public void processAction(ActionRequest actionRequest,ActionResponse actionResponse) throws IOException, PortletException {
 }

 protected void include(String path, RenderRequest renderRequest,RenderResponse renderResponse) throws IOException, PortletException {
	PortletRequestDispatcher portletRequestDispatcher = getPortletContext().getRequestDispatcher(path);

  if (portletRequestDispatcher == null) {
  	_log.error(path + " is not a valid include");
	}else{
		portletRequestDispatcher.include(renderRequest,renderResponse);
	}
 }

 protected String editJSP;
 protected String helpJSP;
 protected String viewJSP;

 private static Log _log = LogFactoryUtil.getLog(MavenPortlet.class);
}

Ahora tenemos que editar el fichero de configuración
portlet.xml que se encuentra en la carpeta WEB-INF del proyecto. En
este fichero vamos a modificar el nombre del portlet, el nombre de
visualización y sobre todo la clase. Opcionalmente
también podemos modificar la información y los
roles. El fichero debería presentar este aspecto:



	
		maven
		Maven Portlet
 		com.autentia.training.MavenPortlet
 		
 			view-jsp
			/view.jsp
		
 		0
 		
 			text/html
 		
 		
  			Maven Portlet
			Maven Portlet
 			Maven Portlet
 		
		
 			administrator
 		
 		
 			guest
 		
		
 			power-user
 		
 		
 			user
 		
 	


Una vez que hemos establecido el portlet-name, pasamos a editar el
fichero liferay-display.xml donde tenemos que establecer el nombre de
la categoría y el id del portlet, que se corresponde con el
portlet-name. El fichero debe presentar el siguiente aspecto:





 	
 		
 	


Es la hora de probar el portlet y desplegarlo en el servidor, para ello
vamos a configurar en el fichero pom.xml del proyecto una tarea ant que
permita que el .war generado en la fase de package se copie en la
carpeta deploy del servidor Liferay. Para conseguir esto editamos el
fichero pom.xml del proyecto y lo dejamos con el siguiente aspecto:

 
4.0.0
com.autentia.training
maven-portlet
war 
1.0-SNAPSHOT 
maven-portlet Maven Webapp
http://maven.apache.org
 
 	{ruta de la carpeta deploy} 
 	{ruta carpeta webapps del servidor} 
 
 
 	 
		junit 
 		junit 
 		3.8.1 
 		test 
 	 
 	
		com.liferay
		portlet
		1.0
		provided
		
	
	com.liferay
		portal-kernel
		1.0
		provided
	
 
 
	maven-portlet
	 
 		 
 			maven-antrun-plugin
			 
 				 
 					package 
 					 
 						run 
					 
 					 
 						 
							Borrando a ${portlet-deploy}/maven-portlet 
 							 
 							Copiando a ${portlet-hotdeploy} 
 							 
 						 
 					
				 
 			 
 		 
 	 
 



Lamentablemente a día de hoy no tenemos las librerías de Liferay en ningún repositorio oficial por lo que tendremos que instalar a mano, como mínimo para este ejemplo, las dependencias portlet y portal-kernel cuyos .jar se encuentran en en el directorio LIFERAY_TOMCAT_HOME/libs/ext.

Para hacer esto debemos ejecutar lo siguiente en un terminal del sistema para cada una de las librerías:

mvn install:install-file -Dfile=ruta_absoluta_jar -DgroupId=com.liferay -DartifactId=portal-kernel o portlet -Dversion=1.0 -Dpackaging=jar

Con esta configuración estamos consiguiendo que cuando
ejecutemos mvn package del proyecto, esto genere un archivo .war y haga
un deploy limpio en el servidor que le indiquemos en las propiedades.

Para probar el despliegue podemos editar el fichero view.jsp
añadiendo un mensaje del tipo: ¡Este portlet esta
hecho con Maven!.

Una vez realizado el cambio, guardamos y ejecutamos en un terminal dentro del directorio raíz del proyecto:

mvn package

Si el servidor Liferay ya esta arrancado veremos en las trazas de log que se produce el despliegue en caliente, sino después de ejecutar el comando, arrancamos el servidor.

Y este tiene que ser el resultado final del portlet:

4.
Conclusiones.

Cómo veis no tenemos porque renunciar a todas las ventajas que nos ofrece la forma de trabajo con Maven sólo porque tengamos que desarrollar portlets en Liferay. Sólo hay que echarle un poco de inventiva y adaptar una cosa con la otra.

Saludos.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad