CMS

Cómo crear un Hook en Liferay

Durante el proceso de desarrollo con Liferay resulta de gran utilidad utilizar un hook. Aquí te explicamos qué es un hook y realizamos dos casos prácticos de cómo crearlos y utilizarlos detallados paso a paso.
CMS

Publicado el 04 de Julio de 2019
Compartir

Qué es un hook

Cuando hablamos de hook, no es más que una inyección de código en un servicio ya existente en el core de la plataforma.

Actualmente, en la versión 7.2 de Liferay técnicamente ya no existe el concepto de hook, pero como seguimos pudiendo hacer cambios en comportamientos de la plataforma, se siguen conociendo como hooks.

Desde la versión 7.0 Liferay empieza a utilizar lo que se conoce como OSGI Service Registry, y aprovecha una gran ventaja como es poder modificar en tiempo real de ejecución de diversas implementaciones como:

  • ServiceWrapper
  • Filter
  • Struts Actions
  • PortalActions
  • Modal Listeners
  • Indexers

Override de un servicio

En esta práctica vamos a crear un override de un servicio siguiendo estos pasos:

  • Crearemos un hook para el Servicio de Usuario (UserLocalService).
  • Dentro del IDE, crearemos un módulo del tipo service-wrapper.
  • Implementaremos el servicio “addUserWithWorkflow”.

Para ello usaremos Eclipse, dentro del entorno de desarrollo que preparamos en el anterior video, que si no habéis visto podéis ver antes para preparar este entorno.

  • Generamos un nuevo “Liferay Module Project”, pulsando el botón derecho del ratón en la ventana “Project Explorer”, y rellenamos los valores del mismo de esta forma:
Liferay Module Project
 
  • Avanzamos a la siguiente ventana y en el apartado “Service Name” elegimos “com.liferay.portal.kernel.service.UserLocalServiceWrapper” y finalizamos el proceso, tras lo cual se habrá creado nuestro proyecto en la ventana correspondiente.
  • Dentro del proyecto abrimos el archivo UserverServiceHook.java y modificamos la cadena UserLocalServiceWrapper, clicando con el botón derecho sobre ella y eligiendo la opción Source y después Override/Implement Methods:
UserverServiceHook.java
 
  • Seleccionamos el nuevo método “addUserWithWorkflow” y aceptamos, de forma que el archivo queda finalmente así:
addUserWithWorkflow
 
  • Ahora vamos a hacer que a la variable lastName que recibimos se le añada “XXXX” y cambiarla en la entrada del retorno, para que antes de ser persistida en la base de datos, cambiemos el dato de entrada. Modificamos el archivo para que finalmente quede así:
Modificación lastName
 
  • De esta forma tenemos el firstName para presentar en la consola y el lastName, tras lo que hacemos un concat con el lastName y “XXXX” y después hacemos un System.Out de lo que vamos a añadir.
  • Además conseguimos que la nueva variable lastNameModificado, que hemos creado concatenando la “XXXX” con el usuario cuando se ha creado, sustituya a lastName.
  • Guardamos los cambios y a continuación hacemos el build y el deploy, tras lo cual, en la consola podemos ver la ruta en la que se ha hecho el mismo.
  • Accedemos a esa ruta, copiamos nuestro módulo, el archivo userver.service.hook, volvemos a la carpeta deploy, lo copiamos y desplegamos.
  • En la consola irá apareciendo el proceso de despliegue, y cuando finalice abrimos el panel de control de Liferay y accedemos a Users y después en Users and Organizations.
  • Pulsamos en el icono para crear un nuevo usuario, le asignamos un nombre y una dirección de email y rellenamos la información personal necesaria y guardamos los cambios.
  • Si entramos en la ficha del usuario podemos ver que Last Name se le ha añadido al final el “XXXX”.

Sobrescribir una JSP

En este segundo ejemplo vamos a hacer un override para sobrescribir una JSP. Para ello haremos estos pasos:

  • Crearemos un hook, ahora más conocido como fragmento de página para el login (login.jsp).
  • Dentro del IDE, crearemos un módulo “Project Fragment”.
  • Sobrescribiremos la jsp de login.jsp.

Vamos a utilizar también Eclipse, y comenzamos el proceso:

  • Creamos un nuevo “Liferay Module Project Fragment”, pulsando el botón derecho del ratón en la ventana “Project Explorer”, y cumplimentamos los valores del mismo de esta forma:
Liferay Module Project Fragment
 
  • Avanzamos a la siguiente pantalla y en “Host OSGi Bundle” elegimos la opción “com.liferay.login.web-4.0.8.jar”, que es el módulo en el que está la JSP que queremos sobrescribir.
  • En el apartado “Overridden files” seleccionamos los recursos que queremos sustituir, en este caso elegimos “META-INF/resources/login.jsp”.
META-INF/resources/login.jsp
 
  • Finalizamos el proceso y ya tenemos creado el proyecto con toda su estructura para sobrescribirlo.
  • Accedemos al archivo login.jsp dentro del proyecto, y vamos a modificar el formulario de login, que por defecto aparece así:
Modificación formulario de login
 
  • Lo modificamos añadiendo un párrafo nuevo debajo del login-container, por ejemplo:
Modificacion formulario login 2
 
  • Desde la ventana Gradle Task hacemos el build y el deploy. Al finalizar, en la consola nos aparece la ruta en la que se ha hecho el mismo.
  • Accedemos a esa ruta, copiamos nuestro módulo, el archivo login.web.frament, lo pegamos en la carpeta deploy del Portal.
  • En la consola irá apareciendo el proceso de despliegue del mismo, y cuando finalice volvemos a Liferay, y actualizamos, ya que cuando modificamos JSP, a veces no coge el recurso y es necesario reiniciar el servidor.
  • Pulsamos en “Sign in” para acceder como usuarios y vemos como aparecen los cambios que habíamos realizado en la pantalla de login:
Sign In

Compartir este post

También te puede interesar...

Curso de Liferay

Curso de Liferay

5 horas y 5 minutos · Empresas

Aprende desde cero las principales características de Liferay y empieza a gestionar la plataforma que lleva más de 8 años entre los líderes de proyectos …

  • Desarrollo Web
Tecnología

Cómo instalar Liferay en un entorno local de desarrollo

03 Julio 2019 Roselaine de Faria Marques Montero
Artículos
Ver todos