package com.nvarghese.beowulf.sfc;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SfcQuartzSchedulerManager implements ServletContextListener {
/* scheduler */
private static Scheduler scheduler;
/* logger */
static Logger logger = LoggerFactory.getLogger(SfcQuartzSchedulerManager.class);
@Override
public void contextDestroyed(ServletContextEvent event) {
try {
if (scheduler != null)
scheduler.shutdown();
else {
logger.warn("Scheduler was null when tried to shutdown");
}
} catch (SchedulerException e) {
logger.error("Failed to shutdown quartz scheduler", e);
}
}
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext ctx = event.getServletContext();
String sfcQuartzProperties = ctx.getInitParameter("sfc-quartz-filename");
try {
// kick start scheduler
SchedulerFactory schedFact = new StdSchedulerFactory(sfcQuartzProperties);
scheduler = schedFact.getScheduler();
scheduler.start();
} catch (SchedulerException e) {
logger.error("Failed to start quartz scheduler", e);
}
}
/**
* Schedules job with trigger to quartz scheduler
*
* @param job
* @param trigger
* @throws SchedulerException
*/
public static void scheduleJob(JobDetail job, Trigger trigger) throws SchedulerException {
if (scheduler != null)
scheduler.scheduleJob(job, trigger);
else {
logger.warn("Scheduler was not initialized properly. Failed to schedule the submitted job");
}
}
public static boolean unScheduleJob(JobKey jobKey) throws SchedulerException {
boolean deleted = false;
if (scheduler != null)
deleted = scheduler.deleteJob(jobKey);
else {
logger.warn("Scheduler was not initialized properly. Failed to unschedule the submitted job");
}
return deleted;
}
}