org.quartz.impl.jdbcjobstore
Class JobStoreSupport

java.lang.Object
  extended by org.quartz.impl.jdbcjobstore.JobStoreSupport
All Implemented Interfaces:
Constants, org.quartz.spi.JobStore
Direct Known Subclasses:
JobStoreCMT, JobStoreTX

public abstract class JobStoreSupport
extends java.lang.Object
implements org.quartz.spi.JobStore, Constants

Contains base functionality for JDBC-based JobStore implementations.

Author:
Jeffrey Wescott, James House

Nested Class Summary
protected static class JobStoreSupport.RecoverMisfiredJobsResult
          Helper class for returning the composite result of trying to recover misfired jobs.
protected static interface JobStoreSupport.TransactionCallback
          Implement this interface to provide the code to execute within the a transaction template.
protected static interface JobStoreSupport.VoidTransactionCallback
          Implement this interface to provide the code to execute within the a transaction template that has no return value.
 
Field Summary
protected  java.util.HashMap<java.lang.String,Calendar> calendarCache
           
protected  java.lang.Class<? extends DriverDelegate> delegateClass
           
protected  java.lang.String delegateClassName
           
protected  java.lang.String delegateInitString
           
protected  java.lang.String dsName
           
protected  boolean firstCheckIn
           
protected  java.lang.String instanceId
           
protected  java.lang.String instanceName
           
protected  long lastCheckin
           
protected static java.lang.String LOCK_CALENDAR_ACCESS
           
protected static java.lang.String LOCK_JOB_ACCESS
           
protected static java.lang.String LOCK_MISFIRE_ACCESS
           
protected static java.lang.String LOCK_STATE_ACCESS
           
protected static java.lang.String LOCK_TRIGGER_ACCESS
           
protected  int maxToRecoverAtATime
           
protected  java.lang.ThreadLocal<java.lang.Long> sigChangeForTxCompletion
           
protected  java.lang.String tablePrefix
           
protected  boolean useProperties
           
 
Fields inherited from interface org.quartz.impl.jdbcjobstore.Constants
ALIAS_COL_NEXT_FIRE_TIME, ALL_GROUPS_PAUSED, COL_BLOB, COL_CALENDAR, COL_CALENDAR_NAME, COL_CHECKIN_INTERVAL, COL_CRON_EXPRESSION, COL_DESCRIPTION, COL_END_TIME, COL_ENTRY_ID, COL_ENTRY_STATE, COL_FIRED_TIME, COL_INSTANCE_NAME, COL_IS_DURABLE, COL_IS_NONCONCURRENT, COL_IS_UPDATE_DATA, COL_IS_VOLATILE, COL_JOB_CLASS, COL_JOB_DATAMAP, COL_JOB_GROUP, COL_JOB_NAME, COL_LAST_CHECKIN_TIME, COL_LOCK_NAME, COL_MISFIRE_INSTRUCTION, COL_NEXT_FIRE_TIME, COL_PREV_FIRE_TIME, COL_PRIORITY, COL_REPEAT_COUNT, COL_REPEAT_INTERVAL, COL_REQUESTS_RECOVERY, COL_SCHEDULER_NAME, COL_START_TIME, COL_TIME_ZONE_ID, COL_TIMES_TRIGGERED, COL_TRIGGER_GROUP, COL_TRIGGER_NAME, COL_TRIGGER_STATE, COL_TRIGGER_TYPE, DEFAULT_TABLE_PREFIX, STATE_ACQUIRED, STATE_BLOCKED, STATE_COMPLETE, STATE_DELETED, STATE_ERROR, STATE_EXECUTING, STATE_MISFIRED, STATE_PAUSED, STATE_PAUSED_BLOCKED, STATE_WAITING, TABLE_BLOB_TRIGGERS, TABLE_CALENDARS, TABLE_CRON_TRIGGERS, TABLE_FIRED_TRIGGERS, TABLE_JOB_DETAILS, TABLE_LOCKS, TABLE_PAUSED_TRIGGERS, TABLE_SCHEDULER_STATE, TABLE_SIMPLE_TRIGGERS, TABLE_TRIGGERS, TTYPE_BLOB, TTYPE_CAL_INT, TTYPE_CRON, TTYPE_DAILY_TIME_INT, TTYPE_SIMPLE
 
Constructor Summary
JobStoreSupport()
           
 
Method Summary
protected  java.util.List<org.quartz.spi.OperableTrigger> acquireNextTrigger(java.sql.Connection conn, long noLaterThan, int maxCount, long timeWindow)
           
 java.util.List<org.quartz.spi.OperableTrigger> acquireNextTriggers(long noLaterThan, int maxCount, long timeWindow)
           Get a handle to the next N triggers to be fired, and mark them as 'reserved' by the calling scheduler.
protected  long calcFailedIfAfter(SchedulerStateRecord rec)
           
protected  boolean calendarExists(java.sql.Connection conn, java.lang.String calName)
           
 boolean canUseProperties()
           Get whether String-only properties will be handled in JobDataMaps.
protected  java.lang.String checkBlockedState(java.sql.Connection conn, JobKey jobKey, java.lang.String currentState)
          Determines if a Trigger for the given job should be blocked.
protected  boolean checkExists(java.sql.Connection conn, JobKey jobKey)
           
protected  boolean checkExists(java.sql.Connection conn, TriggerKey triggerKey)
           
 boolean checkExists(JobKey jobKey)
          Determine whether a Job with the given identifier already exists within the scheduler.
 boolean checkExists(TriggerKey triggerKey)
          Determine whether a Trigger with the given identifier already exists within the scheduler.
protected  void cleanupConnection(java.sql.Connection conn)
           Cleanup the given database connection.
 void clearAllSchedulingData()
          Clear (delete!) all scheduling data - all Jobs, Triggers Calendars.
protected  void clearAllSchedulingData(java.sql.Connection conn)
           
protected  java.lang.Long clearAndGetSignalSchedulingChangeOnTxCompletion()
           
protected  void closeConnection(java.sql.Connection conn)
          Closes the supplied Connection.
protected  java.util.List<SchedulerStateRecord> clusterCheckIn(java.sql.Connection conn)
           
protected  void clusterRecover(java.sql.Connection conn, java.util.List<SchedulerStateRecord> failedInstances)
           
protected  void commitConnection(java.sql.Connection conn)
          Commit the supplied connection
protected  boolean doCheckin()
           
protected  JobStoreSupport.RecoverMisfiredJobsResult doRecoverMisfires()
           
protected abstract  java.lang.Object executeInLock(java.lang.String lockName, JobStoreSupport.TransactionCallback txCallback)
          Execute the given callback having aquired the given lock.
protected  void executeInLock(java.lang.String lockName, JobStoreSupport.VoidTransactionCallback txCallback)
          Execute the given callback having aquired the given lock.
protected  java.lang.Object executeInNonManagedTXLock(java.lang.String lockName, JobStoreSupport.TransactionCallback txCallback)
          Execute the given callback having optionally aquired the given lock.
protected  void executeInNonManagedTXLock(java.lang.String lockName, JobStoreSupport.VoidTransactionCallback txCallback)
          Execute the given callback having optionally aquired the given lock.
 java.lang.Object executeWithoutLock(JobStoreSupport.TransactionCallback txCallback)
          Execute the given callback in a transaction.
protected  java.util.List<SchedulerStateRecord> findFailedInstances(java.sql.Connection conn)
          Get a list of all scheduler instances in the cluster that may have failed.
protected  java.sql.Connection getAttributeRestoringConnection(java.sql.Connection conn)
          Wrap the given Connection in a Proxy such that attributes that might be set will be restored before the connection is closed (and potentially restored to a pool).
 java.util.List<java.lang.String> getCalendarNames()
           Get the names of all of the Calendar s in the JobStore.
protected  java.util.List<java.lang.String> getCalendarNames(java.sql.Connection conn)
           
protected  org.quartz.spi.ClassLoadHelper getClassLoadHelper()
           
 long getClusterCheckinInterval()
           Get the frequency (in milliseconds) at which this instance "checks-in" with the other instances of the cluster.
protected  java.sql.Connection getConnection()
           
 java.lang.String getDataSource()
           Get the name of the DataSource that should be used for performing database functions.
 long getDbRetryInterval()
           
