RSS

How to create scheduler in portlet with Quartz

Version Liferay-5.2.3
Using Liferay SDK, create a scheduler job in a portlet with Quartz

First create a class that contains actual task that needs to be executed:

package com.portlet.struts;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class SabiasQueJob implements org.quartz.Job{
   private static Log log = LogFactory.getLog(SabiasQueJob.class);
   
   public SabiasQueJob() {}

   public void execute(org.quartz.JobExecutionContext arg0) throws org.quartz.JobExecutionException {
    try {
   System.out.println("THIS IS THE ACTUAL TASK!");
   
  } catch (Exception e) {
   log.error("Portlet, Caught:" + e);
  }
    }

}


Second write a class that implements Scheduler interface.

package com.portlet.struts;

import com.liferay.portal.kernel.job.Scheduler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

public class SabiasQueSchedulerInterface implements Scheduler {
 private static Log _log = LogFactory
   .getLog(SabiasQueSchedulerInterface.class);

 public void NewSchedule() throws Exception {
  SchedulerFactory sf = new StdSchedulerFactory();
  org.quartz.Scheduler sched = sf.getScheduler();

  JobDetail jd2 = new JobDetail("myjob",
    org.quartz.Scheduler.DEFAULT_GROUP, SabiasQueJob.class);
  CronTrigger trigger = new CronTrigger("mytrigger",
    org.quartz.Scheduler.DEFAULT_GROUP, "myjob",
    org.quartz.Scheduler.DEFAULT_GROUP, "0 0 0 * * ?");

  sched.scheduleJob(jd2, trigger);

  sched.start();

 }

 public void schedule() {
  if (_log.isInfoEnabled()) {
   _log.info("Schedule");
  }

  try {
   NewSchedule();
  } catch (Exception ex) {
   _log.error(ex);
  }
 }

 public void unschedule() {
  if (_log.isInfoEnabled()) {
   _log.info("Unschedule");
  }
 }

}

This job is executed every day at 00h00m.For more detail and examples of Quartz see: Quartz

Last just register your scheduler in liferay-portlet.xml

<liferay-portlet-app>
    <portlet>
        <portlet-name>eventosSearch-portlet</portlet-name>
        <scheduler-class>com.portlet.struts.SabiasQueSchedulerInterface</scheduler-class>
    </portlet>
    <role-mapper>
        <role-name>administrator</role-name>
        <role-link>Administrator</role-link>
    </role-mapper>
</liferay-portlet-app>