LinkedList<Date> lst = new LinkedList<Date>(); OperableTrigger t = (OperableTrigger) trigg.clone(); if (t.getNextFireTime() == null) { t.computeFirstFireTime(cal); Date d = t.getNextFireTime(); if (d != null) { lst.add(d); t.triggered(cal); } else { break;
public TriggerKey getKey() { return trigger.getKey(); }
public JobKey getJobKey() { return trigger.getJobKey(); }
public static List<Date> computeFireTimesBetween(OperableTrigger trigger, org.quartz.Calendar cal, Date from, Date to, int num) { List<Date> lst = new LinkedList<>(); OperableTrigger t = (OperableTrigger) trigger.clone(); if (t.getNextFireTime() == null) { t.setStartTime(from); t.setEndTime(to); t.computeFirstFireTime(cal); } for (int i = 0; i < num; i++) { Date d = t.getNextFireTime(); if (d != null) { if (d.before(from)) { t.triggered(cal); continue; } if (d.after(to)) { break; } lst.add(d); t.triggered(cal); } else { break; } } return lst; }
JobDetail jobDetail) throws SQLException, IOException { ByteArrayOutputStream baos = serializeJobData(trigger.getJobDataMap()); int len = baos.toByteArray().length; ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ps.setString(1, trigger.getJobKey().getName()); ps.setString(2, trigger.getJobKey().getGroup()); ps.setString(3, trigger.getDescription()); long nextFireTime = -1; if (trigger.getNextFireTime() != null) { nextFireTime = trigger.getNextFireTime().getTime(); if (trigger.getPreviousFireTime() != null) { prevFireTime = trigger.getPreviousFireTime().getTime(); .getStartTime().getTime()))); long endTime = 0; if (trigger.getEndTime() != null) { endTime = trigger.getEndTime().getTime(); ps.setString(10, trigger.getCalendarName()); ps.setInt(11, trigger.getMisfireInstruction()); ps.setInt(12, trigger.getPriority()); ps.setBinaryStream(13, bais, len); ps.setString(14, trigger.getKey().getName()); ps.setString(15, trigger.getKey().getGroup());
TriggerWrapper tw = triggersByKey.get(trigger.getKey()); 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); false, new Date(), trigger.getPreviousFireTime(), prevFireTime, trigger.getNextFireTime()); } else if (tw.trigger.getNextFireTime() != null) { synchronized (lock) { timeTriggers.add(tw);
try { for (OperableTrigger trigger : triggersFired) { TriggerWrapper tw = triggerFacade.get(trigger.getKey()); Date prevFireTime = trigger.getPreviousFireTime(); trigger.triggered(cal); // calendar is already clone()'d so it is okay to pass out to trigger TriggerFiredBundle bndle = new TriggerFiredBundle(retrieveJob(trigger.getJobKey()), trigger, cal, false, new Date(), trigger.getPreviousFireTime(), prevFireTime, trigger.getNextFireTime()); String fireInstanceId = trigger.getFireInstanceId(); FiredTrigger prev = triggerFacade.getFiredTrigger(fireInstanceId); triggerFacade.putFiredTrigger(fireInstanceId, new FiredTrigger(terracottaClientId, tw.getKey(), trigger.getPreviousFireTime().getTime())); getLog().trace("Tracking " + trigger + " has fired on " + fireInstanceId); if (prev != null) {
protected 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()); } signaler.notifyTriggerListenersMisfired((OperableTrigger)tw.trigger.clone()); tw.trigger.updateAfterMisfire(cal); if (tw.trigger.getNextFireTime() == null) { tw.state = TriggerWrapper.STATE_COMPLETE; signaler.notifySchedulerListenersFinalized(tw.trigger); synchronized (lock) { timeTriggers.remove(tw); } } else if (tnft.equals(tw.trigger.getNextFireTime())) { return false; } return true; }
try { ps = conn.prepareStatement(rtp(INSERT_FIRED_TRIGGER)); ps.setString(1, trigger.getFireInstanceId()); ps.setString(2, trigger.getKey().getName()); ps.setString(3, trigger.getKey().getGroup()); ps.setString(4, instanceId); ps.setBigDecimal(5, new BigDecimal(String.valueOf(System.currentTimeMillis()))); ps.setBigDecimal(6, new BigDecimal(String.valueOf(trigger.getNextFireTime().getTime()))); ps.setString(7, state); if (job != null) { ps.setString(8, trigger.getJobKey().getName()); ps.setString(9, trigger.getJobKey().getGroup()); setBoolean(ps, 10, job.isConcurrentExectionDisallowed()); setBoolean(ps, 11, job.requestsRecovery()); setBoolean(ps, 11, false); ps.setInt(12, trigger.getPriority());
OperableTrigger clone = (OperableTrigger) newTrigger.clone(); JobDetail job = retrieveJob(newTrigger.getJobKey()); if (job == null) { throw new JobPersistenceException("The job (" + newTrigger.getJobKey() + ") referenced by the trigger does not exist."); if (!replaceExisting) { throw new ObjectAlreadyExistsException(newTrigger); } removeTrigger(newTrigger.getKey(), false); Set<String> grpSet = toolkitDSHolder.getOrCreateTriggersGroupMap(newTrigger.getKey().getGroup()); grpSet.add(newTrigger.getKey().getName()); if (!triggerFacade.hasGroup(newTrigger.getKey().getGroup())) { triggerFacade.addGroup(newTrigger.getKey().getGroup()); if (triggerFacade.pausedGroupsContain(newTrigger.getKey().getGroup()) || jobFacade.pausedGroupsContain(newTrigger.getJobKey().getGroup())) { tw.setState(TriggerState.PAUSED, terracottaClientId, triggerFacade); if (jobFacade.blockedJobsContain(tw.getJobKey())) {
private void doUpdateOfMisfiredTrigger(Connection conn, OperableTrigger trig, boolean forceState, String newStateIfNotComplete, boolean recovering) throws JobPersistenceException { Calendar cal = null; if (trig.getCalendarName() != null) { cal = retrieveCalendar(conn, trig.getCalendarName()); } schedSignaler.notifyTriggerListenersMisfired(trig); trig.updateAfterMisfire(cal); if (trig.getNextFireTime() == null) { storeTrigger(conn, trig, null, true, STATE_COMPLETE, forceState, recovering); schedSignaler.notifySchedulerListenersFinalized(trig); } else { storeTrigger(conn, trig, null, true, newStateIfNotComplete, forceState, recovering); } }
/** * <p> * Trigger the identified <code>{@link org.quartz.Job}</code> (execute it * now) - with a non-volatile trigger. * </p> */ @SuppressWarnings("deprecation") public void triggerJob(JobKey jobKey, JobDataMap data) throws SchedulerException { validateState(); OperableTrigger trig = (OperableTrigger) newTrigger().withIdentity(newTriggerId(), Scheduler.DEFAULT_GROUP).forJob(jobKey).build(); trig.computeFirstFireTime(null); if(data != null) { trig.setJobDataMap(data); } boolean collision = true; while (collision) { try { resources.getJobStore().storeTrigger(trig, false); collision = false; } catch (ObjectAlreadyExistsException oaee) { trig.setKey(new TriggerKey(newTriggerId(), Scheduler.DEFAULT_GROUP)); } } notifySchedulerThread(trig.getNextFireTime().getTime()); notifySchedulerListenersSchduled(trig); }
ps.setBigDecimal(3, new BigDecimal(String.valueOf(trigger.getNextFireTime().getTime()))); ps.setString(4, state); ps.setString(5, trigger.getJobKey().getName()); ps.setString(6, trigger.getJobKey().getGroup()); setBoolean(ps, 7, job.isConcurrentExectionDisallowed()); setBoolean(ps, 8, job.requestsRecovery()); ps.setString(9, trigger.getFireInstanceId());
/** * <p> * Store and schedule the identified <code>{@link org.quartz.spi.OperableTrigger}</code> * </p> */ public void triggerJob(OperableTrigger trig) throws SchedulerException { validateState(); trig.computeFirstFireTime(null); boolean collision = true; while (collision) { try { resources.getJobStore().storeTrigger(trig, false); collision = false; } catch (ObjectAlreadyExistsException oaee) { trig.setKey(new TriggerKey(newTriggerId(), Scheduler.DEFAULT_GROUP)); } } notifySchedulerThread(trig.getNextFireTime().getTime()); notifySchedulerListenersSchduled(trig); }
private void scheduleRecoveryIfNeeded(TriggerWrapper tw, FiredTrigger recovering) { JobWrapper jobWrapper = jobFacade.get(tw.getJobKey()); if (jobWrapper == null) { getLog().error("No job found for orphaned trigger: " + tw); return; } if (jobWrapper.requestsRecovery()) { OperableTrigger recoveryTrigger = createRecoveryTrigger(tw, jobWrapper, "recover_" + terracottaClientId + "_" + ftrCtr++, recovering); JobDataMap jd = tw.getTriggerClone().getJobDataMap(); jd.put(Scheduler.FAILED_JOB_ORIGINAL_TRIGGER_NAME, tw.getKey().getName()); jd.put(Scheduler.FAILED_JOB_ORIGINAL_TRIGGER_GROUP, tw.getKey().getGroup()); jd.put(Scheduler.FAILED_JOB_ORIGINAL_TRIGGER_FIRETIME_IN_MILLISECONDS, String.valueOf(recovering.getFireTime())); jd.put(Scheduler.FAILED_JOB_ORIGINAL_TRIGGER_SCHEDULED_FIRETIME_IN_MILLISECONDS, String.valueOf(recovering.getScheduledFireTime())); recoveryTrigger.setJobDataMap(jd); recoveryTrigger.computeFirstFireTime(null); try { storeTrigger(recoveryTrigger, false); if (!tw.mayFireAgain()) { removeTrigger(tw.getKey()); } getLog().info("Recovered job " + jobWrapper + " for trigger " + tw); } catch (JobPersistenceException e) { getLog().error("Can't recover job " + jobWrapper + " for trigger " + tw, e); } } }
public Date getNextFireTime() { return this.trigger.getNextFireTime(); }
protected void releaseAcquiredTrigger(Connection conn, OperableTrigger trigger) throws JobPersistenceException { try { getDelegate().updateTriggerStateFromOtherState(conn, trigger.getKey(), STATE_WAITING, STATE_ACQUIRED); getDelegate().deleteFiredTrigger(conn, trigger.getFireInstanceId()); } catch (SQLException e) { throw new JobPersistenceException( "Couldn't release acquired trigger: " + e.getMessage(), e); } }
public OperableTrigger getTriggerClone() { return (OperableTrigger) this.trigger.clone(); }
public String getCalendarName() { return this.trigger.getCalendarName(); }