private boolean applyMisfire(TriggerWrapper tw) { long misfireTime = System.currentTimeMillis(); if (getMisfireThreshold() > 0) { misfireTime -= getMisfireThreshold(); } Date tnft = tw.trigger.getNextFireTime(); if (tnft == null || tnft.getTime() > misfireTime || tw.trigger.getMisfireInstruction() == Trigger.MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY) { return false; } Calendar cal = null; if (tw.trigger.getCalendarName() != null) { cal = retrieveCalendar(tw.trigger.getCalendarName()); } mSignaler.notifyTriggerListenersMisfired((OperableTrigger) tw.trigger.clone()); tw.trigger.updateAfterMisfire(cal); if (tw.trigger.getNextFireTime() == null) { tw.state = TriggerWrapper.STATE_COMPLETE; mSignaler.notifySchedulerListenersFinalized(tw.trigger); synchronized (lock) { timeWrappedTriggers.remove(tw); } } else if (tnft.equals(tw.trigger.getNextFireTime())) { return false; } return true; }
@Override public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) { synchronized (executingJobs) { executingJobs.remove(((OperableTrigger) context.getTrigger()).getFireInstanceId()); } }
if (trigger.getStartTime() == null) { trigger.setStartTime(new Date()); Trigger dupeT = sched.getTrigger(trigger.getName()); if (dupeT != null) { // if trigger with name already exists if (!dupeT.getJobName().equals(trigger.getJobName())) { logger.warn("Possibly duplicately named ({}) triggers in jobs xml file! ", trigger.getName()); sched.rescheduleJob(trigger.getName(), trigger); } else { logger.debug("Scheduling job: " + trigger.getJobName() + " with trigger: " + trigger.getName()); logger.debug("Adding trigger: " + trigger.getName() + " for job: " + trigger.getJobName() + " failed because the trigger already existed.");
TriggerWrapper(OperableTrigger trigger) { this.trigger = trigger; key = trigger.getName(); this.jobKey = trigger.getJobName(); }
trig.validate(); if (trigger.getCalendarName() != null) { cal = quartzSchedulerResources.getJobStore().retrieveCalendar(trigger.getCalendarName()); if (cal == null) { throw new SchedulerException("Calendar not found: " + trigger.getCalendarName()); Date ft = trig.computeFirstFireTime(cal); notifySchedulerThread(trigger.getNextFireTime().getTime()); notifySchedulerListenersScheduled(trigger);
TriggerWrapper tw = wrappedTriggersByKey.get(trigger.getName()); if (tw.trigger.getCalendarName() != null) { cal = retrieveCalendar(tw.trigger.getCalendarName()); if (cal == null) { continue; Date prevFireTime = trigger.getPreviousFireTime(); tw.trigger.triggered(cal); trigger.triggered(cal); TriggerFiredBundle bndle = new TriggerFiredBundle(retrieveJob(tw.jobKey), trigger, cal, false, new Date(), trigger.getPreviousFireTime(), prevFireTime, trigger.getNextFireTime()); } else if (tw.trigger.getNextFireTime() != null) { synchronized (lock) { timeWrappedTriggers.add(tw);
/** * <p> * Trigger the identified <code>{@link org.quartz.jobs.Job}</code> (execute it now) - with a non-volatile trigger. * </p> */ @Override public void triggerJob(String jobKey, JobDataMap data) throws SchedulerException { validateState(); OperableTrigger operableTrigger = simpleTriggerBuilder().withIdentity(jobKey + "-trigger").forJob(jobKey).startAt(new Date()).build(); // OperableTrigger operableTrigger = TriggerBuilder.newTriggerBuilder().withIdentity(jobKey + "-trigger").forJob(jobKey) // .withTriggerImplementation(SimpleScheduleBuilder.simpleScheduleBuilderBuilder().instantiate()).startAt(new Date()).build(); // TODO what does this accomplish??? Seems to sets it's next fire time internally operableTrigger.computeFirstFireTime(null); if (data != null) { operableTrigger.setJobDataMap(data); } boolean collision = true; while (collision) { try { quartzSchedulerResources.getJobStore().storeTrigger(operableTrigger, false); collision = false; } catch (ObjectAlreadyExistsException oaee) { operableTrigger.setName(newTriggerId()); } } notifySchedulerThread(operableTrigger.getNextFireTime().getTime()); notifySchedulerListenersScheduled(operableTrigger); }
public void storeTrigger(OperableTrigger newTrigger, boolean replaceExisting) throws JobPersistenceException { TriggerWrapper tw = new TriggerWrapper((OperableTrigger) newTrigger.clone()); removeTrigger(newTrigger.getName()); if (retrieveJob(newTrigger.getJobName()) == null) { throw new JobPersistenceException("The job (" + newTrigger.getJobName() + ") referenced by the trigger does not exist.");
if (tw.trigger.getNextFireTime() == null) { continue; if (tw.trigger.getNextFireTime() != null) { timeWrappedTriggers.add(tw); if (tw.getTrigger().getNextFireTime().getTime() > noLaterThan + timeWindow) { timeWrappedTriggers.add(tw); return result; tw.trigger.setFireInstanceId(getFiredTriggerRecordId()); OperableTrigger trig = (OperableTrigger) tw.trigger.clone(); result.add(trig);
TriggerWrapper tw = wrappedTriggersByKey.get(trigger.getName()); if (triggerInstCode == CompletedExecutionInstruction.DELETE_TRIGGER) { if (trigger.getNextFireTime() == null) { if (tw.getTrigger().getNextFireTime() == null) { removeTrigger(trigger.getName()); removeTrigger(trigger.getName()); mSignaler.signalSchedulingChange(0L); mSignaler.signalSchedulingChange(0L); } else if (triggerInstCode == CompletedExecutionInstruction.SET_TRIGGER_ERROR) { logger.info("Trigger " + trigger.getName() + " set to ERROR state."); tw.state = TriggerWrapper.STATE_ERROR; mSignaler.signalSchedulingChange(0L); } else if (triggerInstCode == CompletedExecutionInstruction.SET_ALL_JOB_TRIGGERS_ERROR) { logger.info("All triggers of Job " + trigger.getJobName() + " set to ERROR state."); setAllTriggersOfJobToState(trigger.getJobName(), TriggerWrapper.STATE_ERROR); mSignaler.signalSchedulingChange(0L); } else if (triggerInstCode == CompletedExecutionInstruction.SET_ALL_JOB_TRIGGERS_COMPLETE) { setAllTriggersOfJobToState(trigger.getJobName(), TriggerWrapper.STATE_COMPLETE); mSignaler.signalSchedulingChange(0L);
long triggerTime = triggers.get(0).getNextFireTime().getTime(); long timeUntilTrigger = triggerTime - now; while (timeUntilTrigger > 2) { quartzSchedulerResources.getJobStore().releaseAcquiredTrigger(triggers.get(i)); } catch (SchedulerException se) { quartzScheduler.notifySchedulerListenersError("An error occurred while releasing triggers '" + triggers.get(i).getName() + "'", se); } catch (SchedulerException se2) { quartzScheduler.notifySchedulerListenersError( "An error occurred while placing job's triggers in error state '" + triggers.get(i).getName() + "'", se2); } catch (SchedulerException se2) { quartzScheduler.notifySchedulerListenersError( "An error occurred while placing job's triggers in error state '" + triggers.get(i).getName() + "'", se2);
/** * Retrieve the given <code>{@link org.quartz.triggers.Trigger}</code>. * * @return The desired <code>Trigger</code>, or null if there is no match. */ @Override public OperableTrigger retrieveTrigger(String triggerKey) { synchronized (lock) { TriggerWrapper tw = wrappedTriggersByKey.get(triggerKey); return (tw != null) ? (OperableTrigger) tw.getTrigger().clone() : null; } }
/** * Inform the <code>JobStore</code> that the scheduler no longer plans to fire the given <code> * Trigger</code>, that it had previously acquired (reserved). */ @Override public void releaseAcquiredTrigger(OperableTrigger trigger) { synchronized (lock) { TriggerWrapper tw = wrappedTriggersByKey.get(trigger.getName()); if (tw != null && tw.state == TriggerWrapper.STATE_ACQUIRED) { tw.state = TriggerWrapper.STATE_WAITING; timeWrappedTriggers.add(tw); } } }
if (!tw.getTrigger().getJobName().equals(newTrigger.getJobName())) { throw new JobPersistenceException("New trigger is not related to the same job as the old trigger.");
CompletedExecutionInstruction instCode = trigger.executionComplete(jec, null); try { qs.notifyJobStoreJobVetoed(trigger, jobDetail, instCode); instCode = trigger.executionComplete(jec, jobExEx); } catch (Exception e) {
String key = getTrimmedToNullString(xpath, "key", entryNode); String value = getTrimmedToNullString(xpath, "value", entryNode); trigger.getJobDataMap().put(key, value);
trig.validate(); if (trigger.getCalendarName() != null) { cal = quartzSchedulerResources.getJobStore().retrieveCalendar(trigger.getCalendarName()); if (cal == null) { throw new SchedulerException("Calendar not found: " + trigger.getCalendarName()); Date ft = trig.computeFirstFireTime(cal); notifySchedulerThread(trigger.getNextFireTime().getTime()); notifySchedulerListenersScheduled(trigger);
TriggerWrapper tw = wrappedTriggersByKey.get(trigger.getName()); if (tw.trigger.getCalendarName() != null) { cal = retrieveCalendar(tw.trigger.getCalendarName()); if (cal == null) { continue; Date prevFireTime = trigger.getPreviousFireTime(); tw.trigger.triggered(cal); trigger.triggered(cal); TriggerFiredBundle bndle = new TriggerFiredBundle(retrieveJob(tw.jobKey), trigger, cal, false, new Date(), trigger.getPreviousFireTime(), prevFireTime, trigger.getNextFireTime()); } else if (tw.trigger.getNextFireTime() != null) { synchronized (lock) { timeWrappedTriggers.add(tw);
/** * <p> * Trigger the identified <code>{@link org.quartz.jobs.Job}</code> (execute it now) - with a non-volatile trigger. * </p> */ @Override public void triggerJob(String jobKey, JobDataMap data) throws SchedulerException { validateState(); OperableTrigger operableTrigger = simpleTriggerBuilder().withIdentity(jobKey + "-trigger").forJob(jobKey).startAt(new Date()).build(); // OperableTrigger operableTrigger = TriggerBuilder.newTriggerBuilder().withIdentity(jobKey + "-trigger").forJob(jobKey) // .withTriggerImplementation(SimpleScheduleBuilder.simpleScheduleBuilderBuilder().instantiate()).startAt(new Date()).build(); // TODO what does this accomplish??? Seems to sets it's next fire time internally operableTrigger.computeFirstFireTime(null); if (data != null) { operableTrigger.setJobDataMap(data); } boolean collision = true; while (collision) { try { quartzSchedulerResources.getJobStore().storeTrigger(operableTrigger, false); collision = false; } catch (ObjectAlreadyExistsException oaee) { operableTrigger.setName(newTriggerId()); } } notifySchedulerThread(operableTrigger.getNextFireTime().getTime()); notifySchedulerListenersScheduled(operableTrigger); }
public void storeTrigger(OperableTrigger newTrigger, boolean replaceExisting) throws JobPersistenceException { TriggerWrapper tw = new TriggerWrapper((OperableTrigger) newTrigger.clone()); removeTrigger(newTrigger.getName()); if (retrieveJob(newTrigger.getJobName()) == null) { throw new JobPersistenceException("The job (" + newTrigger.getJobName() + ") referenced by the trigger does not exist.");