protected  DriverDelegate getDelegate()
           Get the driver delegate for DB operations.
 boolean getDoubleCheckLockMisfireHandler()
          Get whether to check to see if there are Triggers that have misfired before actually acquiring the lock to recover them.
 java.lang.String getDriverDelegateClass()
           Get the JDBC driver delegate class name.
 java.lang.String getDriverDelegateInitString()
           Get the JDBC driver delegate's initialization string.
 long getEstimatedTimeToReleaseAndAcquireTrigger()
           
protected  java.lang.String getFiredTriggerRecordId()
           
 java.lang.String getInstanceId()
           Get the instance Id of the Scheduler (must be unique within a cluster).
 java.lang.String getInstanceName()
          Get the instance name of the Scheduler (must be unique within this server instance).
 java.util.List<java.lang.String> getJobGroupNames()
           Get the names of all of the Job groups.
protected  java.util.List<java.lang.String> getJobGroupNames(java.sql.Connection conn)
           
 java.util.Set<JobKey> getJobKeys(GroupMatcher<JobKey> matcher)
           Get the names of all of the Job s that matcher the given groupMatcher.
protected  java.util.Set<JobKey> getJobNames(java.sql.Connection conn, GroupMatcher<JobKey> matcher)
           
protected  Semaphore getLockHandler()
           
protected  org.slf4j.Logger getLog()
           
 boolean getMakeThreadsDaemons()
          Get whether the threads spawned by this JobStore should be marked as daemon.
 int getMaxMisfiresToHandleAtATime()
           Get the maximum number of misfired triggers that the misfire handling thread will try to recover at one time (within one transaction).
 long getMisfireThreshold()
           
protected  long getMisfireTime()
           
protected abstract  java.sql.Connection getNonManagedTXConnection()
           
 int getNumberOfCalendars()
           Get the number of Calendar s that are stored in the JobsStore.
protected  int getNumberOfCalendars(java.sql.Connection conn)
           
 int getNumberOfJobs()
           Get the number of Job s that are stored in the JobStore.
protected  int getNumberOfJobs(java.sql.Connection conn)
           
 int getNumberOfTriggers()
           Get the number of Trigger s that are stored in the JobsStore.
protected  int getNumberOfTriggers(java.sql.Connection conn)
           
 java.util.Set<java.lang.String> getPausedTriggerGroups()
           
 java.util.Set<java.lang.String> getPausedTriggerGroups(java.sql.Connection conn)
           Pause all of the Triggers in the given group.
 java.lang.String getSelectWithLockSQL()
           
 java.lang.String getTablePrefix()
           Get the prefix that should be pre-pended to all table names.
 org.quartz.spi.ThreadExecutor getThreadExecutor()
           
 java.util.List<java.lang.String> getTriggerGroupNames()
           Get the names of all of the Trigger groups.
protected  java.util.List<java.lang.String> getTriggerGroupNames(java.sql.Connection conn)
           
 java.util.Set<TriggerKey> getTriggerKeys(GroupMatcher<TriggerKey> matcher)
           Get the names of all of the Trigger s that match the given group Matcher.
protected  java.util.Set<TriggerKey> getTriggerNames(java.sql.Connection conn, GroupMatcher<TriggerKey> matcher)
           
