Get it on Google Play

Formación Liferay: Ejecutar tareas programadas

20-07-2016
 
Cron

Cron

Liferay nos aporta una API muy útil para ejecutar tareas programadas que se ejecuten periódicamente o cada cierto tiempo. Esto lo podemos hacer en dos pasos:

Configuramos nuestra classe con la tarea

Esta classe deberá extender de la classe MessageListener y tendrá un único método ‘receive’ que capturará el mensaje. La classe tendrá una pinta como la siguiente:

public class AvisosSchedulerListener implements MessageListener {

	@Override
	public void receive(Message arg0) throws MessageListenerException {
		/* Aquí Elimino la tarea para que no se vuelva a ejecutar */
		try {
			SchedulerEngineHelperUtil.delete( “id_group_name”, StorageType.PERSISTED);
		} catch (SchedulerException e) { e.printStackTrace(); }

		/* Aquí realizamos la tarea */
		String param=(String) arg0.get("param");
		}
	
	}

En este ejemplo elimino la tarea para que solo se ejecute una vez, sino se iría ejecutando periódicamente(Un tema interesante). Otro tema interesante es la posibilidad de pasar parámetros a la tarea, también hay un ejemplo en el código.

Configurar la tarea

Para configurar la tarea podemos hacerlo de dos formas. La primera, configurandola en el fichero ‘liferay-portlet.xml’ añadiendo el código siguiente que ejecuta la tarea cada segundo(También se la puede configurar como un cron):

<scheduler-entry>
	<scheduler-event-listener-class>com.lostsys.x.scheduler.AvisosSchedulerListener</scheduler-event-listener-class>

	<trigger>
		<simple>
			<simple-trigger-value>1</simple-trigger-value>
			<time-unit>second</time-unit>
		</simple>
	</trigger>
</scheduler-entry>

La segunda manera, y mas interesante, es hacerlo programaticamente. En este caso lo podemos hacer así:

String jobName=AvisosSchedulerListener.class.getName();
String groupName="id_group_name";
			
Message message = new Message();
message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME,jobName);
message.put(SchedulerEngine.PORTLET_ID, "miportlet_WAR_miportlet");
message.put("groupName", groupName);
message.put("param", “Mi parámetro”);
			
long interval=1000; /* Un segundo */

Trigger trigger = new IntervalTrigger(jobName,groupName, interval);
SchedulerEngineHelperUtil.schedule(
	trigger,
	StorageType.PERSISTED, 
	"mi mensaje", 
	DestinationNames.SCHEDULER_DISPATCH, 
	message, 
	0);

La variable ‘groupName’ contiene el identificador de la tarea, lo necesitaremos para eliminarla, por ejemplo(Fijaros que lo utilizo en la classe de la tarea para borrarla, se puede pasar como parámetro).

En fin, espero que os sea útil.

Interesado en formación Liferay?

 

Leave a Reply

© Albert Coronado Calzada