public class JTANonClusteredSemaphore extends java.lang.Object implements Semaphore
Transaction aware.
It is most appropriate for use when using
JobStoreCMT without clustering.
This Semaphore implementation is not Quartz cluster safe.
When a lock is obtained/released but there is no active JTA
, then this TransactionSemaphore 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!
SimpleSemaphore| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
DEFAULT_TRANSACTION_MANANGER_LOCATION |
| Constructor and Description |
|---|
JTANonClusteredSemaphore() |
| Modifier and Type | Method and Description |
|---|---|
protected org.slf4j.Logger |
getLog() |
protected javax.transaction.Transaction |
getTransaction()
Helper method to get the current
from the in JNDI. |
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) |
public static final java.lang.String DEFAULT_TRANSACTION_MANANGER_LOCATION
protected org.slf4j.Logger getLog()
public void setTransactionManagerJNDIName(java.lang.String transactionManagerJNDIName)
public boolean obtainLock(java.sql.Connection conn,
java.lang.String lockName)
throws LockException
obtainLock in interface Semaphoreconn - Database connection used to establish lock. Can be null if
Semaphore.requiresConnection() returns false.LockExceptionprotected javax.transaction.Transaction getTransaction()
throws LockException
Transaction
from the TransactionManager in JNDI.Transaction, null if
not currently in a transaction.LockExceptionpublic void releaseLock(java.lang.String lockName)
throws LockException
releaseLock in interface SemaphoreLockExceptionprotected void releaseLock(java.lang.String lockName,
boolean fromSynchronization)
throws LockException
fromSynchronization - True if this method is being invoked from
Synchronization notified of the enclosing
transaction having completed.LockException - Thrown if there was a problem accessing the JTA
Transaction. Only relevant if fromSynchronization
is false.public boolean isLockOwner(java.sql.Connection conn,
java.lang.String lockName)
public boolean requiresConnection()
requiresConnection in interface SemaphoreSemaphore.obtainLock(Connection, String),
Semaphore.releaseLock(String)Copyright Super iPaaS Integration LLC, an IBM Company 2024