protected  java.util.List<org.quartz.spi.OperableTrigger> getTriggersForJob(java.sql.Connection conn, JobKey key)
           
 java.util.List<org.quartz.spi.OperableTrigger> getTriggersForJob(JobKey jobKey)
           Get all of the Triggers that are associated to the given Job.
 Trigger.TriggerState getTriggerState(java.sql.Connection conn, TriggerKey key)
           
 Trigger.TriggerState getTriggerState(TriggerKey triggerKey)
           Get the current state of the identified Trigger.
 boolean getUseDBLocks()
           Get whether this instance should use database-based thread synchronization.
 void initialize(org.quartz.spi.ClassLoadHelper loadHelper, org.quartz.spi.SchedulerSignaler signaler)
           Called by the QuartzScheduler before the JobStore is used, in order to give it a chance to initialize.
 boolean isAcquireTriggersWithinLock()
          Whether or not the query and update to acquire a Trigger for firing should be performed after obtaining an explicit DB lock (to avoid possible race conditions on the trigger's db row).
 boolean isClustered()
           Get whether this instance is part of a cluster.
 boolean isDontSetAutoCommitFalse()
           
 boolean isLockOnInsert()
           
 boolean isThreadsInheritInitializersClassLoadContext()
          Get whether to set the class load context of spawned threads to that of the initializing thread.
 boolean isTxIsolationLevelSerializable()
           
protected  boolean jobExists(java.sql.Connection conn, JobKey jobKey)
           Check existence of a given job.
protected  void logWarnIfNonZero(int val, java.lang.String warning)
           
 void pauseAll()
           Pause all triggers - equivalent of calling pauseTriggerGroup(group) on every group.
 void pauseAll(java.sql.Connection conn)
           Pause all triggers - equivalent of calling pauseTriggerGroup(group) on every group.
 void pauseJob(JobKey jobKey)
           Pause the Job with the given name - by pausing all of its current Triggers.
 java.util.Set<java.lang.String> pauseJobs(GroupMatcher<JobKey> matcher)
           Pause all of the Jobs matching the given groupMatcher - by pausing all of their Triggers.
 void pauseTrigger(java.sql.Connection conn, TriggerKey triggerKey)
           Pause the Trigger with the given name.
 void pauseTrigger(TriggerKey triggerKey)
           Pause the Trigger with the given name.
 java.util.Set<java.lang.String> pauseTriggerGroup(java.sql.Connection conn, GroupMatcher<TriggerKey> matcher)
           Pause all of the Triggers matching the given groupMatcher.
 java.util.Set<java.lang.String> pauseTriggers(GroupMatcher<TriggerKey> matcher)
           Pause all of the Triggers matching the given groupMatcher.
protected  void recoverJobs()
          Recover any failed or misfired jobs and clean up the data store as appropriate.
protected  void recoverJobs(java.sql.Connection conn)
           Will recover any failed or misfired jobs and clean up the data store as appropriate.
protected  JobStoreSupport.RecoverMisfiredJobsResult recoverMisfiredJobs(java.sql.Connection conn, boolean recovering)
           
protected  void releaseAcquiredTrigger(java.sql.Connection conn, org.quartz.spi.OperableTrigger trigger)
           
 void releaseAcquiredTrigger(org.quartz.spi.OperableTrigger trigger)
           Inform the JobStore that the scheduler no longer plans to fire the given Trigger, that it had previously acquired (reserved).
protected  void releaseLock(java.sql.Connection conn, java.lang.String lockName, boolean doIt)
           
protected  boolean removeCalendar(java.sql.Connection conn, java.lang.String calName)
           
 boolean removeCalendar(java.lang.String calName)
           Remove (delete) the Calendar with the given name.
protected  boolean removeJob(java.sql.Connection conn, JobKey jobKey, boolean activeDeleteSafe)
           
 boolean removeJob(JobKey jobKey)
           Remove (delete) the Job with the given name, and any Trigger s that reference it.
 boolean removeJobs(java.util.List<JobKey> jobKeys)
           
protected  boolean removeTrigger(java.sql.Connection conn, TriggerKey key)
           
 boolean removeTrigger(TriggerKey triggerKey)
           Remove (delete) the Trigger with the given name.
 boolean removeTriggers(java.util.List<TriggerKey> triggerKeys)
           
protected  boolean replaceTrigger(java.sql.Connection conn, TriggerKey key, org.quartz.spi.OperableTrigger newTrigger)
           
 boolean replaceTrigger(TriggerKey triggerKey, org.quartz.spi.OperableTrigger newTrigger)
           
 void resumeAll()
           Resume (un-pause) all triggers - equivalent of calling resumeTriggerGroup(group) on every group.
 void resumeAll(java.sql.Connection conn)
          protected
 void resumeJob(JobKey jobKey)
           Resume (un-pause) the Job with the given name.
 java.util.Set<java.lang.String> resumeJobs(GroupMatcher<JobKey> matcher)
           Resume (un-pause) all of the Jobs in the given group.
 void resumeTrigger(java.sql.Connection conn, TriggerKey key)
           Resume (un-pause) the Trigger with the given name.
 void resumeTrigger(TriggerKey triggerKey)
           Resume (un-pause) the Trigger with the given name.
 java.util.Set<java.lang.String> resumeTriggerGroup(java.sql.Connection conn, GroupMatcher<TriggerKey> matcher)
           Resume (un-pause) all of the Triggers matching the given groupMatcher.
 java.util.Set<java.lang.String> resumeTriggers(GroupMatcher<TriggerKey> matcher)
           Resume (un-pause) all of the Triggers matching the given groupMatcher.
protected  Calendar retrieveCalendar(java.sql.Connection conn, java.lang.String calName)
           
 Calendar retrieveCalendar(java.lang.String calName)
           Retrieve the given Trigger.
protected  JobDetail retrieveJob(java.sql.Connection conn, JobKey key)
           
 JobDetail retrieveJob(JobKey jobKey)
           Retrieve the JobDetail for the given Job.
protected  org.quartz.spi.OperableTrigger retrieveTrigger(java.sql.Connection conn, TriggerKey key)
           
 org.quartz.spi.OperableTrigger retrieveTrigger(TriggerKey triggerKey)
           Retrieve the given Trigger.
protected  void rollbackConnection(java.sql.Connection conn)
          Rollback the supplied connection.
 void schedulerPaused()
           
 void schedulerResumed()
           
 void schedulerStarted()
           
 void setAcquireTriggersWithinLock(boolean acquireTriggersWithinLock)
          Whether or not the query and update to acquire a Trigger for firing should be performed after obtaining an explicit DB lock.
 void setClusterCheckinInterval(long l)
           Set the frequency (in milliseconds) at which this instance "checks-in" with the other instances of the cluster.
 void setDataSource(java.lang.String dsName)
           Set the name of the DataSource that should be used for performing database functions.
 void setDbRetryInterval(long dbRetryInterval)
           
 void setDontSetAutoCommitFalse(boolean b)
          Don't call set autocommit(false) on connections obtained from the DataSource.
 void setDoubleCheckLockMisfireHandler(boolean doubleCheckLockMisfireHandler)
          Set whether to check to see if there are Triggers that have misfired before actually acquiring the lock to recover them.
 void setDriverDelegateClass(java.lang.String delegateClassName)
           Set the JDBC driver delegate class.
 void setDriverDelegateInitString(java.lang.String delegateInitString)
           Set the JDBC driver delegate's initialization string.
 void setInstanceId(java.lang.String instanceId)
           Set the instance Id of the Scheduler (must be unique within a cluster).
 void setInstanceName(java.lang.String instanceName)
          Set the instance name of the Scheduler (must be unique within this server instance).
 void setIsClustered(boolean isClustered)
           Set whether this instance is part of a cluster.
 void setLockHandler(Semaphore lockHandler)
           
 void setLockOnInsert(boolean lockOnInsert)
          Whether or not to obtain locks when inserting new jobs/triggers.
 void setMakeThreadsDaemons(boolean makeThreadsDaemons)
          Set whether the threads spawned by this JobStore should be marked as daemon.
 void setMaxMisfiresToHandleAtATime(int maxToRecoverAtATime)
           Set the maximum number of misfired triggers that the misfire handling thread will try to recover at one time (within one transaction).
 void setMisfireThreshold(long misfireThreshold)
          The the number of milliseconds by which a trigger must have missed its next-fire-time, in order for it to be considered "misfired" and thus have its misfire instruction applied.
 void setSelectWithLockSQL(java.lang.String string)
           set the SQL statement to use to select and lock a row in the "locks" table.
 void setTablePrefix(java.lang.String prefix)
           Set the prefix that should be pre-pended to all table names.
 void setThreadExecutor(org.quartz.spi.ThreadExecutor threadExecutor)
           
 void setThreadPoolSize(int poolSize)
           
 void setThreadsInheritInitializersClassLoadContext(boolean threadsInheritInitializersClassLoadContext)
          Set whether to set the class load context of spawned threads to that of the initializing thread.
 void setTxIsolationLevelSerializable(boolean b)
          Set the transaction isolation level of DB connections to sequential.
 void setUseDBLocks(boolean useDBLocks)
           Set whether this instance should use database-based thread synchronization.
 void setUseProperties(java.lang.String useProp)
           Set whether String-only properties will be handled in JobDataMaps.
 void shutdown()
           Called by the QuartzScheduler to inform the JobStore that it should free up all of it's resources because the scheduler is shutting down.
protected  void signalSchedulingChangeImmediately(long candidateNewNextFireTime)
           
protected  void signalSchedulingChangeOnTxCompletion(long candidateNewNextFireTime)
           
protected  void storeCalendar(java.sql.Connection conn, java.lang.String calName, Calendar calendar, boolean replaceExisting, boolean updateTriggers)
           
 void storeCalendar(java.lang.String calName, Calendar calendar, boolean replaceExisting, boolean updateTriggers)
           Store the given Calendar.
protected  void storeJob(java.sql.Connection conn, JobDetail newJob, boolean replaceExisting)
           Insert or update a job.
 void storeJob(JobDetail newJob, boolean replaceExisting)
           Store the given JobDetail.
 void storeJobAndTrigger(JobDetail newJob, org.quartz.spi.OperableTrigger newTrigger)
           Store the given JobDetail and Trigger.
 void storeJobsAndTriggers(java.util.Map<JobDetail,java.util.List<Trigger>> triggersAndJobs, boolean replace)
           
protected  void storeTrigger(java.sql.Connection conn, org.quartz.spi.OperableTrigger newTrigger, JobDetail job, boolean replaceExisting, java.lang.String state, boolean forceState, boolean recovering)
           Insert or update a trigger.
 void storeTrigger(org.quartz.spi.OperableTrigger newTrigger, boolean replaceExisting)
           Store the given Trigger.
 boolean supportsPersistence()
           
protected  void triggeredJobComplete(java.sql.Connection conn, org.quartz.spi.OperableTrigger trigger, JobDetail jobDetail, Trigger.CompletedExecutionInstruction triggerInstCode)
           
 void triggeredJobComplete(org.quartz.spi.OperableTrigger trigger, JobDetail jobDetail, Trigger.CompletedExecutionInstruction triggerInstCode)
           Inform the JobStore that the scheduler has completed the firing of the given Trigger (and the execution its associated Job), and that the JobDataMap in the given JobDetail should be updated if the Job is stateful.
protected  boolean triggerExists(java.sql.Connection conn, TriggerKey key)
           Check existence of a given trigger.
protected  org.quartz.spi.TriggerFiredBundle triggerFired(java.sql.Connection conn, org.quartz.spi.OperableTrigger trigger)
           
 java.util.List<org.quartz.spi.TriggerFiredResult> triggersFired(java.util.List<org.quartz.spi.OperableTrigger> triggers)
           Inform the JobStore that the scheduler is now firing the given Trigger (executing its associated Job), that it had previously acquired (reserved).
protected  boolean updateMisfiredTrigger(java.sql.Connection conn, TriggerKey triggerKey, java.lang.String newStateIfNotComplete, boolean forceState)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LOCK_TRIGGER_ACCESS

protected static final java.lang.String LOCK_TRIGGER_ACCESS
See Also:
Constant Field Values

LOCK_JOB_ACCESS

protected static final java.lang.String LOCK_JOB_ACCESS
See Also:
Constant Field Values

LOCK_CALENDAR_ACCESS

protected static final java.lang.String LOCK_CALENDAR_ACCESS
See Also:
Constant Field Values

LOCK_STATE_ACCESS

protected static final java.lang.String LOCK_STATE_ACCESS
See Also:
Constant Field Values

LOCK_MISFIRE_ACCESS

protected static final java.lang.String LOCK_MISFIRE_ACCESS
See Also:
Constant Field Values

dsName

protected java.lang.String dsName

tablePrefix

protected java.lang.String tablePrefix

useProperties

protected boolean useProperties

instanceId

protected java.lang.String instanceId

instanceName

protected java.lang.String instanceName

delegateClassName

protected java.lang.String delegateClassName

delegateInitString

protected java.lang.String delegateInitString

delegateClass

protected java.lang.Class<? extends DriverDelegate> delegateClass

calendarCache

protected java.util.HashMap<java.lang.String,Calendar> calendarCache

maxToRecoverAtATime

protected int maxToRecoverAtATime

sigChangeForTxCompletion

protected java.lang.ThreadLocal<java.lang.Long> sigChangeForTxCompletion

firstCheckIn

protected boolean firstCheckIn

lastCheckin

protected long lastCheckin
Constructor Detail

JobStoreSupport

public JobStoreSupport()
Method Detail

setDataSource

public void setDataSource(java.lang.String dsName)

Set the name of the DataSource that should be used for performing database functions.


getDataSource

public java.lang.String getDataSource()

Get the name of the DataSource that should be used for performing database functions.


setTablePrefix

public void setTablePrefix(java.lang.String prefix)

Set the prefix that should be pre-pended to all table names.


getTablePrefix

public java.lang.String getTablePrefix()

Get the prefix that should be pre-pended to all table names.


setUseProperties

public void setUseProperties(java.lang.String useProp)

Set whether String-only properties will be handled in JobDataMaps.


canUseProperties

public boolean canUseProperties()

Get whether String-only properties will be handled in JobDataMaps.


setInstanceId

public void setInstanceId(java.lang.String instanceId)

Set the instance Id of the Scheduler (must be unique within a cluster).

Specified by:
setInstanceId in interface org.quartz.spi.JobStore

getInstanceId

public java.lang.String getInstanceId()

Get the instance Id of the Scheduler (must be unique within a cluster).


setInstanceName

public void setInstanceName(java.lang.String instanceName)
Set the instance name of the Scheduler (must be unique within this server instance).

Specified by:
setInstanceName in interface org.quartz.spi.JobStore

setThreadPoolSize

public void setThreadPoolSize(int poolSize)
Specified by:
setThreadPoolSize in interface org.quartz.spi.JobStore

setThreadExecutor

public void setThreadExecutor(org.quartz.spi.ThreadExecutor threadExecutor)

getThreadExecutor

public org.quartz.spi.ThreadExecutor getThreadExecutor()

getInstanceName

public java.lang.String getInstanceName()
Get the instance name of the Scheduler (must be unique within this server instance).


getEstimatedTimeToReleaseAndAcquireTrigger

public long getEstimatedTimeToReleaseAndAcquireTrigger()
Specified by:
getEstimatedTimeToReleaseAndAcquireTrigger in interface org.quartz.spi.JobStore

setIsClustered

public void setIsClustered(boolean isClustered)

Set whether this instance is part of a cluster.


isClustered

public boolean isClustered()

Get whether this instance is part of a cluster.

Specified by:
isClustered in interface org.quartz.spi.JobStore

getClusterCheckinInterval

public long getClusterCheckinInterval()

Get the frequency (in milliseconds) at which this instance "checks-in" with the other instances of the cluster. -- Affects the rate of detecting failed instances.


setClusterCheckinInterval

public void setClusterCheckinInterval(long l)

Set the frequency (in milliseconds) at which this instance "checks-in" with the other instances of the cluster. -- Affects the rate of detecting failed instances.


getMaxMisfiresToHandleAtATime

public int getMaxMisfiresToHandleAtATime()

Get the maximum number of misfired triggers that the misfire handling thread will try to recover at one time (within one transaction). The default is 20.


setMaxMisfiresToHandleAtATime

public void setMaxMisfiresToHandleAtATime(int maxToRecoverAtATime)

Set the maximum number of misfired triggers that the misfire handling thread will try to recover at one time (within one transaction). The default is 20.


getDbRetryInterval

public long getDbRetryInterval()
Returns:
Returns the dbRetryInterval.

setDbRetryInterval

public void setDbRetryInterval(long dbRetryInterval)
Parameters:
dbRetryInterval - The dbRetryInterval to set.

setUseDBLocks

public void setUseDBLocks(boolean useDBLocks)

Set whether this instance should use database-based thread synchronization.


getUseDBLocks

public boolean getUseDBLocks()

Get whether this instance should use database-based thread synchronization.


isLockOnInsert

public boolean isLockOnInsert()

setLockOnInsert

public void setLockOnInsert(boolean lockOnInsert)
Whether or not to obtain locks when inserting new jobs/triggers. Defaults to true, which is safest - some db's (such as MS SQLServer) seem to require this to avoid deadlocks under high load, while others seem to do fine without.

Setting this property to false will provide a significant performance increase during the addition of new jobs and triggers.

Parameters:
lockOnInsert -

getMisfireThreshold

public long getMisfireThreshold()

setMisfireThreshold

public void setMisfireThreshold(long misfireThreshold)
The the number of milliseconds by which a trigger must have missed its next-fire-time, in order for it to be considered "misfired" and thus have its misfire instruction applied.

Parameters:
misfireThreshold -

isDontSetAutoCommitFalse

public boolean isDontSetAutoCommitFalse()

setDontSetAutoCommitFalse

public void setDontSetAutoCommitFalse(boolean b)
Don't call set autocommit(false) on connections obtained from the DataSource. This can be helpfull in a few situations, such as if you have a driver that complains if it is called when it is already off.

Parameters:
b -

isTxIsolationLevelSerializable

public boolean isTxIsolationLevelSerializable()

setTxIsolationLevelSerializable

public void setTxIsolationLevelSerializable(boolean b)
Set the transaction isolation level of DB connections to sequential.

Parameters:
b -

isAcquireTriggersWithinLock

public boolean isAcquireTriggersWithinLock()
Whether or not the query and update to acquire a Trigger for firing should be performed after obtaining an explicit DB lock (to avoid possible race conditions on the trigger's db row). This is the behavior prior to Quartz 1.6.3, but is considered unnecessary for most databases (due to the nature of the SQL update that is performed), and therefore a superfluous performance hit.


setAcquireTriggersWithinLock

public void setAcquireTriggersWithinLock(boolean acquireTriggersWithinLock)
Whether or not the query and update to acquire a Trigger for firing should be performed after obtaining an explicit DB lock. This is the behavior prior to Quartz 1.6.3, but is considered unnecessary for most databases, and therefore a superfluous performance hit.


setDriverDelegateClass

public void setDriverDelegateClass(java.lang.String delegateClassName)
                            throws InvalidConfigurationException

Set the JDBC driver delegate class.

Parameters:
delegateClassName - the delegate class name
Throws:
InvalidConfigurationException

getDriverDelegateClass

public java.lang.String getDriverDelegateClass()

Get the JDBC driver delegate class name.

Returns:
the delegate class name

setDriverDelegateInitString

public void setDriverDelegateInitString(java.lang.String delegateInitString)
                                 throws InvalidConfigurationException

Set the JDBC driver delegate's initialization string.

Parameters:
delegateClassName - the delegate init string
Throws:
InvalidConfigurationException

getDriverDelegateInitString

public java.lang.String getDriverDelegateInitString()

Get the JDBC driver delegate's initialization string.

Returns:
the delegate init string

getSelectWithLockSQL

public java.lang.String getSelectWithLockSQL()

setSelectWithLockSQL

public void setSelectWithLockSQL(java.lang.String string)

set the SQL statement to use to select and lock a row in the "locks" table.

See Also:
StdRowLockSemaphore

getClassLoadHelper

protected org.quartz.spi.ClassLoadHelper getClassLoadHelper()

getMakeThreadsDaemons

public boolean getMakeThreadsDaemons()
Get whether the threads spawned by this JobStore should be marked as daemon. Possible threads include the MisfireHandler and the ClusterManager.

See Also:
Thread.setDaemon(boolean)

setMakeThreadsDaemons

public void setMakeThreadsDaemons(boolean makeThreadsDaemons)
Set whether the threads spawned by this JobStore should be marked as daemon. Possible threads include the MisfireHandler and the ClusterManager.

See Also:
Thread.setDaemon(boolean)

isThreadsInheritInitializersClassLoadContext

public boolean isThreadsInheritInitializersClassLoadContext()
Get whether to set the class load context of spawned threads to that of the initializing thread.


setThreadsInheritInitializersClassLoadContext

public void setThreadsInheritInitializersClassLoadContext(boolean threadsInheritInitializersClassLoadContext)
Set whether to set the class load context of spawned threads to that of the initializing thread.


getDoubleCheckLockMisfireHandler

public boolean getDoubleCheckLockMisfireHandler()
Get whether to check to see if there are Triggers that have misfired before actually acquiring the lock to recover them. This should be set to false if the majority of the time, there are are misfired Triggers.


setDoubleCheckLockMisfireHandler

public void setDoubleCheckLockMisfireHandler(boolean doubleCheckLockMisfireHandler)
Set whether to check to see if there are Triggers that have misfired before actually acquiring the lock to recover them. This should be set to false if the majority of the time, there are are misfired Triggers.


getLog

protected org.slf4j.Logger getLog()

initialize

public void initialize(org.quartz.spi.ClassLoadHelper loadHelper,
                       org.quartz.spi.SchedulerSignaler signaler)
                throws SchedulerConfigException

Called by the QuartzScheduler before the JobStore is used, in order to give it a chance to initialize.

Specified by:
initialize in interface org.quartz.spi.JobStore
Throws:
SchedulerConfigException

schedulerStarted

public void schedulerStarted()
                      throws SchedulerException
Specified by:
schedulerStarted in interface org.quartz.spi.JobStore
Throws:
SchedulerException
See Also:
JobStore.schedulerStarted()

schedulerPaused

public void schedulerPaused()
Specified by:
schedulerPaused in interface org.quartz.spi.JobStore

schedulerResumed

public void schedulerResumed()
Specified by:
schedulerResumed in interface org.quartz.spi.JobStore

shutdown

public void shutdown()

Called by the QuartzScheduler to inform the JobStore that it should free up all of it's resources because the scheduler is shutting down.

Specified by:
shutdown in interface org.quartz.spi.JobStore

supportsPersistence

public boolean supportsPersistence()
Specified by:
supportsPersistence in interface org.quartz.spi.JobStore

getNonManagedTXConnection

protected abstract java.sql.Connection getNonManagedTXConnection()
                                                          throws JobPersistenceException
Throws:
JobPersistenceException

getAttributeRestoringConnection

protected java.sql.Connection getAttributeRestoringConnection(java.sql.Connection conn)
Wrap the given Connection in a Proxy such that attributes that might be set will be restored before the connection is closed (and potentially restored to a pool).


getConnection

protected java.sql.Connection getConnection()
                                     throws JobPersistenceException
Throws:
JobPersistenceException

releaseLock

protected void releaseLock(java.sql.Connection conn,
                           java.lang.String lockName,
                           boolean doIt)

recoverJobs

protected void recoverJobs()
                    throws JobPersistenceException
Recover any failed or misfired jobs and clean up the data store as appropriate.

Throws:
JobPersistenceException - if jobs could not be recovered

recoverJobs

protected void recoverJobs(java.sql.Connection conn)
                    throws JobPersistenceException

Will recover any failed or misfired jobs and clean up the data store as appropriate.

Throws:
JobPersistenceException - if jobs could not be recovered

getMisfireTime

protected long getMisfireTime()

recoverMisfiredJobs

protected JobStoreSupport.RecoverMisfiredJobsResult recoverMisfiredJobs(java.sql.Connection conn,
                                                                        boolean recovering)
                                                                 throws JobPersistenceException,
                                                                        java.sql.SQLException
Throws:
JobPersistenceException
java.sql.SQLException

updateMisfiredTrigger

protected boolean updateMisfiredTrigger(java.sql.Connection conn,
                                        TriggerKey triggerKey,
                                        java.lang.String newStateIfNotComplete,
                                        boolean forceState)
                                 throws JobPersistenceException
Throws:
JobPersistenceException

storeJobAndTrigger

public void storeJobAndTrigger(JobDetail newJob,
                               org.quartz.spi.OperableTrigger newTrigger)
                        throws ObjectAlreadyExistsException,
                               JobPersistenceException

Store the given JobDetail and Trigger.

Specified by:
storeJobAndTrigger in interface org.quartz.spi.JobStore
Parameters:
newJob - The JobDetail to be stored.
newTrigger - The Trigger to be stored.
Throws:
ObjectAlreadyExistsException - if a Job with the same name/group already exists.
JobPersistenceException

storeJob

public void storeJob(JobDetail newJob,
                     boolean replaceExisting)
              throws ObjectAlreadyExistsException,
                     JobPersistenceException

Store the given JobDetail.

Specified by:
storeJob in interface org.quartz.spi.JobStore
Parameters:
newJob - The JobDetail to be stored.
replaceExisting - If true, any Job existing in the JobStore with the same name & group should be over-written.
Throws:
ObjectAlreadyExistsException - if a Job with the same name/group already exists, and replaceExisting is set to false.
JobPersistenceException

storeJob

protected void storeJob(java.sql.Connection conn,
                        JobDetail newJob,
                        boolean replaceExisting)
                 throws ObjectAlreadyExistsException,
                        JobPersistenceException

Insert or update a job.

Throws:
ObjectAlreadyExistsException
JobPersistenceException

jobExists

protected boolean jobExists(java.sql.Connection conn,
                            JobKey jobKey)
                     throws JobPersistenceException

Check existence of a given job.

Throws:
JobPersistenceException

storeTrigger

public void storeTrigger(org.quartz.spi.OperableTrigger newTrigger,
                         boolean replaceExisting)
                  throws ObjectAlreadyExistsException,
                         JobPersistenceException

Store the given Trigger.

Specified by:
storeTrigger in interface org.quartz.spi.JobStore
Parameters:
newTrigger - The Trigger to be stored.
replaceExisting - If true, any Trigger existing in the JobStore with the same name & group should be over-written.
Throws:
ObjectAlreadyExistsException - if a Trigger with the same name/group already exists, and replaceExisting is set to false.
JobPersistenceException

storeTrigger

protected void storeTrigger(java.sql.Connection conn,
                            org.quartz.spi.OperableTrigger newTrigger,
                            JobDetail job,
                            boolean replaceExisting,
                            java.lang.String state,
                            boolean forceState,
                            boolean recovering)
                     throws ObjectAlreadyExistsException,
                            JobPersistenceException

Insert or update a trigger.

Throws:
ObjectAlreadyExistsException
JobPersistenceException

triggerExists

protected boolean triggerExists(java.sql.Connection conn,
                                TriggerKey key)
                         throws JobPersistenceException

Check existence of a given trigger.

Throws:
JobPersistenceException

removeJob

public boolean removeJob(JobKey jobKey)
                  throws JobPersistenceException

Remove (delete) the Job with the given name, and any Trigger s that reference it.

If removal of the Job results in an empty group, the group should be removed from the JobStore's list of known group names.

Specified by:
removeJob in interface org.quartz.spi.JobStore
Returns:
true if a Job with the given name & group was found and removed from the store.
Throws:
JobPersistenceException

removeJob

protected boolean removeJob(java.sql.Connection conn,
                            JobKey jobKey,
                            boolean activeDeleteSafe)
                     throws JobPersistenceException
Throws:
JobPersistenceException

removeJobs

public boolean removeJobs(java.util.List<JobKey> jobKeys)
                   throws JobPersistenceException
Specified by:
removeJobs in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

removeTriggers

public boolean removeTriggers(java.util.List<TriggerKey> triggerKeys)
                       throws JobPersistenceException
Specified by:
removeTriggers in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

storeJobsAndTriggers

public void storeJobsAndTriggers(java.util.Map<JobDetail,java.util.List<Trigger>> triggersAndJobs,
                                 boolean replace)
                          throws ObjectAlreadyExistsException,
                                 JobPersistenceException
Specified by:
storeJobsAndTriggers in interface org.quartz.spi.JobStore
Throws:
ObjectAlreadyExistsException
JobPersistenceException

retrieveJob

public JobDetail retrieveJob(JobKey jobKey)
                      throws JobPersistenceException

Retrieve the JobDetail for the given Job.

Specified by:
retrieveJob in interface org.quartz.spi.JobStore
Returns:
The desired Job, or null if there is no match.
Throws:
JobPersistenceException

retrieveJob

protected JobDetail retrieveJob(java.sql.Connection conn,
                                JobKey key)
                         throws JobPersistenceException
Throws:
JobPersistenceException

removeTrigger

public boolean removeTrigger(TriggerKey triggerKey)
                      throws JobPersistenceException

Remove (delete) the Trigger with the given name.

If removal of the Trigger results in an empty group, the group should be removed from the JobStore's list of known group names.

If removal of the Trigger results in an 'orphaned' Job that is not 'durable', then the Job should be deleted also.

Specified by:
removeTrigger in interface org.quartz.spi.JobStore
Returns:
true if a Trigger with the given name & group was found and removed from the store.
Throws:
JobPersistenceException

removeTrigger

protected boolean removeTrigger(java.sql.Connection conn,
                                TriggerKey key)
                         throws JobPersistenceException
Throws:
JobPersistenceException

replaceTrigger

public boolean replaceTrigger(TriggerKey triggerKey,
                              org.quartz.spi.OperableTrigger newTrigger)
                       throws JobPersistenceException
Specified by:
replaceTrigger in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
org.quartz.spi.JobStore#replaceTrigger(org.quartz.core.SchedulingContext, java.lang.String, java.lang.String, org.quartz.Trigger)

replaceTrigger

protected boolean replaceTrigger(java.sql.Connection conn,
                                 TriggerKey key,
                                 org.quartz.spi.OperableTrigger newTrigger)
                          throws JobPersistenceException
Throws:
JobPersistenceException

retrieveTrigger

public org.quartz.spi.OperableTrigger retrieveTrigger(TriggerKey triggerKey)
                                               throws JobPersistenceException

Retrieve the given Trigger.

Specified by:
retrieveTrigger in interface org.quartz.spi.JobStore
Returns:
The desired Trigger, or null if there is no match.
Throws:
JobPersistenceException

retrieveTrigger

protected org.quartz.spi.OperableTrigger retrieveTrigger(java.sql.Connection conn,
                                                         TriggerKey key)
                                                  throws JobPersistenceException
Throws:
JobPersistenceException

getTriggerState

public Trigger.TriggerState getTriggerState(TriggerKey triggerKey)
                                     throws JobPersistenceException

Get the current state of the identified Trigger.

Specified by:
getTriggerState in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
Trigger#NORMAL, Trigger#PAUSED, Trigger#COMPLETE, Trigger#ERROR, Trigger#NONE

getTriggerState

public Trigger.TriggerState getTriggerState(java.sql.Connection conn,
                                            TriggerKey key)
                                     throws JobPersistenceException
Throws:
JobPersistenceException

storeCalendar

public void storeCalendar(java.lang.String calName,
                          Calendar calendar,
                          boolean replaceExisting,
                          boolean updateTriggers)
                   throws ObjectAlreadyExistsException,
                          JobPersistenceException

Store the given Calendar.

Specified by:
storeCalendar in interface org.quartz.spi.JobStore
Parameters:
calName - The name of the calendar.
calendar - The Calendar to be stored.
replaceExisting - If true, any Calendar existing in the JobStore with the same name & group should be over-written.
Throws:
ObjectAlreadyExistsException - if a Calendar with the same name already exists, and replaceExisting is set to false.
JobPersistenceException

storeCalendar

protected void storeCalendar(java.sql.Connection conn,
                             java.lang.String calName,
                             Calendar calendar,
                             boolean replaceExisting,
                             boolean updateTriggers)
                      throws ObjectAlreadyExistsException,
                             JobPersistenceException
Throws:
ObjectAlreadyExistsException
JobPersistenceException

calendarExists

protected boolean calendarExists(java.sql.Connection conn,
                                 java.lang.String calName)
                          throws JobPersistenceException
Throws:
JobPersistenceException

removeCalendar

public boolean removeCalendar(java.lang.String calName)
                       throws JobPersistenceException

Remove (delete) the Calendar with the given name.

If removal of the Calendar would result in Triggers pointing to non-existent calendars, then a JobPersistenceException will be thrown.

*

Specified by:
removeCalendar in interface org.quartz.spi.JobStore
Parameters:
calName - The name of the Calendar to be removed.
Returns:
true if a Calendar with the given name was found and removed from the store.
Throws:
JobPersistenceException

removeCalendar

protected boolean removeCalendar(java.sql.Connection conn,
                                 java.lang.String calName)
                          throws JobPersistenceException
Throws:
JobPersistenceException

retrieveCalendar

public Calendar retrieveCalendar(java.lang.String calName)
                          throws JobPersistenceException

Retrieve the given Trigger.

Specified by:
retrieveCalendar in interface org.quartz.spi.JobStore
Parameters:
calName - The name of the Calendar to be retrieved.
Returns:
The desired Calendar, or null if there is no match.
Throws:
JobPersistenceException

retrieveCalendar

protected Calendar retrieveCalendar(java.sql.Connection conn,
                                    java.lang.String calName)
                             throws JobPersistenceException
Throws:
JobPersistenceException

getNumberOfJobs

public int getNumberOfJobs()
                    throws JobPersistenceException

Get the number of Job s that are stored in the JobStore.

Specified by:
getNumberOfJobs in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

getNumberOfJobs

protected int getNumberOfJobs(java.sql.Connection conn)
                       throws JobPersistenceException
Throws:
JobPersistenceException

getNumberOfTriggers

public int getNumberOfTriggers()
                        throws JobPersistenceException

Get the number of Trigger s that are stored in the JobsStore.

Specified by:
getNumberOfTriggers in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

getNumberOfTriggers

protected int getNumberOfTriggers(java.sql.Connection conn)
                           throws JobPersistenceException
Throws:
JobPersistenceException

getNumberOfCalendars

public int getNumberOfCalendars()
                         throws JobPersistenceException

Get the number of Calendar s that are stored in the JobsStore.

Specified by:
getNumberOfCalendars in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

getNumberOfCalendars

protected int getNumberOfCalendars(java.sql.Connection conn)
                            throws JobPersistenceException
Throws:
JobPersistenceException

getJobKeys

public java.util.Set<JobKey> getJobKeys(GroupMatcher<JobKey> matcher)
                                 throws JobPersistenceException

Get the names of all of the Job s that matcher the given groupMatcher.

If there are no jobs in the given group name, the result should be an empty Set

Specified by:
getJobKeys in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

getJobNames

protected java.util.Set<JobKey> getJobNames(java.sql.Connection conn,
                                            GroupMatcher<JobKey> matcher)
                                     throws JobPersistenceException
Throws:
JobPersistenceException

checkExists

public boolean checkExists(JobKey jobKey)
                    throws JobPersistenceException
Determine whether a Job with the given identifier already exists within the scheduler.

Specified by:
checkExists in interface org.quartz.spi.JobStore
Parameters:
jobKey - the identifier to check for
Returns:
true if a Job exists with the given identifier
Throws:
SchedulerException
JobPersistenceException

checkExists

protected boolean checkExists(java.sql.Connection conn,
                              JobKey jobKey)
                       throws JobPersistenceException
Throws:
JobPersistenceException

checkExists

public boolean checkExists(TriggerKey triggerKey)
                    throws JobPersistenceException
Determine whether a Trigger with the given identifier already exists within the scheduler.

Specified by:
checkExists in interface org.quartz.spi.JobStore
Parameters:
triggerKey - the identifier to check for
Returns:
true if a Trigger exists with the given identifier
Throws:
SchedulerException
JobPersistenceException

checkExists

protected boolean checkExists(java.sql.Connection conn,
                              TriggerKey triggerKey)
                       throws JobPersistenceException
Throws:
JobPersistenceException

clearAllSchedulingData

public void clearAllSchedulingData()
                            throws JobPersistenceException
Clear (delete!) all scheduling data - all Jobs, Triggers Calendars.

Specified by:
clearAllSchedulingData in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

clearAllSchedulingData

protected void clearAllSchedulingData(java.sql.Connection conn)
                               throws JobPersistenceException
Throws:
JobPersistenceException

getTriggerKeys

public java.util.Set<TriggerKey> getTriggerKeys(GroupMatcher<TriggerKey> matcher)
                                         throws JobPersistenceException

Get the names of all of the Trigger s that match the given group Matcher.

If there are no triggers in the given group name, the result should be a an empty Set (not null).

Specified by:
getTriggerKeys in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

getTriggerNames

protected java.util.Set<TriggerKey> getTriggerNames(java.sql.Connection conn,
                                                    GroupMatcher<TriggerKey> matcher)
                                             throws JobPersistenceException
Throws:
JobPersistenceException

getJobGroupNames

public java.util.List<java.lang.String> getJobGroupNames()
                                                  throws JobPersistenceException

Get the names of all of the Job groups.

If there are no known group names, the result should be a zero-length array (not null).

Specified by:
getJobGroupNames in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

getJobGroupNames

protected java.util.List<java.lang.String> getJobGroupNames(java.sql.Connection conn)
                                                     throws JobPersistenceException
Throws:
JobPersistenceException

getTriggerGroupNames

public java.util.List<java.lang.String> getTriggerGroupNames()
                                                      throws JobPersistenceException

Get the names of all of the Trigger groups.

If there are no known group names, the result should be a zero-length array (not null).

Specified by:
getTriggerGroupNames in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

getTriggerGroupNames

protected java.util.List<java.lang.String> getTriggerGroupNames(java.sql.Connection conn)
                                                         throws JobPersistenceException
Throws:
JobPersistenceException

getCalendarNames

public java.util.List<java.lang.String> getCalendarNames()
                                                  throws JobPersistenceException

Get the names of all of the Calendar s in the JobStore.

If there are no Calendars in the given group name, the result should be a zero-length array (not null).

Specified by:
getCalendarNames in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

getCalendarNames

protected java.util.List<java.lang.String> getCalendarNames(java.sql.Connection conn)
                                                     throws JobPersistenceException
Throws:
JobPersistenceException

getTriggersForJob

public java.util.List<org.quartz.spi.OperableTrigger> getTriggersForJob(JobKey jobKey)
                                                                 throws JobPersistenceException

Get all of the Triggers that are associated to the given Job.

If there are no matches, a zero-length array should be returned.

Specified by:
getTriggersForJob in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

getTriggersForJob

protected java.util.List<org.quartz.spi.OperableTrigger> getTriggersForJob(java.sql.Connection conn,
                                                                           JobKey key)
                                                                    throws JobPersistenceException
Throws:
JobPersistenceException

pauseTrigger

public void pauseTrigger(TriggerKey triggerKey)
                  throws JobPersistenceException

Pause the Trigger with the given name.

Specified by:
pauseTrigger in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
#resumeTrigger(SchedulingContext, String, String)

pauseTrigger

public void pauseTrigger(java.sql.Connection conn,
                         TriggerKey triggerKey)
                  throws JobPersistenceException

Pause the Trigger with the given name.

Throws:
JobPersistenceException
See Also:
#resumeTrigger(Connection, SchedulingContext, String, String)

pauseJob

public void pauseJob(JobKey jobKey)
              throws JobPersistenceException

Pause the Job with the given name - by pausing all of its current Triggers.

Specified by:
pauseJob in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
#resumeJob(SchedulingContext, String, String)

pauseJobs

public java.util.Set<java.lang.String> pauseJobs(GroupMatcher<JobKey> matcher)
                                          throws JobPersistenceException

Pause all of the Jobs matching the given groupMatcher - by pausing all of their Triggers.

Specified by:
pauseJobs in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
#resumeJobGroup(SchedulingContext, String)

checkBlockedState

protected java.lang.String checkBlockedState(java.sql.Connection conn,
                                             JobKey jobKey,
                                             java.lang.String currentState)
                                      throws JobPersistenceException
Determines if a Trigger for the given job should be blocked. State can only transition to STATE_PAUSED_BLOCKED/BLOCKED from PAUSED/STATE_WAITING respectively.

Returns:
STATE_PAUSED_BLOCKED, BLOCKED, or the currentState.
Throws:
JobPersistenceException

resumeTrigger

public void resumeTrigger(TriggerKey triggerKey)
                   throws JobPersistenceException

Resume (un-pause) the Trigger with the given name.

If the Trigger missed one or more fire-times, then the Trigger's misfire instruction will be applied.

Specified by:
resumeTrigger in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
#pauseTrigger(SchedulingContext, String, String)

resumeTrigger

public void resumeTrigger(java.sql.Connection conn,
                          TriggerKey key)
                   throws JobPersistenceException

Resume (un-pause) the Trigger with the given name.

If the Trigger missed one or more fire-times, then the Trigger's misfire instruction will be applied.

Throws:
JobPersistenceException
See Also:
#pauseTrigger(Connection, SchedulingContext, String, String)

resumeJob

public void resumeJob(JobKey jobKey)
               throws JobPersistenceException

Resume (un-pause) the Job with the given name.

If any of the Job'sTrigger s missed one or more fire-times, then the Trigger's misfire instruction will be applied.

Specified by:
resumeJob in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
#pauseJob(SchedulingContext, String, String)

resumeJobs

public java.util.Set<java.lang.String> resumeJobs(GroupMatcher<JobKey> matcher)
                                           throws JobPersistenceException

Resume (un-pause) all of the Jobs in the given group.

If any of the Job s had Trigger s that missed one or more fire-times, then the Trigger's misfire instruction will be applied.

Specified by:
resumeJobs in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
#pauseJobGroup(SchedulingContext, String)

pauseTriggers

public java.util.Set<java.lang.String> pauseTriggers(GroupMatcher<TriggerKey> matcher)
                                              throws JobPersistenceException

Pause all of the Triggers matching the given groupMatcher.

Specified by:
pauseTriggers in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
#resumeTriggerGroup(SchedulingContext, String)

pauseTriggerGroup

public java.util.Set<java.lang.String> pauseTriggerGroup(java.sql.Connection conn,
                                                         GroupMatcher<TriggerKey> matcher)
                                                  throws JobPersistenceException

Pause all of the Triggers matching the given groupMatcher.

Throws:
JobPersistenceException
See Also:
#resumeTriggerGroup(Connection, SchedulingContext, String)

getPausedTriggerGroups

public java.util.Set<java.lang.String> getPausedTriggerGroups()
                                                       throws JobPersistenceException
Specified by:
getPausedTriggerGroups in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

getPausedTriggerGroups

public java.util.Set<java.lang.String> getPausedTriggerGroups(java.sql.Connection conn)
                                                       throws JobPersistenceException

Pause all of the Triggers in the given group.

Throws:
JobPersistenceException
See Also:
resumeTriggers(org.quartz.impl.matchers.GroupMatcher)

resumeTriggers

public java.util.Set<java.lang.String> resumeTriggers(GroupMatcher<TriggerKey> matcher)
                                               throws JobPersistenceException

Resume (un-pause) all of the Triggers matching the given groupMatcher.

If any Trigger missed one or more fire-times, then the Trigger's misfire instruction will be applied.

Specified by:
resumeTriggers in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
pauseTriggers(org.quartz.impl.matchers.GroupMatcher)

resumeTriggerGroup

public java.util.Set<java.lang.String> resumeTriggerGroup(java.sql.Connection conn,
                                                          GroupMatcher<TriggerKey> matcher)
                                                   throws JobPersistenceException

Resume (un-pause) all of the Triggers matching the given groupMatcher.

If any Trigger missed one or more fire-times, then the Trigger's misfire instruction will be applied.

Throws:
JobPersistenceException
See Also:
pauseTriggers(org.quartz.impl.matchers.GroupMatcher)

pauseAll

public void pauseAll()
              throws JobPersistenceException

Pause all triggers - equivalent of calling pauseTriggerGroup(group) on every group.

When resumeAll() is called (to un-pause), trigger misfire instructions WILL be applied.

Specified by:
pauseAll in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
#resumeAll(SchedulingContext), #pauseTriggerGroup(SchedulingContext, String)

pauseAll

public void pauseAll(java.sql.Connection conn)
              throws JobPersistenceException

Pause all triggers - equivalent of calling pauseTriggerGroup(group) on every group.

When resumeAll() is called (to un-pause), trigger misfire instructions WILL be applied.

Throws:
JobPersistenceException
See Also:
#resumeAll(SchedulingContext), #pauseTriggerGroup(SchedulingContext, String)

resumeAll

public void resumeAll()
               throws JobPersistenceException

Resume (un-pause) all triggers - equivalent of calling resumeTriggerGroup(group) on every group.

If any Trigger missed one or more fire-times, then the Trigger's misfire instruction will be applied.

Specified by:
resumeAll in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
#pauseAll(SchedulingContext)

resumeAll

public void resumeAll(java.sql.Connection conn)
               throws JobPersistenceException
protected

Resume (un-pause) all triggers - equivalent of calling resumeTriggerGroup(group) on every group.

If any Trigger missed one or more fire-times, then the Trigger's misfire instruction will be applied.

Throws:
JobPersistenceException
See Also:
#pauseAll(SchedulingContext)

getFiredTriggerRecordId

protected java.lang.String getFiredTriggerRecordId()

acquireNextTriggers

public java.util.List<org.quartz.spi.OperableTrigger> acquireNextTriggers(long noLaterThan,
                                                                          int maxCount,
                                                                          long timeWindow)
                                                                   throws JobPersistenceException

Get a handle to the next N triggers to be fired, and mark them as 'reserved' by the calling scheduler.

Specified by:
acquireNextTriggers in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException
See Also:
#releaseAcquiredTrigger(SchedulingContext, Trigger)

acquireNextTrigger

protected java.util.List<org.quartz.spi.OperableTrigger> acquireNextTrigger(java.sql.Connection conn,
                                                                            long noLaterThan,
                                                                            int maxCount,
                                                                            long timeWindow)
                                                                     throws JobPersistenceException
Throws:
JobPersistenceException

releaseAcquiredTrigger

public void releaseAcquiredTrigger(org.quartz.spi.OperableTrigger trigger)
                            throws JobPersistenceException

Inform the JobStore that the scheduler no longer plans to fire the given Trigger, that it had previously acquired (reserved).

Specified by:
releaseAcquiredTrigger in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

releaseAcquiredTrigger

protected void releaseAcquiredTrigger(java.sql.Connection conn,
                                      org.quartz.spi.OperableTrigger trigger)
                               throws JobPersistenceException
Throws:
JobPersistenceException

triggersFired

public java.util.List<org.quartz.spi.TriggerFiredResult> triggersFired(java.util.List<org.quartz.spi.OperableTrigger> triggers)
                                                                throws JobPersistenceException

Inform the JobStore that the scheduler is now firing the given Trigger (executing its associated Job), that it had previously acquired (reserved).

Specified by:
triggersFired in interface org.quartz.spi.JobStore
Returns:
null if the trigger or its job or calendar no longer exist, or if the trigger was not successfully put into the 'executing' state.
Throws:
JobPersistenceException

triggerFired

protected org.quartz.spi.TriggerFiredBundle triggerFired(java.sql.Connection conn,
                                                         org.quartz.spi.OperableTrigger trigger)
                                                  throws JobPersistenceException
Throws:
JobPersistenceException

triggeredJobComplete

public void triggeredJobComplete(org.quartz.spi.OperableTrigger trigger,
                                 JobDetail jobDetail,
                                 Trigger.CompletedExecutionInstruction triggerInstCode)
                          throws JobPersistenceException

Inform the JobStore that the scheduler has completed the firing of the given Trigger (and the execution its associated Job), and that the JobDataMap in the given JobDetail should be updated if the Job is stateful.

Specified by:
triggeredJobComplete in interface org.quartz.spi.JobStore
Throws:
JobPersistenceException

triggeredJobComplete

protected void triggeredJobComplete(java.sql.Connection conn,
                                    org.quartz.spi.OperableTrigger trigger,
                                    JobDetail jobDetail,
                                    Trigger.CompletedExecutionInstruction triggerInstCode)
                             throws JobPersistenceException
Throws:
JobPersistenceException

getDelegate

protected DriverDelegate getDelegate()
                              throws NoSuchDelegateException

Get the driver delegate for DB operations.

Throws:
NoSuchDelegateException

getLockHandler

protected Semaphore getLockHandler()

setLockHandler

public void setLockHandler(Semaphore lockHandler)

doRecoverMisfires

protected JobStoreSupport.RecoverMisfiredJobsResult doRecoverMisfires()
                                                               throws JobPersistenceException
Throws:
JobPersistenceException

signalSchedulingChangeOnTxCompletion

protected void signalSchedulingChangeOnTxCompletion(long candidateNewNextFireTime)

clearAndGetSignalSchedulingChangeOnTxCompletion

protected java.lang.Long clearAndGetSignalSchedulingChangeOnTxCompletion()

signalSchedulingChangeImmediately

protected void signalSchedulingChangeImmediately(long candidateNewNextFireTime)

doCheckin

protected boolean doCheckin()
                     throws JobPersistenceException
Throws:
JobPersistenceException

findFailedInstances

protected java.util.List<SchedulerStateRecord> findFailedInstances(java.sql.Connection conn)
                                                            throws JobPersistenceException
Get a list of all scheduler instances in the cluster that may have failed. This includes this scheduler if it is checking in for the first time.

Throws:
JobPersistenceException

calcFailedIfAfter

protected long calcFailedIfAfter(SchedulerStateRecord rec)

clusterCheckIn

protected java.util.List<SchedulerStateRecord> clusterCheckIn(java.sql.Connection conn)
                                                       throws JobPersistenceException
Throws:
JobPersistenceException

clusterRecover

protected void clusterRecover(java.sql.Connection conn,
                              java.util.List<SchedulerStateRecord> failedInstances)
                       throws JobPersistenceException
Throws:
JobPersistenceException

logWarnIfNonZero

protected void logWarnIfNonZero(int val,
                                java.lang.String warning)

cleanupConnection

protected void cleanupConnection(java.sql.Connection conn)

Cleanup the given database connection. This means restoring any modified auto commit or transaction isolation connection attributes, and then closing the underlying connection.

This is separate from closeConnection() because the Spring integration relies on being able to overload closeConnection() and expects the same connection back that it originally returned from the datasource.

See Also:
closeConnection(Connection)

closeConnection

protected void closeConnection(java.sql.Connection conn)
Closes the supplied Connection.

Ignores a null Connection. Any exception thrown trying to close the Connection is logged and ignored.

Parameters:
conn - The Connection to close (Optional).

rollbackConnection

protected void rollbackConnection(java.sql.Connection conn)
Rollback the supplied connection.

Logs any SQLException it gets trying to rollback, but will not propogate the exception lest it mask the exception that caused the caller to need to rollback in the first place.

Parameters:
conn - (Optional)

commitConnection

protected void commitConnection(java.sql.Connection conn)
                         throws JobPersistenceException
Commit the supplied connection

Parameters:
conn - (Optional)
Throws:
JobPersistenceException - thrown if a SQLException occurs when the connection is committed

executeWithoutLock

public java.lang.Object executeWithoutLock(JobStoreSupport.TransactionCallback txCallback)
                                    throws JobPersistenceException
Execute the given callback in a transaction. Depending on the JobStore, the surrounding transaction may be assumed to be already present (managed).

This method just forwards to executeInLock() with a null lockName.

Throws:
JobPersistenceException
See Also:
executeInLock(String, TransactionCallback)

executeInLock

protected void executeInLock(java.lang.String lockName,
                             JobStoreSupport.VoidTransactionCallback txCallback)
                      throws JobPersistenceException
Execute the given callback having aquired the given lock. Depending on the JobStore, the surrounding transaction may be assumed to be already present (managed). This version is just a handy wrapper around executeInLock that doesn't require a return value.

Parameters:
lockName - The name of the lock to aquire, for example "TRIGGER_ACCESS". If null, then no lock is aquired, but the lockCallback is still executed in a transaction.
Throws:
JobPersistenceException
See Also:
executeInLock(String, TransactionCallback)

executeInLock

protected abstract java.lang.Object executeInLock(java.lang.String lockName,
                                                  JobStoreSupport.TransactionCallback txCallback)
                                           throws JobPersistenceException
Execute the given callback having aquired the given lock. Depending on the JobStore, the surrounding transaction may be assumed to be already present (managed).

Parameters:
lockName - The name of the lock to aquire, for example "TRIGGER_ACCESS". If null, then no lock is aquired, but the lockCallback is still executed in a transaction.
Throws:
JobPersistenceException

executeInNonManagedTXLock

protected void executeInNonManagedTXLock(java.lang.String lockName,
                                         JobStoreSupport.VoidTransactionCallback txCallback)
                                  throws JobPersistenceException
Execute the given callback having optionally aquired the given lock. This uses the non-managed transaction connection. This version is just a handy wrapper around executeInNonManagedTXLock that doesn't require a return value.

Parameters:
lockName - The name of the lock to aquire, for example "TRIGGER_ACCESS". If null, then no lock is aquired, but the lockCallback is still executed in a non-managed transaction.
Throws:
JobPersistenceException
See Also:
executeInNonManagedTXLock(String, TransactionCallback)

executeInNonManagedTXLock

protected java.lang.Object executeInNonManagedTXLock(java.lang.String lockName,
                                                     JobStoreSupport.TransactionCallback txCallback)
                                              throws JobPersistenceException
Execute the given callback having optionally aquired the given lock. This uses the non-managed transaction connection.

Parameters:
lockName - The name of the lock to aquire, for example "TRIGGER_ACCESS". If null, then no lock is aquired, but the lockCallback is still executed in a non-managed transaction.
Throws:
JobPersistenceException


Copyright 2001-2011, Terracotta, Inc.