Tareas Programadas en Liferay

Fecha de publicación 19/10/15 17:25

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.

 

Ventajas

Icon
  • 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.  
  3. 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 {
        @Override
        public 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.

     

  4. 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 Info

Icon

 

 

 

Comentarios
No hay ningún comentario aún. Sea usted el primero.

Bloggers recientes Bloggers recientes

Oscar Rodríguez
Mensajes: 9
Estrellas: 2
Fecha: 28/09/16
David Berruezo
Mensajes: 14
Estrellas: 1
Fecha: 22/07/16
Javi Martín
Mensajes: 2
Estrellas: 1
Fecha: 20/05/16
Javier Torres
Mensajes: 5
Estrellas: 3
Fecha: 11/04/16
Sergi Mingueza
Mensajes: 4
Estrellas: 1
Fecha: 19/10/15
Matilde Gallardo
Mensajes: 1
Estrellas: 0
Fecha: 26/02/15
Adrià Vilà
Mensajes: 4
Estrellas: 4
Fecha: 31/08/14
Elena Ruiz
Mensajes: 1
Estrellas: 2
Fecha: 13/03/14