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.
Fields inherited from interface org.quartz.impl.jdbcjobstore.StdJDBCConstants |
COUNT_MISFIRED_TRIGGERS_IN_STATES, DELETE_BLOB_TRIGGER, DELETE_CALENDAR, DELETE_CRON_TRIGGER, DELETE_FIRED_TRIGGER, DELETE_FIRED_TRIGGERS, DELETE_INSTANCES_FIRED_TRIGGERS, DELETE_JOB_DETAIL, DELETE_JOB_LISTENERS, DELETE_NO_RECOVERY_FIRED_TRIGGERS, DELETE_PAUSED_TRIGGER_GROUP, DELETE_PAUSED_TRIGGER_GROUPS, DELETE_SCHEDULER_STATE, DELETE_SIMPLE_TRIGGER, DELETE_TRIGGER, DELETE_TRIGGER_LISTENERS, DELETE_VOLATILE_FIRED_TRIGGERS, INSERT_BLOB_TRIGGER, INSERT_CALENDAR, INSERT_CRON_TRIGGER, INSERT_FIRED_TRIGGER, INSERT_JOB_DETAIL, INSERT_JOB_LISTENER, INSERT_PAUSED_TRIGGER_GROUP, INSERT_SCHEDULER_STATE, INSERT_SIMPLE_TRIGGER, INSERT_TRIGGER, INSERT_TRIGGER_LISTENER, 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_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_LISTENERS, SELECT_JOB_STATEFUL, SELECT_JOBS_IN_GROUP, SELECT_MISFIRED_TRIGGERS, SELECT_MISFIRED_TRIGGERS_IN_GROUP_IN_STATE, SELECT_MISFIRED_TRIGGERS_IN_STATE, SELECT_MISFIRED_TRIGGERS_IN_STATES, 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_STATEFUL_JOBS_OF_TRIGGER_GROUP, SELECT_TRIGGER, SELECT_TRIGGER_DATA, SELECT_TRIGGER_EXISTENCE, SELECT_TRIGGER_FOR_FIRE_TIME, SELECT_TRIGGER_GROUPS, SELECT_TRIGGER_LISTENERS, SELECT_TRIGGER_STATE, SELECT_TRIGGER_STATUS, SELECT_TRIGGERS_FOR_CALENDAR, SELECT_TRIGGERS_FOR_JOB, SELECT_TRIGGERS_IN_GROUP, SELECT_TRIGGERS_IN_STATE, SELECT_VOLATILE_JOBS, SELECT_VOLATILE_TRIGGERS, TABLE_PREFIX_SUBST, UPDATE_BLOB_TRIGGER, UPDATE_CALENDAR, UPDATE_CRON_TRIGGER, UPDATE_INSTANCES_FIRED_TRIGGER_STATE, 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, UPDATE_TRIGGER_GROUP_STATE_FROM_STATE, UPDATE_TRIGGER_GROUP_STATE_FROM_STATES, UPDATE_TRIGGER_SKIP_DATA, UPDATE_TRIGGER_STATE, UPDATE_TRIGGER_STATE_FROM_OTHER_STATES_BEFORE_TIME, UPDATE_TRIGGER_STATE_FROM_STATE, UPDATE_TRIGGER_STATE_FROM_STATES, UPDATE_TRIGGER_STATES_FROM_OTHER_STATES |
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_STATEFUL, COL_IS_VOLATILE, COL_JOB_CLASS, COL_JOB_DATAMAP, COL_JOB_GROUP, COL_JOB_LISTENER, 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_START_TIME, COL_TIME_ZONE_ID, COL_TIMES_TRIGGERED, COL_TRIGGER_GROUP, COL_TRIGGER_LISTENER, 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_JOB_LISTENERS, TABLE_LOCKS, TABLE_PAUSED_TRIGGERS, TABLE_SCHEDULER_STATE, TABLE_SIMPLE_TRIGGERS, TABLE_TRIGGER_LISTENERS, TABLE_TRIGGERS, TTYPE_BLOB, TTYPE_CRON, TTYPE_SIMPLE |
Constructor Summary |
DBSemaphore(java.lang.String tablePrefix,
java.lang.String sql,
java.lang.String defaultSQL)
|
Method Summary |
protected abstract void |
executeSQL(java.sql.Connection conn,
java.lang.String lockName,
java.lang.String expandedSQL)
Execute the SQL that will lock the proper database row. |
protected org.slf4j.Logger |
getLog()
|
protected java.lang.String |
getSQL()
|
protected java.lang.String |
getTablePrefix()
|
boolean |
isLockOwner(java.sql.Connection conn,
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.sql.Connection conn,
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 |
setSQL(java.lang.String sql)
|
void |
setTablePrefix(java.lang.String tablePrefix)
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
DBSemaphore
public DBSemaphore(java.lang.String tablePrefix,
java.lang.String sql,
java.lang.String defaultSQL)
getLog
protected org.slf4j.Logger getLog()
executeSQL
protected abstract void executeSQL(java.sql.Connection conn,
java.lang.String lockName,
java.lang.String expandedSQL)
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 interface Semaphore
- Parameters:
conn
- Database connection used to establish lock. Can be null if
Semaphore.requiresConnection()
returns false.
- Returns:
- true if the lock was obtained.
- Throws:
LockException
releaseLock
public void releaseLock(java.sql.Connection conn,
java.lang.String lockName)
- Release the lock on the identified resource if it is held by the calling
thread.
- Specified by:
releaseLock
in interface Semaphore
- Parameters:
conn
- Database connection used to establish lock. Can be null if
Semaphore.requiresConnection()
returns false.
isLockOwner
public boolean isLockOwner(java.sql.Connection conn,
java.lang.String lockName)
- Determine whether the calling thread owns a lock on the identified
resource.
- Specified by:
isLockOwner
in interface Semaphore
- Parameters:
conn
- Database connection used to establish lock. Can be null if
Semaphore.requiresConnection()
returns false.
requiresConnection
public boolean requiresConnection()
- This Semaphore implementation does use the database.
- Specified by:
requiresConnection
in interface Semaphore
- See Also:
Semaphore.isLockOwner(Connection, String)
,
Semaphore.obtainLock(Connection, String)
,
Semaphore.releaseLock(Connection, String)
getSQL
protected java.lang.String getSQL()
setSQL
protected void setSQL(java.lang.String sql)
getTablePrefix
protected java.lang.String getTablePrefix()
setTablePrefix
public void setTablePrefix(java.lang.String tablePrefix)
- Specified by:
setTablePrefix
in interface TablePrefixAware
Copyright 2001-2019, Terracotta, Inc.