use of org.motechproject.scheduler.exception.MotechSchedulerException in project motech by motech.
the class TestMotechSchedulerException method newTest.
@Test
public void newTest() throws Exception {
String msg = "message";
MotechSchedulerException ex = new MotechSchedulerException(msg);
assertEquals(msg, ex.getMessage());
ex = new MotechSchedulerException(msg, new Throwable());
assertEquals(msg, ex.getMessage());
Throwable t = new Throwable(msg);
msg = t.toString();
ex = new MotechSchedulerException(t);
assertEquals(msg, ex.getMessage());
}
use of org.motechproject.scheduler.exception.MotechSchedulerException in project motech by motech.
the class MotechSchedulerServiceImpl method pauseJob.
@Override
public JobBasicInfo pauseJob(JobBasicInfo info) {
try {
JobKey key = new JobKey(info.getName(), info.getGroup());
validateJob(key);
scheduler.pauseJob(key);
info.setStatus(JobBasicInfo.STATUS_PAUSED);
return info;
} catch (MotechSchedulerException | SchedulerException e) {
throw new MotechSchedulerException(String.format("Can not pause the job:\n %s\n%s\n%s", info.getName(), info.getGroup(), e.getMessage()), e);
}
}
use of org.motechproject.scheduler.exception.MotechSchedulerException in project motech by motech.
the class MotechSchedulerServiceImpl method safeScheduleRunOnceJob.
@Override
public void safeScheduleRunOnceJob(RunOnceSchedulableJob schedulableJob) {
logObjectIfNotNull(schedulableJob);
assertArgumentNotNull("RunOnceSchedulableJob", schedulableJob);
JobId jobId = new RunOnceJobId(schedulableJob.getMotechEvent());
try {
unscheduleJob(jobId);
} catch (MotechSchedulerException e) {
LOGGER.error("Unable to unschedule run once job with ID {}", jobId.value(), e);
}
scheduleRunOnceJob(schedulableJob);
}
use of org.motechproject.scheduler.exception.MotechSchedulerException in project motech by motech.
the class MotechSchedulerServiceImpl method scheduleRepeatingJob.
private void scheduleRepeatingJob(RepeatingSchedulableJob job, boolean update) {
logObjectIfNotNull(job);
validateRepeatingSchedulableJob(job);
MotechEvent motechEvent = job.getMotechEvent();
DateTime jobStartTime = job.getStartDate();
DateTime jobEndTime = job.getEndDate();
Integer repeatIntervalInSeconds = job.getRepeatIntervalInSeconds();
Integer jobRepeatCount = job.getRepeatCount();
if (null == jobRepeatCount) {
jobRepeatCount = MAX_REPEAT_COUNT;
}
JobId jobId = new RepeatingJobId(motechEvent);
JobDetail jobDetail = newJob(MotechScheduledJob.class).withIdentity(jobKey(jobId.value(), JOB_GROUP_NAME)).build();
putMotechEventDataToJobDataMap(jobDetail.getJobDataMap(), motechEvent);
jobDetail.getJobDataMap().put(EVENT_METADATA, createMetadataForMisfireSchedulableJob(job, motechEvent));
try {
if (scheduler.getTrigger(triggerKey(jobId.value(), JOB_GROUP_NAME)) != null) {
unscheduleJob(jobId);
}
} catch (SchedulerException e) {
throw new MotechSchedulerException(format("Schedule or reschedule the job: %s.\n%s", jobId, e.getMessage()), "scheduler.error.cantRescheduleJob", Arrays.asList(jobId.value(), e.getMessage()), e);
}
ScheduleBuilder scheduleBuilder;
if (!job.isUseOriginalFireTimeAfterMisfire()) {
SimpleScheduleBuilder simpleSchedule = simpleSchedule().withIntervalInSeconds(repeatIntervalInSeconds).withRepeatCount(jobRepeatCount);
simpleSchedule = setMisfirePolicyForSimpleTrigger(simpleSchedule, schedulerSettings.getProperty("scheduler.repeating.trigger.misfire.policy"));
scheduleBuilder = simpleSchedule;
} else {
if (job.getRepeatCount() != null) {
final double half = 0.5;
jobEndTime = new DateTime((long) (job.getStartDate().getMillis() + repeatIntervalInSeconds * MILLISECOND * (job.getRepeatCount() + half)));
}
scheduleBuilder = CalendarIntervalScheduleBuilder.calendarIntervalSchedule().withIntervalInSeconds(repeatIntervalInSeconds).withMisfireHandlingInstructionFireAndProceed();
}
Trigger trigger = buildJobDetail(job, DateUtil.toDate(jobStartTime), DateUtil.toDate(jobEndTime), jobId, jobDetail, scheduleBuilder);
scheduleJob(jobDetail, trigger, update);
}
use of org.motechproject.scheduler.exception.MotechSchedulerException in project motech by motech.
the class MotechSchedulerServiceImpl method scheduleCronJob.
private void scheduleCronJob(CronSchedulableJob job, boolean isDayOfWeek, boolean update) {
logObjectIfNotNull(job);
validateCronSchedulableJob(job);
MotechEvent motechEvent = job.getMotechEvent();
JobId jobId = new CronJobId(motechEvent);
JobDetail jobDetail = newJob(MotechScheduledJob.class).withIdentity(jobKey(jobId.value(), JOB_GROUP_NAME)).build();
putMotechEventDataToJobDataMap(jobDetail.getJobDataMap(), motechEvent);
Map<String, Object> metadata = new HashMap<>();
metadata.put(IS_DAY_OF_WEEK, isDayOfWeek);
metadata.put(UI_DEFINED, job.isUiDefined());
metadata.put(IGNORE_PAST_FIRES_AT_START, job.isIgnorePastFiresAtStart());
metadata.putAll(motechEvent.getMetadata());
jobDetail.getJobDataMap().put(EVENT_METADATA, metadata);
CronScheduleBuilder cronSchedule = cronSchedule(job.getCronExpression());
// TODO: should take readable names rather than integers
cronSchedule = setMisfirePolicyForCronTrigger(cronSchedule, schedulerSettings.getProperty("scheduler.cron.trigger.misfire.policy"));
CronTrigger trigger = newTrigger().withIdentity(triggerKey(jobId.value(), JOB_GROUP_NAME)).forJob(jobDetail).withSchedule(cronSchedule).startAt(job.getStartDate() != null ? job.getStartDate().toDate() : now().toDate()).endAt(DateUtil.toDate(job.getEndDate())).build();
Trigger existingTrigger;
try {
existingTrigger = scheduler.getTrigger(triggerKey(jobId.value(), JOB_GROUP_NAME));
} catch (SchedulerException e) {
throw new MotechSchedulerException(format("Schedule or reschedule the job: %s.\n%s", jobId, e.getMessage()), "scheduler.error.cantRescheduleJob", Arrays.asList(jobId.value(), e.getMessage()), e);
}
if (existingTrigger != null) {
unscheduleJob(jobId.value());
}
DateTime now = now();
if (job.isIgnorePastFiresAtStart() && (job.getStartDate() == null || job.getStartDate().isBefore(now))) {
Date newStartTime = trigger.getFireTimeAfter(now.toDate());
if (newStartTime == null) {
newStartTime = now.toDate();
}
trigger = newTrigger().withIdentity(triggerKey(jobId.value(), JOB_GROUP_NAME)).forJob(jobDetail).withSchedule(cronSchedule).startAt(newStartTime).endAt(DateUtil.toDate(job.getEndDate())).build();
}
scheduleJob(jobDetail, trigger, update);
}
Aggregations