in src/main/java/org/apache/sling/event/impl/jobs/scheduling/JobSchedulerImpl.java [217:261]
private void startScheduledJob(final ScheduledJobInfoImpl info) {
if ( this.active.get() ) {
if ( !info.isSuspended() ) {
this.configuration.getAuditLogger().debug("SCHEDULED OK name={}, topic={}, properties={} : {}",
new Object[] {info.getName(),
info.getJobTopic(),
info.getJobProperties()},
info.getSchedules());
int index = 0;
for(final ScheduleInfo si : info.getSchedules()) {
final String name = info.getSchedulerJobId() + "-" + String.valueOf(index);
ScheduleOptions options = null;
switch ( si.getType() ) {
case DAILY:
case WEEKLY:
case HOURLY:
case MONTHLY:
case YEARLY:
case CRON:
options = this.scheduler.EXPR(((ScheduleInfoImpl)si).getCronExpression());
break;
case DATE:
options = this.scheduler.AT(((ScheduleInfoImpl)si).getNextScheduledExecution());
break;
}
// Create configuration for scheduled job
final Map<String, Serializable> config = new HashMap<>();
config.put(PROPERTY_READ_JOB, info);
config.put(PROPERTY_SCHEDULE_INDEX, index);
this.scheduler.schedule(this, options.name(name)
.config(config)
.canRunConcurrently(false)
.threadPoolName(ScheduleInfoImpl.EVENTING_THREADPOOL_NAME));
index++;
}
} else {
this.configuration.getAuditLogger().debug("SCHEDULED SUSPENDED name={}, topic={}, properties={} : {}",
new Object[] {info.getName(),
info.getJobTopic(),
info.getJobProperties(),
info.getSchedules()});
}
}
}