public static void clusterTest(SchedulerFactory sf,
boolean clearJobs,
boolean scheduleJobs) throws Exception {
Log lg = LogFactory.getLog(ClusterTest.class);
lg.info("------- Initializing -------------------");
Scheduler sched = sf.getScheduler();
if (clearJobs) {
lg.warn(" *** Deleting existing jobs/triggers ***");
String[] groups = sched.getTriggerGroupNames();
for (int i = 0; i < groups.length; i++) {
String[] names = sched.getTriggerNames(groups[i]);
for (int j = 0; j < names.length; j++)
sched.unscheduleJob(names[j], groups[i]);
}
groups = sched.getJobGroupNames();
for (int i = 0; i < groups.length; i++) {
String[] names = sched.getJobNames(groups[i]);
for (int j = 0; j < names.length; j++)
sched.deleteJob(names[j], groups[i]);
}
}
lg.info("------- Initialization Complete -----------");
if (scheduleJobs) {
lg.info("------- Scheduling Jobs -----------");
String schedId = sched.getSchedulerInstanceId();
int count = 1;
JobDetail job = new JobDetail("job_" + count, schedId,
DumbRecoveryJob.class);
// ask scheduler to re-execute this job if it was in progress when
// the scheduler went down...
job.setRequestsRecovery(true);
SimpleTrigger trigger = new SimpleTrigger("trig_" + count, schedId,
20, 5000L);
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000L));
lg.info(job.getFullName() + " will run at: "
+ trigger.getNextFireTime() + " & repeat: "
+ trigger.getRepeatCount() + "/"
+ trigger.getRepeatInterval());
sched.scheduleJob(job, trigger);
count++;
job = new JobDetail("job_" + count, schedId, DumbRecoveryJob.class);
// ask scheduler to re-execute this job if it was in progress when
// the scheduler went down...
job.setRequestsRecovery(true);
trigger = new SimpleTrigger("trig_" + count, schedId, 20, 5000L);
trigger.setStartTime(new Date(System.currentTimeMillis() + 2000L));
lg.info(job.getFullName() + " will run at: "
+ trigger.getNextFireTime() + " & repeat: "
+ trigger.getRepeatCount() + "/"
+ trigger.getRepeatInterval());
sched.scheduleJob(job, trigger);
count++;
job = new JobDetail("job_" + count, schedId,
DumbRecoveryStatefulJob.class);
// ask scheduler to re-execute this job if it was in progress when
// the scheduler went down...
job.setRequestsRecovery(true);
trigger = new SimpleTrigger("trig_" + count, schedId, 20, 3000L);
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000L));
lg.info(job.getFullName() + " will run at: "
+ trigger.getNextFireTime() + " & repeat: "
+ trigger.getRepeatCount() + "/"
+ trigger.getRepeatInterval());
sched.scheduleJob(job, trigger);
count++;
job = new JobDetail("job_" + count, schedId, DumbRecoveryJob.class);
// ask scheduler to re-execute this job if it was in progress when
// the scheduler went down...
job.setRequestsRecovery(true);
trigger = new SimpleTrigger("trig_" + count, schedId, 20, 4000L);
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000L));
lg.info(job.getFullName() + " will run at: "
+ trigger.getNextFireTime() + " & repeat: "
+ trigger.getRepeatCount() + "/"
+ trigger.getRepeatInterval());
sched.scheduleJob(job, trigger);
count++;
job = new JobDetail("job_" + count, schedId, DumbRecoveryJob.class);
// ask scheduler to re-execute this job if it was in progress when
// the scheduler went down...
job.setRequestsRecovery(true);
trigger = new SimpleTrigger("trig_" + count, schedId, 20, 4500L);
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000L));
lg.info(job.getFullName() + " will run at: "
+ trigger.getNextFireTime() + " & repeat: "
+ trigger.getRepeatCount() + "/"
+ trigger.getRepeatInterval());
sched.scheduleJob(job, trigger);
}
lg.info("------- Starting Scheduler ----------------");
// jobs don't start firing until start() has been called...
sched.start();
lg.info("------- Started Scheduler -----------------");
lg.info("------- Waiting... -----------------------");
try {
Thread.sleep(3600L * 1000L);
} catch (Exception e) {
}
lg.info("------- Shutting Down ---------------------");
sched.shutdown();
lg.info("------- Shutdown Complete -----------------");
}
|