use of org.pentaho.platform.api.scheduler2.SchedulerException in project pentaho-platform by pentaho.
the class QuartzScheduler method setJobTrigger.
private void setJobTrigger(Scheduler scheduler, Job job, Trigger trigger) throws SchedulerException, org.quartz.SchedulerException {
QuartzJobKey jobKey = QuartzJobKey.parse(job.getJobId());
String groupName = jobKey.getUserName();
if (trigger instanceof SimpleTrigger) {
SimpleTrigger simpleTrigger = (SimpleTrigger) trigger;
SimpleJobTrigger simpleJobTrigger = new SimpleJobTrigger();
simpleJobTrigger.setStartTime(simpleTrigger.getStartTime());
simpleJobTrigger.setEndTime(simpleTrigger.getEndTime());
simpleJobTrigger.setUiPassParam((String) job.getJobParams().get(RESERVEDMAPKEY_UIPASSPARAM));
long interval = simpleTrigger.getRepeatInterval();
if (interval > 0) {
interval /= 1000;
}
simpleJobTrigger.setRepeatInterval(interval);
simpleJobTrigger.setRepeatCount(simpleTrigger.getRepeatCount());
job.setJobTrigger(simpleJobTrigger);
} else if (trigger instanceof CronTrigger) {
CronTrigger cronTrigger = (CronTrigger) trigger;
ComplexJobTrigger complexJobTrigger = createComplexTrigger(cronTrigger.getCronExpression());
complexJobTrigger.setUiPassParam((String) job.getJobParams().get(RESERVEDMAPKEY_UIPASSPARAM));
complexJobTrigger.setCronString(((CronTrigger) trigger).getCronExpression());
job.setJobTrigger(complexJobTrigger);
if (trigger.getCalendarName() != null) {
Calendar calendar = scheduler.getCalendar(trigger.getCalendarName());
if (calendar instanceof QuartzSchedulerAvailability) {
QuartzSchedulerAvailability quartzSchedulerAvailability = (QuartzSchedulerAvailability) calendar;
complexJobTrigger.setStartTime(quartzSchedulerAvailability.getStartTime());
complexJobTrigger.setEndTime(quartzSchedulerAvailability.getEndTime());
}
}
complexJobTrigger.setCronString(((CronTrigger) trigger).getCronExpression());
}
int triggerState = scheduler.getTriggerState(job.getJobId(), groupName);
switch(triggerState) {
case Trigger.STATE_NORMAL:
job.setState(JobState.NORMAL);
break;
case Trigger.STATE_BLOCKED:
job.setState(JobState.BLOCKED);
break;
case Trigger.STATE_COMPLETE:
job.setState(JobState.COMPLETE);
break;
case Trigger.STATE_ERROR:
job.setState(JobState.ERROR);
break;
case Trigger.STATE_PAUSED:
job.setState(JobState.PAUSED);
break;
default:
job.setState(JobState.UNKNOWN);
break;
}
job.setJobName(QuartzJobKey.parse(job.getJobId()).getJobName());
job.setNextRun(trigger.getNextFireTime());
job.setLastRun(trigger.getPreviousFireTime());
}
use of org.pentaho.platform.api.scheduler2.SchedulerException in project pentaho-platform by pentaho.
the class QuartzScheduler method updateJob.
@Override
public void updateJob(String jobId, Map<String, Serializable> jobParams, IJobTrigger trigger) throws SchedulerException {
QuartzJobKey jobKey = QuartzJobKey.parse(jobId);
Trigger quartzTrigger = createQuartzTrigger(trigger, jobKey);
quartzTrigger.setJobName(jobId);
quartzTrigger.setJobGroup(jobKey.getUserName());
Calendar triggerCalendar = quartzTrigger instanceof CronTrigger ? createQuartzCalendar((ComplexJobTrigger) trigger) : null;
try {
Scheduler scheduler = getQuartzScheduler();
// int triggerState = scheduler.getTriggerState(jobId, jobKey.getUserName());
// if (triggerState != Trigger.STATE_PAUSED) {
// scheduler.pauseTrigger(jobId, jobKey.getUserName());
// }
JobDetail origJobDetail = scheduler.getJobDetail(jobId, jobKey.getUserName());
if (origJobDetail.getJobDataMap().containsKey(RESERVEDMAPKEY_ACTIONCLASS)) {
jobParams.put(RESERVEDMAPKEY_ACTIONCLASS, origJobDetail.getJobDataMap().get(RESERVEDMAPKEY_ACTIONCLASS).toString());
} else if (origJobDetail.getJobDataMap().containsKey(RESERVEDMAPKEY_ACTIONID)) {
jobParams.put(RESERVEDMAPKEY_ACTIONID, origJobDetail.getJobDataMap().get(RESERVEDMAPKEY_ACTIONID).toString());
}
if (origJobDetail.getJobDataMap().containsKey(RESERVEDMAPKEY_STREAMPROVIDER)) {
jobParams.put(RESERVEDMAPKEY_STREAMPROVIDER, (Serializable) origJobDetail.getJobDataMap().get(RESERVEDMAPKEY_STREAMPROVIDER));
}
if (origJobDetail.getJobDataMap().containsKey(RESERVEDMAPKEY_UIPASSPARAM)) {
jobParams.put(RESERVEDMAPKEY_UIPASSPARAM, (Serializable) origJobDetail.getJobDataMap().get(RESERVEDMAPKEY_UIPASSPARAM));
}
JobDetail jobDetail = createJobDetails(jobKey, jobParams);
scheduler.addJob(jobDetail, true);
if (triggerCalendar != null) {
scheduler.addCalendar(jobId.toString(), triggerCalendar, true, true);
quartzTrigger.setCalendarName(jobId.toString());
}
scheduler.rescheduleJob(jobId, jobKey.getUserName(), quartzTrigger);
// if (triggerState != Trigger.STATE_PAUSED) {
// scheduler.resumeTrigger(jobId, jobKey.getUserName());
// }
logger.debug(MessageFormat.format("Scheduling job {0} with trigger {1} and job parameters [ {2} ]", jobId.toString(), trigger, // $NON-NLS-1$
prettyPrintMap(jobParams)));
} catch (org.quartz.SchedulerException e) {
throw new SchedulerException(Messages.getInstance().getString("QuartzScheduler.ERROR_0001_FAILED_TO_SCHEDULE_JOB", jobKey.getJobName()), // $NON-NLS-1$
e);
}
}
use of org.pentaho.platform.api.scheduler2.SchedulerException in project pentaho-platform by pentaho.
the class QuartzScheduler method triggerNow.
/**
* {@inheritDoc}
*/
public void triggerNow(String jobId) throws SchedulerException {
try {
QuartzJobKey jobKey = QuartzJobKey.parse(jobId);
Scheduler scheduler = getQuartzScheduler();
String groupName = jobKey.getUserName();
for (Trigger trigger : scheduler.getTriggersOfJob(jobId, groupName)) {
if ("MANUAL_TRIGGER".equals(trigger.getGroup())) {
continue;
}
if (trigger instanceof SimpleTrigger) {
((SimpleTrigger) trigger).setPreviousFireTime(new Date());
} else if (trigger instanceof CronTrigger) {
((CronTrigger) trigger).setPreviousFireTime(new Date());
}
// force the trigger to be updated with the previous fire time
scheduler.rescheduleJob(jobId, jobKey.getUserName(), trigger);
}
scheduler.triggerJob(jobId, jobKey.getUserName());
} catch (org.quartz.SchedulerException e) {
throw new SchedulerException(Messages.getInstance().getString("QuartzScheduler.ERROR_0007_FAILED_TO_GET_JOB", jobId), // $NON-NLS-1$
e);
}
}
use of org.pentaho.platform.api.scheduler2.SchedulerException in project pentaho-platform by pentaho.
the class RepositoryCleanerSystemListener method rescheduleIfNecessary.
private void rescheduleIfNecessary(IScheduler scheduler, List<Job> jobs) throws SchedulerException {
JobTrigger trigger = findJobTrigger();
if (trigger == null) {
return;
}
List<Job> matched = new ArrayList<Job>(jobs.size());
for (Job job : jobs) {
JobTrigger tr = job.getJobTrigger();
// unfortunately, JobTrigger does not override equals
if (trigger.getClass() != tr.getClass()) {
logger.info("Removing job with id: " + job.getJobId());
scheduler.removeJob(job.getJobId());
} else {
matched.add(job);
}
}
if (matched.isEmpty()) {
logger.info("Need to re-schedule job");
scheduleJob(scheduler);
}
}
use of org.pentaho.platform.api.scheduler2.SchedulerException in project pentaho-platform by pentaho.
the class RepositoryCleanerSystemListener method unscheduleJob.
private void unscheduleJob(IScheduler scheduler, List<Job> jobs) throws SchedulerException {
for (Job job : jobs) {
logger.info("Removing job with id: " + job.getJobId());
scheduler.removeJob(job.getJobId());
}
}
Aggregations