![JAR search and dependency download from the Maven repository](/logo.png)
com.sangupta.jerry.quartz.service.impl.DefaultQuartzServiceImpl Maven / Gradle / Ivy
/**
*
* jerry - Common Java Functionality
* Copyright (c) 2012, Sandeep Gupta
*
* http://www.sangupta/projects/jerry
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.sangupta.jerry.quartz.service.impl;
import com.sangupta.jerry.quartz.domain.QuartzJobInfo;
import com.sangupta.jerry.quartz.domain.QuartzJobTriggerInfo;
import com.sangupta.jerry.quartz.service.QuartzService;
import com.sangupta.jerry.util.AssertUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.*;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* Default implementation for the {@link QuartzService}.
*
* @author sangupta
*/
public class DefaultQuartzServiceImpl implements QuartzService {
private static final Log logger = LogFactory.getLog(DefaultQuartzServiceImpl.class);
@Autowired
private Scheduler scheduler;
/**
* @return a {@link List} of all {@link QuartzJobInfo} objects available
*
* @see QuartzService#getJobs()
*/
public List getJobs() {
List jobs = new ArrayList();
try {
List jobGroupNames = this.scheduler.getJobGroupNames();
List runningJobs = this.scheduler.getCurrentlyExecutingJobs();
for (String jobGroupName : jobGroupNames) {
final Set jobKeys = this.scheduler.getJobKeys(GroupMatcher.jobGroupEquals(jobGroupName));
for (JobKey jobKey : jobKeys) {
// TODO: Find a better solution to return other details of the jobs.
// Because getJobDetail tries to instantiate the class of the type that is specified in the
// data store. Hence, we only return a list of job names and groups.
// JobDetail jobDetail = scheduler.getJobDetail(jobName, jobGroupName);
QuartzJobInfo jobInfo = new QuartzJobInfo();
jobInfo.setJobName(jobKey.getName());
jobInfo.setJobGroupName(jobGroupName);
@SuppressWarnings("unchecked")
List triggers = (List) this.scheduler.getTriggersOfJob(jobKey);
if (AssertUtils.isNotEmpty(triggers)) {
for (Trigger trigger : triggers) {
QuartzJobTriggerInfo triggerInfo = new QuartzJobTriggerInfo();
String triggerName = trigger.getKey().getName();
String triggerGroup = trigger.getKey().getGroup();
triggerInfo.setTriggerName(triggerName);
triggerInfo.setTriggerGroup(triggerGroup);
triggerInfo.setLastFireTime(trigger.getPreviousFireTime());
triggerInfo.setNextFireTime(trigger.getNextFireTime());
triggerInfo.setStatus(this.scheduler.getTriggerState(trigger.getKey()));
// check if the trigger is already running
for (JobExecutionContext jec : runningJobs) {
if (jec.getTrigger().equals(trigger)) {
triggerInfo.setRunning(true);
triggerInfo.setRunTime(jec.getJobRunTime());
break;
}
}
jobInfo.addTriggerInfo(triggerInfo);
}
}
// jobInfo.setDescription(jobDetail.getDescription());
jobs.add(jobInfo);
}
}
return jobs;
} catch (SchedulerException e) {
logger.error("error getting scheduled job info", e);
}
return null;
}
/**
* Pause the job with given name in given group
*
* @param jobName
* the job name
*
* @param jobGroupName
* the job group name
*
* @return true
if job was paused, false
otherwise
*
* @see QuartzService#pauseQuartzJob(String, String)
*/
public boolean pauseQuartzJob(String jobName, String jobGroupName) {
try {
this.scheduler.pauseJob(new JobKey(jobName, jobGroupName));
return true;
} catch (SchedulerException e) {
logger.error("error pausing job: " + jobName + " in group: " + jobGroupName, e);
}
return false;
}
public boolean resumeQuartzJob(String jobName, String jobGroupName) {
try {
this.scheduler.resumeJob(new JobKey(jobName, jobGroupName));
return true;
} catch (SchedulerException e) {
logger.error("error resuming job: " + jobName + " in group: " + jobGroupName, e);
}
return false;
}
/**
* Pause the Quartz scheduler.
*
* @return true
if paused, false
otherwise
*
* @see QuartzService#pauseQuartzScheduler()
*/
public boolean pauseQuartzScheduler() {
try {
this.scheduler.standby();
return true;
} catch (SchedulerException e) {
logger.error("error pausing quartz scheduler", e);
}
return false;
}
/**
* Check if scheduler is paused, or not.
*
* @return {@link Boolean} true
if paused, false
* otherwise, or null
if we cannot fetch state
*
* @see QuartzService#isSchedulerPaused()
*/
public Boolean isSchedulerPaused() {
try {
return this.scheduler.isInStandbyMode();
} catch (SchedulerException e) {
logger.error("error retrieveing scheduler condition", e);
}
return null;
}
/**
* Fire the given job in given group.
*
* @param jobName
* the name of the job
*
* @param jobGroupName
* the group name of the job
*
* @return true
if job was fired, false
otherwise
*
* @see QuartzService#executeJob(String, String)
*/
public boolean executeJob(String jobName, String jobGroupName) {
try {
this.scheduler.triggerJob(new JobKey(jobName, jobGroupName));
return true;
} catch (SchedulerException e) {
logger.error("error executing job: " + jobName + " in group: " + jobGroupName, e);
}
return false;
}
@Override
public boolean deleteQuartzJob(String jobName, String jobGroupName) {
try {
this.scheduler.deleteJob(new JobKey(jobName, jobGroupName));
return true;
} catch (SchedulerException e) {
logger.error("error deleting job: " + jobName + " in group: " + jobGroupName, e);
}
return false;
}
@Override
public boolean scheduleQuartzJob(JobDetail jobDetail, Trigger trigger) {
try {
this.scheduler.scheduleJob(jobDetail, trigger);
return true;
} catch (SchedulerException e) {
logger.error("error scheduling job: " + jobDetail.getKey().getName(), e);
}
return false;
}
@Override
public JobDetail getJobDetail(String jobName, String jobGroupName) {
try {
return this.scheduler.getJobDetail(new JobKey(jobName, jobGroupName));
} catch (SchedulerException e) {
logger.error("error getting job detail: " + jobName + " in group: " + jobGroupName, e);
}
return null;
}
// Usual getter/setter's follow
/**
* Returns the scheduler.
*
* @return the scheduler.
*/
public Scheduler getScheduler() {
return this.scheduler;
}
/**
* Sets the scheduler to the specified value.
*
* @param scheduler scheduler to set.
*/
@Required
public void setScheduler(Scheduler scheduler) {
this.scheduler = scheduler;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy