La planification des tâches avec Quartz
La gestion des jobs et des triggers
Les misfires
Un misfire correspond à l'échec de l'activation d'un job, donc il agit sur les triggers. Il permet de gérer les retards grâce à un panel de méthodes correspondant à une action particulière. Par exemple :
//On réenclanche directement le trigger qui a échoué
SimpleTrigger.setMisfireInstruction(MISFIRE_INSTRUCTION_FIRE_NOW);
Les actions
On peut facilement gérer les jobs et les triggers avec les méthodes suivantes :
//suppression d'un job
mySched.deleteJob(“Bonjour”, Scheduler.DEFAULT_GROUP);
//suppression d'un trigger
mySched.unscheduledJob(“simpleTrigger”, Scheduler.DEFAULT_GROUP);
//replanification d'un job
mySched.rescheduledJob(“simpleTrigger”, Scheduler.DEFAULT_GROUP, “cronTrigger”);
//pause d'un job
mySched.pauseJobGroup(Scheduler.DEFAULT_GROUP);
//reprise d'un job
mySched.removeJobGroup(Scheduler.DEFAULT_GROUP);
Les listeners
Les listeners, quant à eux servent à notifier les événements importants de planification du programme client. Cela sert, par exemple, à mettre à jour une application en envoyant un mail.
Il existe trois niveaux de listeners :
- JobListener : Notifie le début et la fin de l’exécution des jobs ainsi que les erreurs inhérentes au job
- TriggerListener : Notifie l'ordre d’exécution ou l'échec de l’ordre
- SchedulerListener : Notifie la création, la suppression, ainsi que l'attente de la planification
Voici un exemple de listener :
class UnJobListener implements JobListener {
//récupère le nom du listener
public String getName() {
return "unJobListener";
}
//Quand un job était sur le point de s'exécuter mais un triggerListener
public void jobExecutionVetoed(JobExecutionContext context) {
}
//Lorsque le Job va être déclenché
public void jobToBeExecuted(JobExecutionContext context) {
}
//Le job a terminé son exécution
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
if(jobException==null) {
//il n'y a pas eu d'exception, parfait
} else {
//il y a eu une exception
System.out.println(jobException);
}
}
}
Il faut maintenant ajouter le listener au scheduler ainsi qu'au job.
sched.addJobListener(new UnJobListener());
jobDetail.addJobListener("unJobListener");