Tareas Programadas en Liferay


Para llevar a cabo un proyecto a menudo requerimos de procesos en Background. Una solución muy extendida es desarrollar estas tareas con código aislado, usando tecnologías que permiten su ejecución y programarlas mediante herramientas propias del sistema operativo. Pues bien, para proyectos Liferay no es necesario optar por este tipo de soluciones: podemos desarrollar y programar tareas en nuestros propios plugins mediante Liferay Quartz Scheduler.

VentajasIcon

  • Posibilidad de usar servicios de nuestro Back End.
  • Unificación de código (mejora en seguimiento y tener el repositorio en común entre otros).
  • Independencia de tecnologías y agentes externos.
  • Sencillez.

Consideraremos que ya se dispone de un portlet. El framework usado es indiferente (MVC Portlet, JSP Portlet, etc.)

Veamos cómo podemos programar una tarea en Liferay:

  1. 1. Creación de la clase:

    Dentro del portlet creamos una clase que implemente la interfaz ‘com.liferay.portal.kernel.messaging.MessageListener‘.
     
  2. 2. Implementar el método ‘receive()‘:
       package com.sonicon.testSchedule; import com.liferay.portal.kernel.messaging.Message;import com.liferay.portal.kernel.messaging.MessageListener;import com.liferay.portal.kernel.messaging.MessageListenerException;public class MessageListenerTest implements MessageListener {@Overridepublic void receive(Message message) throws MessageListenerException {        //Código a ejecutar aquí}} Nuestro método ‘receive()‘ se ejecutará periódicamente en función de la configuración que definamos en el siguiente punto. 
  3. 3. Registrar la clase en Liferay:


    Añadir el scheduler de la clase en ‘liferay-portlet.xml‘ (tras la etiqueta ‘<icon>‘ del portlet):  <portlet>...<icon>/icon.png</icon><scheduler-entry><scheduler-event-listener-class>com.sonicon.testSchedule.MessageListenerTest</scheduler-event-listener-class><trigger><simple><simple-trigger-value>                 30</simple-trigger-value><time-unit>second</time-unit></simple></trigger></scheduler-entry>...</portlet> Ya tenemos nuestra tarea programada. En este ejemplo sencillo, el scheduler se ha programado mediante un valor simple y se ejecutará cada 30 segundos.  Otra opción para el registro de la clase, es usar la etiqueta ‘<cron>‘ del siguiente modo (que sustituiría a la etiqueta ‘<simple>‘):  <scheduler-entry><scheduler-event-listener-class>com.sonicon.testSchedule.MessageListenerTest</scheduler-event-listener-class><trigger><cron><cron-trigger-value>0 15 10 ? * MON-FRI</cron-trigger-value></cron></trigger></scheduler-entry> 

Un saludo y hasta la próxima.

Más InfoIcon


Leave a Reply

Your email address will not be published. Required fields are marked *