Apache Struts 2 Documentation > Home > FAQs > How can we schedule Quartz jobs |
About Quartz Quartz is a full-featured, open source job scheduling system that can be integrated with, or used along side virtually any J2EE or J2SE application. Quartz can be used to create simple or complex schedules for executing tens, hundreds, or even tens-of-thousands of jobs; jobs whose tasks are defined as standard Java components or EJBs. |
package com.trantek.sit.action; import com.opensymphony.xwork.ActionProxy; import com.opensymphony.xwork.ActionProxyFactory; import com.opensymphony.xwork.interceptor.component.ComponentInterceptor; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import java.util.HashMap; public class ActionJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { try { HashMap ctx = new HashMap(); ctx.put(ActionContext.PARAMETERS, context.getJobDetail().getJobDataMap()); ctx.put(ComponentInterceptor.COMPONENT_MANAGER, ???); ctx.put(???, ???) ServletDispatcher.createContextMap() ActionProxy proxy = ActionProxyFactory.getFactory(). createActionProxy("", context.getJobDetail().getName(), ctx); proxy.execute(); } catch (Exception e) { throw new JobExecutionException(e); } } }
To schedule Actions to be run by Quartz, create a Job where
According to the Javadocs of org.quartz.ee.servlet.QuartzInitializerServlet, the Quartz scheduler is setup as a servlet. |
The following code schedules an e-mail action:
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail jobDetail = new JobDetail("email.send", scheduler.DEFAULT_GROUP, WebWorkJob.class); Map m = jobDetail.getJobDataMap(); m.put("to", "[email protected]"); m.put("subject", "quartz test"); m.put("body", "This is a quartz test, Hey ho"); m.put("smtpServer", "smtp.bogusdomain.com"); m.put("from", "[email protected]"); SimpleTrigger trigger = new SimpleTrigger("myTrigger", scheduler.DEFAULT_GROUP, new Date(), null, 0, 0L); scheduler.deleteJob("email.send", scheduler.DEFAULT_GROUP); scheduler.scheduleJob(jobDetail, trigger);