org.quartz.impl.jdbcjobstore
Class DBSemaphore

java.lang.Object
  extended by 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.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
 

Constructor Detail

DBSemaphore

public DBSemaphore(java.lang.String tablePrefix,
                   java.lang.String sql,
                   java.lang.String defaultSQL)
Method Detail

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.