Package org.quartz.impl.jdbcjobstore
Class JTANonClusteredSemaphore
- java.lang.Object
-
- org.quartz.impl.jdbcjobstore.JTANonClusteredSemaphore
-
- All Implemented Interfaces:
Semaphore
public class JTANonClusteredSemaphore extends java.lang.Object implements Semaphore
Provides in memory thread/resource locking that is JTAaware. It is most appropriate for use when usingTransactionwithout clustering.JobStoreCMTThis
Semaphoreimplementation is not Quartz cluster safe.When a lock is obtained/released but there is no active JTA
, then thisTransactionSemaphoreoperates just like.SimpleSemaphoreBy default, this class looks for the
in JNDI under name "java:TransactionManager". If this is not where your Application Server registers it, you can modify the JNDI lookup location using the "transactionManagerJNDIName" property.TransactionManagerIMPORTANT: This Semaphore implementation is currently experimental. It has been tested a limited amount on JBoss 4.0.3SP1. If you do choose to use it, any feedback would be most appreciated!
- See Also:
SimpleSemaphore
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringDEFAULT_TRANSACTION_MANAGER_LOCATION
-
Constructor Summary
Constructors Constructor Description JTANonClusteredSemaphore()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected org.slf4j.LoggergetLog()protected jakarta.transaction.TransactiongetTransaction()Helper method to get the currentfrom theTransactionin JNDI.TransactionManagerbooleanisLockOwner(java.sql.Connection conn, java.lang.String lockName)Determine whether the calling thread owns a lock on the identified resource.booleanobtainLock(java.sql.Connection conn, java.lang.String lockName)Grants a lock on the identified resource to the calling thread (blocking until it is available).voidreleaseLock(java.lang.String lockName)Release the lock on the identified resource if it is held by the calling thread, unless currently in a JTA transaction.protected voidreleaseLock(java.lang.String lockName, boolean fromSynchronization)Release the lock on the identified resource if it is held by the calling thread, unless currently in a JTA transaction.booleanrequiresConnection()This Semaphore implementation does not use the database.voidsetTransactionManagerJNDIName(java.lang.String transactionManagerJNDIName)
-
-
-
Field Detail
-
DEFAULT_TRANSACTION_MANAGER_LOCATION
public static final java.lang.String DEFAULT_TRANSACTION_MANAGER_LOCATION
- See Also:
- Constant Field Values
-
-
Method Detail
-
getLog
protected org.slf4j.Logger getLog()
-
setTransactionManagerJNDIName
public void setTransactionManagerJNDIName(java.lang.String transactionManagerJNDIName)
-
obtainLock
public boolean obtainLock(java.sql.Connection conn, java.lang.String lockName) throws LockExceptionGrants a lock on the identified resource to the calling thread (blocking until it is available).- Specified by:
obtainLockin interfaceSemaphore- Parameters:
conn- Database connection used to establish lock. Can be null ifreturns false.Semaphore.requiresConnection()- Returns:
- true if the lock was obtained.
- Throws:
LockException
-
getTransaction
protected jakarta.transaction.Transaction getTransaction() throws LockExceptionHelper method to get the currentfrom theTransactionin JNDI.TransactionManager- Returns:
- The current
, null if not currently in a transaction.Transaction - Throws:
LockException
-
releaseLock
public void releaseLock(java.lang.String lockName) throws LockExceptionRelease the lock on the identified resource if it is held by the calling thread, unless currently in a JTA transaction.- Specified by:
releaseLockin interfaceSemaphore- Throws:
LockException
-
releaseLock
protected void releaseLock(java.lang.String lockName, boolean fromSynchronization) throws LockExceptionRelease the lock on the identified resource if it is held by the calling thread, unless currently in a JTA transaction.- Parameters:
fromSynchronization- True if this method is being invoked fromnotified of the enclosing transaction having completed.Synchronization- Throws:
LockException- Thrown if there was a problem accessing the JTATransaction. Only relevant iffromSynchronizationis 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.
-
requiresConnection
public boolean requiresConnection()
This Semaphore implementation does not use the database.- Specified by:
requiresConnectionin interfaceSemaphore- See Also:
Semaphore.obtainLock(Connection, String),Semaphore.releaseLock(String)
-
-