Moin zusammen,
folgendes Szenario:
Job A läuft (mit@DisallowConcurrentExecution). Ich habe einen TriggerListener registriert am Scheduler, welcher die vetoJobExecution ausführt.
Die Methode wird aufgerufen, dann läuft der Job (sagen wir er läuft eine Stunde) während dessen wird er aber getriggered, nochmal zu laufen also sollte doch eigentlich bei jedem Versuch die vetoJobExecution Methode aufgerufen werden um prüfen zu können, ob aktuell ein Job vom Typ XY läuft oder nicht. Die Methode wird aber nur einmal aufgerufen und "false" zurück gegeben, weil zum Zeitpunkt eben noch kein Job läuft.
Hat jemand ne Idee warum in die Methode nicht jedesmal reingegangen wird, wenn der Job nochmal gefeuert wird? Sieht aus als würde der Trigger komplett pausiert und es wird nicht wieder versucht den Job zu feuern.
folgendes Szenario:
Job A läuft (mit@DisallowConcurrentExecution). Ich habe einen TriggerListener registriert am Scheduler, welcher die vetoJobExecution ausführt.
Die Methode wird aufgerufen, dann läuft der Job (sagen wir er läuft eine Stunde) während dessen wird er aber getriggered, nochmal zu laufen also sollte doch eigentlich bei jedem Versuch die vetoJobExecution Methode aufgerufen werden um prüfen zu können, ob aktuell ein Job vom Typ XY läuft oder nicht. Die Methode wird aber nur einmal aufgerufen und "false" zurück gegeben, weil zum Zeitpunkt eben noch kein Job läuft.
Hat jemand ne Idee warum in die Methode nicht jedesmal reingegangen wird, wenn der Job nochmal gefeuert wird? Sieht aus als würde der Trigger komplett pausiert und es wird nicht wieder versucht den Job zu feuern.
Java:
@Override
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext jobExecutionContext) {
ImportScheduler importScheduler = SpringContext.getBean(ImportScheduler.class);
List<JobDetail> currentJobs = importScheduler.getCurrentlyRunningJobs();
for (JobDetail jobDetail : currentJobs) {
String thisJobName = jobDetail.getKey().getName();
if (thisJobName.equalsIgnoreCase(jobExecutionContext.getJobDetail().getKey().getName())){
return true;
}
}
return false;
}