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 JTA
aware. It is most appropriate for use when usingTransaction
without clustering.JobStoreCMT
This
Semaphore
implementation is not Quartz cluster safe.When a lock is obtained/released but there is no active JTA
, then thisTransaction
Semaphore
operates just like
.SimpleSemaphore
By 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.TransactionManager
IMPORTANT: 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.String
DEFAULT_TRANSACTION_MANANGER_LOCATION
-
Constructor Summary
Constructors Constructor Description JTANonClusteredSemaphore()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected org.slf4j.Logger
getLog()
protected javax.transaction.Transaction
getTransaction()
Helper method to get the current
from theTransaction
in JNDI.TransactionManager
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.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 void
releaseLock(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.boolean
requiresConnection()
This Semaphore implementation does not use the database.void
setTransactionManagerJNDIName(java.lang.String transactionManagerJNDIName)
-
-
-
Field Detail
-
DEFAULT_TRANSACTION_MANANGER_LOCATION
public static final java.lang.String DEFAULT_TRANSACTION_MANANGER_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 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
-
getTransaction
protected javax.transaction.Transaction getTransaction() throws LockException
Helper method to get the current
from theTransaction
in JNDI.TransactionManager
- Returns:
- The current
, null if not currently in a transaction.Transaction
- Throws:
LockException
-
releaseLock
public void releaseLock(java.lang.String lockName) throws LockException
Release the lock on the identified resource if it is held by the calling thread, unless currently in a JTA transaction.- Specified by:
releaseLock
in interfaceSemaphore
- Throws:
LockException
-
releaseLock
protected void releaseLock(java.lang.String lockName, boolean fromSynchronization) throws LockException
Release 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 from
notified of the enclosing transaction having completed.Synchronization
- Throws:
LockException
- Thrown if there was a problem accessing the JTATransaction
. Only relevant iffromSynchronization
is 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:
requiresConnection
in interfaceSemaphore
- See Also:
Semaphore.obtainLock(Connection, String)
,Semaphore.releaseLock(String)
-
-