Index: src/java/org/quartz/simpl/RAMJobStore.java =================================================================== --- src/java/org/quartz/simpl/RAMJobStore.java (revision 698) +++ src/java/org/quartz/simpl/RAMJobStore.java (working copy) @@ -1151,6 +1151,7 @@ if (tw.trigger.getNextFireTime() == null) { tw.state = TriggerWrapper.STATE_COMPLETE; + signaler.notifySchedulerListenersFinalized(tw.trigger); synchronized (triggerLock) { timeTriggers.remove(tw); } Index: src/java/org/quartz/core/SchedulerSignalerImpl.java =================================================================== --- src/java/org/quartz/core/SchedulerSignalerImpl.java (revision 698) +++ src/java/org/quartz/core/SchedulerSignalerImpl.java (working copy) @@ -55,6 +55,14 @@ this.sched = sched; } + /* + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * Interface. + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + public void notifyTriggerListenersMisfired(Trigger trigger) { try { sched.notifyTriggerListenersMisfired(trigger); @@ -66,13 +74,9 @@ } } - /* - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - * - * Interface. - * - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - */ + public void notifySchedulerListenersFinalized(Trigger trigger) { + sched.notifySchedulerListenersFinalized(trigger); + } public void signalSchedulingChange() { sched.notifySchedulerThread(); Index: src/java/org/quartz/spi/SchedulerSignaler.java =================================================================== --- src/java/org/quartz/spi/SchedulerSignaler.java (revision 698) +++ src/java/org/quartz/spi/SchedulerSignaler.java (working copy) @@ -40,6 +40,8 @@ void notifyTriggerListenersMisfired(Trigger trigger); + void notifySchedulerListenersFinalized(Trigger trigger); + void signalSchedulingChange(); } Index: src/java/org/quartz/impl/jdbcjobstore/JobStoreSupport.java =================================================================== --- src/java/org/quartz/impl/jdbcjobstore/JobStoreSupport.java (revision 698) +++ src/java/org/quartz/impl/jdbcjobstore/JobStoreSupport.java (working copy) @@ -896,6 +896,8 @@ } doUpdateOfMisfiredTrigger(conn, null, trig, false, STATE_WAITING, recovering); + + signaler.notifySchedulerListenersFinalized(trig); } return new RecoverMisfiredJobsResult( @@ -924,6 +926,8 @@ doUpdateOfMisfiredTrigger(conn, ctxt, trig, forceState, newStateIfNotComplete, false); + signaler.notifySchedulerListenersFinalized(trig); + return true; } catch (Exception e) {