Pessoal, meu código tava rolando tudo certinho…
Mas eu resolvi colocar um TriggerListener, para recuperar os agendamentos que não foram disparados, caso o servidor caísse.
Porém, recebo uma nullPointerException ao tentar colocar o Listener…
public void agendarPublicacao(String codigo, String cronExpression)
throws SchedulerException {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
final Scheduler scheduler = schedulerFactory.getScheduler();
JobDetail jobDetail = new JobDetail(codigo, "jobDetailGroup: "+codigo,
AgendamentoJob.class);
CronTrigger cronTrigger = new CronTrigger(codigo, "triggerGroup: "+codigo);
CronExpression cexp;
try {
AgendamentoListener listener = new AgendamentoListener();
cexp = new CronExpression(cronExpression);
cronTrigger.setCronExpression(cexp);
if (verificaTriggerAgendado(scheduler, codigo)) {
scheduler.unscheduleJob(codigo, "triggerGroup: "+codigo);
scheduler.scheduleJob(jobDetail, cronTrigger);
} else {
scheduler.scheduleJob(jobDetail, cronTrigger);
}
//Coloca um listener nos agendamentos
scheduler.addTriggerListener(listener);
scheduler.start();
} catch (ParseException e) {
log.trace("AgendamentoTrigger.agendarPublicacao: Erro ao fazer parse na data");
e.printStackTrace();
} catch (SchedulerException e){
log.trace("AgendamentoTrigger.agendarPublicacao");
e.printStackTrace();
} catch (Exception e) {
log.trace("AgendamentoTrigger.agendarPublicacao");
e.printStackTrace();
}
}
/**
* Verifica se determinado trigger está agendado
* @param scheduler
* @param codigo
* @return
*/
public boolean verificaTriggerAgendado(Scheduler scheduler, String codigo) {
boolean retorno = false;
String triggers[];
try {
triggers = scheduler.getTriggerNames("triggerGroup: "+codigo);
for (int i = 0; i < triggers.length; i++) {
if (triggers[i].equals(codigo)) {
retorno = true;
}
}
} catch (SchedulerException e) {
log.trace("AgendamentoTrigger.verificaTriggerAgendado");
e.printStackTrace();
}
return retorno;
}
}