Developer
Jahia 8.2
Is it possible to reschedule a BackgroundJob?
Question
Is it possible to have a BackgroundJob and, if some prerequisites are not met, reschedule the job for a later time when the conditions are probably met?
Answer
It is not possible but you can declare a new BackgroundJob programmatically and to define a SimpleTrigger with a specific time.
For example
private void rescheduleJob(){
final JobDetail jobDetail = BackgroundJob.createJahiaJob("Job Title", Job.class);
final JobDataMap jobMap = new JobDataMap();
jobDetail.setJobDataMap(jobMap);
final SimpleTrigger trigger = getSimpleTrigger(jobDetail);
schedulerService.getScheduler().scheduleJob(jobDetail, trigger);
}
private SimpleTrigger getSimpleTrigger(JobDetail jobDetail) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR, 2);
SimpleTrigger trigger = new SimpleTrigger(jobDetail.getName() + "Trigger", jobDetail.getGroup(), calendar.getTime());
trigger.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
trigger.setPriority(3);
return trigger;
}
Here is some interesting source code: