Package org.quartz.impl.jdbcjobstore
Class DBSemaphore
- java.lang.Object
-
- org.quartz.impl.jdbcjobstore.DBSemaphore
-
- All Implemented Interfaces:
Constants
,Semaphore
,StdJDBCConstants
,TablePrefixAware
- Direct Known Subclasses:
StdRowLockSemaphore
,UpdateLockRowSemaphore
public abstract class DBSemaphore extends java.lang.Object implements Semaphore, Constants, StdJDBCConstants, TablePrefixAware
Base class for database based lock handlers for providing thread/resource locking in order to protect resources from being altered by multiple threads at the same time.
-
-
Field Summary
-
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_SCHED_TIME, 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
-
Fields inherited from interface org.quartz.impl.jdbcjobstore.StdJDBCConstants
COUNT_MISFIRED_TRIGGERS_IN_STATE, DELETE_ALL_BLOB_TRIGGERS, DELETE_ALL_CALENDARS, DELETE_ALL_CRON_TRIGGERS, DELETE_ALL_JOB_DETAILS, DELETE_ALL_PAUSED_TRIGGER_GRPS, DELETE_ALL_SIMPLE_TRIGGERS, DELETE_ALL_SIMPROP_TRIGGERS, DELETE_ALL_TRIGGERS, DELETE_BLOB_TRIGGER, DELETE_CALENDAR, DELETE_CRON_TRIGGER, DELETE_FIRED_TRIGGER, DELETE_FIRED_TRIGGERS, DELETE_INSTANCES_FIRED_TRIGGERS, DELETE_JOB_DETAIL, DELETE_NO_RECOVERY_FIRED_TRIGGERS, DELETE_PAUSED_TRIGGER_GROUP, DELETE_PAUSED_TRIGGER_GROUPS, DELETE_SCHEDULER_STATE, DELETE_SIMPLE_TRIGGER, DELETE_TRIGGER, INSERT_BLOB_TRIGGER, INSERT_CALENDAR, INSERT_CRON_TRIGGER, INSERT_FIRED_TRIGGER, INSERT_JOB_DETAIL, INSERT_PAUSED_TRIGGER_GROUP, INSERT_SCHEDULER_STATE, INSERT_SIMPLE_TRIGGER, INSERT_TRIGGER, SCHED_NAME_SUBST, SELECT_BLOB_TRIGGER, SELECT_CALENDAR, SELECT_CALENDAR_EXISTENCE, SELECT_CALENDARS, SELECT_CRON_TRIGGER, SELECT_FIRED_TRIGGER, SELECT_FIRED_TRIGGER_GROUP, SELECT_FIRED_TRIGGER_INSTANCE_NAMES, SELECT_FIRED_TRIGGERS, SELECT_FIRED_TRIGGERS_OF_JOB, SELECT_FIRED_TRIGGERS_OF_JOB_GROUP, SELECT_HAS_MISFIRED_TRIGGERS_IN_STATE, SELECT_INSTANCES_FIRED_TRIGGERS, SELECT_INSTANCES_RECOVERABLE_FIRED_TRIGGERS, SELECT_JOB_DETAIL, SELECT_JOB_EXECUTION_COUNT, SELECT_JOB_EXISTENCE, SELECT_JOB_FOR_TRIGGER, SELECT_JOB_GROUPS, SELECT_JOB_NONCONCURRENT, SELECT_JOBS_IN_GROUP, SELECT_JOBS_IN_GROUP_LIKE, SELECT_MISFIRED_TRIGGERS, SELECT_MISFIRED_TRIGGERS_IN_GROUP_IN_STATE, SELECT_MISFIRED_TRIGGERS_IN_STATE, SELECT_NEXT_FIRE_TIME, SELECT_NEXT_TRIGGER_TO_ACQUIRE, SELECT_NUM_CALENDARS, SELECT_NUM_JOBS, SELECT_NUM_TRIGGERS, SELECT_NUM_TRIGGERS_FOR_JOB, SELECT_NUM_TRIGGERS_IN_GROUP, SELECT_PAUSED_TRIGGER_GROUP, SELECT_PAUSED_TRIGGER_GROUPS, SELECT_REFERENCED_CALENDAR, SELECT_SCHEDULER_STATE, SELECT_SCHEDULER_STATES, SELECT_SIMPLE_TRIGGER, SELECT_TRIGGER, SELECT_TRIGGER_DATA, SELECT_TRIGGER_EXISTENCE, SELECT_TRIGGER_FOR_FIRE_TIME, SELECT_TRIGGER_GROUPS, SELECT_TRIGGER_GROUPS_FILTERED, SELECT_TRIGGER_STATE, SELECT_TRIGGER_STATUS, SELECT_TRIGGERS_FOR_CALENDAR, SELECT_TRIGGERS_FOR_JOB, SELECT_TRIGGERS_IN_GROUP, SELECT_TRIGGERS_IN_GROUP_LIKE, SELECT_TRIGGERS_IN_STATE, TABLE_PREFIX_SUBST, UPDATE_BLOB_TRIGGER, UPDATE_CALENDAR, UPDATE_CRON_TRIGGER, UPDATE_FIRED_TRIGGER, UPDATE_JOB_DATA, UPDATE_JOB_DETAIL, UPDATE_JOB_TRIGGER_STATES, UPDATE_JOB_TRIGGER_STATES_FROM_OTHER_STATE, UPDATE_SCHEDULER_STATE, UPDATE_SIMPLE_TRIGGER, UPDATE_TRIGGER, UPDATE_TRIGGER_GROUP_STATE_FROM_STATE, UPDATE_TRIGGER_GROUP_STATE_FROM_STATES, UPDATE_TRIGGER_SKIP_DATA, UPDATE_TRIGGER_STATE, UPDATE_TRIGGER_STATE_FROM_STATE, UPDATE_TRIGGER_STATE_FROM_STATES, UPDATE_TRIGGER_STATES_FROM_OTHER_STATES
-
-
Constructor Summary
Constructors Constructor Description DBSemaphore(java.lang.String tablePrefix, java.lang.String schedName, java.lang.String defaultSQL, java.lang.String defaultInsertSQL)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract void
executeSQL(java.sql.Connection conn, java.lang.String lockName, java.lang.String theExpandedSQL, java.lang.String theExpandedInsertSQL)
Execute the SQL that will lock the proper database row.protected org.slf4j.Logger
getLog()
java.lang.String
getSchedName()
protected java.lang.String
getSchedulerNameLiteral()
protected java.lang.String
getSQL()
protected java.lang.String
getTablePrefix()
boolean
isLockOwner(java.lang.String lockName)
Determine whether the calling thread owns a lock on the identified resource.boolean
obtainLock(java.sql.Connection conn, java.lang.String lockName)
Grants a lock on the identified resource to the calling thread (blocking until it is available).void
releaseLock(java.lang.String lockName)
Release the lock on the identified resource if it is held by the calling thread.boolean
requiresConnection()
This Semaphore implementation does use the database.protected void
setInsertSQL(java.lang.String insertSql)
void
setSchedName(java.lang.String schedName)
protected void
setSQL(java.lang.String sql)
void
setTablePrefix(java.lang.String tablePrefix)
-
-
-
Method Detail
-
getLog
protected org.slf4j.Logger getLog()
-
executeSQL
protected abstract void executeSQL(java.sql.Connection conn, java.lang.String lockName, java.lang.String theExpandedSQL, java.lang.String theExpandedInsertSQL) throws LockException
Execute the SQL that will lock the proper database row.- Throws:
LockException
-
obtainLock
public boolean obtainLock(java.sql.Connection conn, java.lang.String lockName) throws LockException
Grants a lock on the identified resource to the calling thread (blocking until it is available).- Specified by:
obtainLock
in interfaceSemaphore
- Parameters:
conn
- Database connection used to establish lock. Can be null if
returns false.Semaphore.requiresConnection()
- Returns:
- true if the lock was obtained.
- Throws:
LockException
-
releaseLock
public void releaseLock(java.lang.String lockName)
Release the lock on the identified resource if it is held by the calling thread.- Specified by:
releaseLock
in interfaceSemaphore
-
isLockOwner
public boolean isLockOwner(java.lang.String lockName)
Determine whether the calling thread owns a lock on the identified resource.
-
requiresConnection
public boolean requiresConnection()
This Semaphore implementation does use the database.- Specified by:
requiresConnection
in interfaceSemaphore
- See Also:
Semaphore.obtainLock(Connection, String)
,Semaphore.releaseLock(String)
-
getSQL
protected java.lang.String getSQL()
-
setSQL
protected void setSQL(java.lang.String sql)
-
setInsertSQL
protected void setInsertSQL(java.lang.String insertSql)
-
getSchedulerNameLiteral
protected java.lang.String getSchedulerNameLiteral()
-
getSchedName
public java.lang.String getSchedName()
-
setSchedName
public void setSchedName(java.lang.String schedName)
- Specified by:
setSchedName
in interfaceTablePrefixAware
-
getTablePrefix
protected java.lang.String getTablePrefix()
-
setTablePrefix
public void setTablePrefix(java.lang.String tablePrefix)
- Specified by:
setTablePrefix
in interfaceTablePrefixAware
-
-