/** * <p> * Create a <code>QuartzScheduler</code> with the given configuration * properties. * </p> * * @see QuartzSchedulerResources */ public QuartzScheduler(QuartzSchedulerResources resources, long idleWaitTime, @Deprecated long dbRetryInterval) throws SchedulerException { this.resources = resources; if (resources.getJobStore() instanceof JobListener) { addInternalJobListener((JobListener)resources.getJobStore()); } this.schedThread = new QuartzSchedulerThread(this, resources); ThreadExecutor schedThreadExecutor = resources.getThreadExecutor(); schedThreadExecutor.execute(this.schedThread); if (idleWaitTime > 0) { this.schedThread.setIdleWaitTime(idleWaitTime); } jobMgr = new ExecutingJobsManager(); addInternalJobListener(jobMgr); errLogger = new ErrorLogger(); addInternalSchedulerListener(errLogger); signaler = new SchedulerSignalerImpl(this, this.schedThread); getLog().info("Quartz Scheduler v." + getVersion() + " created."); }
long delay = computeDelayForRepeatedErrors(qsRsrcs.getJobStore(), acquiresFailed); Thread.sleep(delay); } catch (Exception ignore) { clearSignaledSchedulingChange(); try { triggers = qsRsrcs.getJobStore().acquireNextTriggers( } catch (RuntimeException e) { if (acquiresFailed == 0) { getLog().error("quartzSchedulerThreadLoop: RuntimeException " +e.getMessage(), e); if (!isCandidateNewTimeEarlierWithinReason(triggerTime, false)) { try { if(releaseIfScheduleChangedSignificantly(triggers, triggerTime)) { break; getLog().error("RuntimeException while firing trigger " + triggers.get(i), exception); qsRsrcs.getJobStore().releaseAcquiredTrigger(triggers.get(i)); continue; getLog().error("ThreadPool.runInThread() return false!"); qsRsrcs.getJobStore().triggeredJobComplete(triggers.get(i), bndle.getJobDetail(), CompletedExecutionInstruction.SET_ALL_JOB_TRIGGERS_ERROR); long waitTime = now + getRandomizedIdleWaitTime(); long timeUntilContinue = waitTime - now; synchronized(sigLock) {
if (!isScheduleChanged()) return false; if(getSignaledNextFireTime() == 0) earlier = true; else if(getSignaledNextFireTime() < oldTime ) earlier = true; clearSignaledSchedulingChange();
sigLock.notifyAll(); } else { signalSchedulingChange(0); while (true) { try { join(); break; } catch (InterruptedException _) {
/** * <p> * Construct a new <code>QuartzSchedulerThread</code> for the given * <code>QuartzScheduler</code> as a <code>Thread</code> with the given * attributes. * </p> */ QuartzSchedulerThread(QuartzScheduler qs, QuartzSchedulerResources qsRsrcs, boolean setDaemon, int threadPrio) { super(qs.getSchedulerThreadGroup(), qsRsrcs.getThreadName()); this.qs = qs; this.qsRsrcs = qsRsrcs; this.setDaemon(setDaemon); if(qsRsrcs.isThreadsInheritInitializersClassLoadContext()) { log.info("QuartzSchedulerThread Inheriting ContextClassLoader of thread: " + Thread.currentThread().getName()); this.setContextClassLoader(Thread.currentThread().getContextClassLoader()); } this.setPriority(threadPrio); // start the underlying thread, but put this object into the 'paused' // state // so processing doesn't start yet... paused = true; halted = new AtomicBoolean(false); }
clearSignaledSchedulingChange(); try { trigger = qsRsrcs.getJobStore().acquireNextTrigger( } catch (RuntimeException e) { if(!lastAcquireFailed) { getLog().error("quartzSchedulerThreadLoop: RuntimeException " +e.getMessage(), e); if (isScheduleChanged()) { if(isCandidateNewTimeEarlierWithinReason(triggerTime)) { releaseTriggerRetryLoop(trigger); } catch (RuntimeException e) { getLog().error( "releaseTriggerRetryLoop: RuntimeException " +e.getMessage(), e); releaseTriggerRetryLoop(trigger); + trigger.getFullName() + "'", se); } catch (RuntimeException e) { getLog().error( "RuntimeException while firing trigger " + trigger.getFullName(), e); releaseTriggerRetryLoop(trigger); releaseTriggerRetryLoop(trigger);
clearSignaledSchedulingChange(); try { triggers = quartzSchedulerResources.getJobStore().acquireNextTriggers(now + idleWaitTime, break; if (!isCandidateNewTimeEarlierWithinReason(triggerTime, false)) { try { if (releaseIfScheduleChangedSignificantly(triggers, triggerTime)) { break; long waitTime = now + getRandomizedIdleWaitTime(); long timeUntilContinue = waitTime - now; synchronized (sigLock) {
/** * <p> * Construct a new <code>QuartzSchedulerThread</code> for the given * <code>QuartzScheduler</code> as a <code>Thread</code> with the given * attributes. * </p> */ QuartzSchedulerThread(QuartzScheduler qs, QuartzSchedulerResources qsRsrcs, SchedulingContext ctxt, boolean setDaemon, int threadPrio) { super(qs.getSchedulerThreadGroup(), qsRsrcs.getThreadName()); this.qs = qs; this.qsRsrcs = qsRsrcs; this.ctxt = ctxt; this.setDaemon(setDaemon); if(qsRsrcs.isThreadsInheritInitializersClassLoadContext()) { log.info("QuartzSchedulerThread Inheriting ContextClassLoader of thread: " + Thread.currentThread().getName()); this.setContextClassLoader(Thread.currentThread().getContextClassLoader()); } this.setPriority(threadPrio); // start the underlying thread, but put this object into the 'paused' // state // so processing doesn't start yet... paused = true; halted = false; this.start(); }
if(getSignaledNextFireTime() == 0) earlier = true; else if(getSignaledNextFireTime() < oldTime ) earlier = true; clearSignaledSchedulingChange();
this.schedThread = new QuartzSchedulerThread(this, resources, ctxt); if (idleWaitTime > 0) { this.schedThread.setIdleWaitTime(idleWaitTime); this.schedThread.setDbFailureRetryInterval(dbRetryInterval);
/** * <p> * Reports whether the <code>Scheduler</code> is paused. * </p> */ public boolean isInStandbyMode() { return schedThread.isPaused(); }
private boolean releaseIfScheduleChangedSignificantly( List<OperableTrigger> triggers, long triggerTime) { if (isCandidateNewTimeEarlierWithinReason(triggerTime, true)) { // above call does a clearSignaledSchedulingChange() for (OperableTrigger trigger : triggers) { qsRsrcs.getJobStore().releaseAcquiredTrigger(trigger); } triggers.clear(); return true; } return false; }
schedThread.halt(waitForJobsToComplete);
/** * Create a <code>QuartzScheduler</code> with the given configuration properties. * * @see QuartzSchedulerResources */ public QuartzScheduler(QuartzSchedulerResources quartzSchedulerResources) throws SchedulerException { this.quartzSchedulerResources = quartzSchedulerResources; if (quartzSchedulerResources.getJobStore() instanceof JobListener) { addInternalJobListener((JobListener) quartzSchedulerResources.getJobStore()); } this.quartzSchedulerThread = new QuartzSchedulerThread(this, quartzSchedulerResources); jobMgr = new ExecutingJobsManager(); addInternalJobListener(jobMgr); errLogger = new ErrorLoggingScheduleListener(); addInternalSchedulerListener(errLogger); signaler = new SchedulerSignalerImpl(this, this.quartzSchedulerThread); cascadingClassLoadHelper.initialize(); }
clearSignaledSchedulingChange(); try { trigger = qsRsrcs.getJobStore().acquireNextTrigger( } catch (RuntimeException e) { if(!lastAcquireFailed) { getLog().error("quartzSchedulerThreadLoop: RuntimeException " +e.getMessage(), e); if (isScheduleChanged()) { if(isCandidateNewTimeEarlierWithinReason(triggerTime)) { releaseTriggerRetryLoop(trigger); } catch (RuntimeException e) { getLog().error( "releaseTriggerRetryLoop: RuntimeException " +e.getMessage(), e); releaseTriggerRetryLoop(trigger); + trigger.getFullName() + "'", se); } catch (RuntimeException e) { getLog().error( "RuntimeException while firing trigger " + trigger.getFullName(), e); releaseTriggerRetryLoop(trigger); releaseTriggerRetryLoop(trigger);
/** * <p> * Construct a new <code>QuartzSchedulerThread</code> for the given * <code>QuartzScheduler</code> as a <code>Thread</code> with the given * attributes. * </p> */ QuartzSchedulerThread(QuartzScheduler qs, QuartzSchedulerResources qsRsrcs, boolean setDaemon, int threadPrio) { super(qs.getSchedulerThreadGroup(), qsRsrcs.getThreadName()); this.qs = qs; this.qsRsrcs = qsRsrcs; this.setDaemon(setDaemon); if(qsRsrcs.isThreadsInheritInitializersClassLoadContext()) { log.info("QuartzSchedulerThread Inheriting ContextClassLoader of thread: " + Thread.currentThread().getName()); this.setContextClassLoader(Thread.currentThread().getContextClassLoader()); } this.setPriority(threadPrio); // start the underlying thread, but put this object into the 'paused' // state // so processing doesn't start yet... paused = true; halted = new AtomicBoolean(false); }
clearSignaledSchedulingChange(); try { triggers = quartzSchedulerResources.getJobStore().acquireNextTriggers(now + idleWaitTime, break; if (!isCandidateNewTimeEarlierWithinReason(triggerTime, false)) { try { if (releaseIfScheduleChangedSignificantly(triggers, triggerTime)) { break; long waitTime = now + getRandomizedIdleWaitTime(); long timeUntilContinue = waitTime - now; synchronized (sigLock) {
/** * <p> * Construct a new <code>QuartzSchedulerThread</code> for the given * <code>QuartzScheduler</code> as a <code>Thread</code> with the given * attributes. * </p> */ QuartzSchedulerThread(QuartzScheduler qs, QuartzSchedulerResources qsRsrcs, SchedulingContext ctxt, boolean setDaemon, int threadPrio) { super(qs.getSchedulerThreadGroup(), qsRsrcs.getThreadName()); this.qs = qs; this.qsRsrcs = qsRsrcs; this.ctxt = ctxt; this.setDaemon(setDaemon); if(qsRsrcs.isThreadsInheritInitializersClassLoadContext()) { log.info("QuartzSchedulerThread Inheriting ContextClassLoader of thread: " + Thread.currentThread().getName()); this.setContextClassLoader(Thread.currentThread().getContextClassLoader()); } this.setPriority(threadPrio); // start the underlying thread, but put this object into the 'paused' // state // so processing doesn't start yet... paused = true; halted = false; this.start(); }