public class JTANonClusteredSemaphore extends 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 Transaction
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!
SimpleSemaphore
Modifier and Type | Field and Description |
---|---|
static String |
DEFAULT_TRANSACTION_MANANGER_LOCATION |
Constructor and Description |
---|
JTANonClusteredSemaphore() |
Modifier and Type | Method and Description |
---|---|
protected org.slf4j.Logger |
getLog() |
protected Transaction |
getTransaction()
Helper method to get the current
from the in JNDI. |
boolean |
isLockOwner(Connection conn,
String lockName)
Determine whether the calling thread owns a lock on the identified
resource.
|
boolean |
obtainLock(Connection conn,
String lockName)
Grants a lock on the identified resource to the calling thread (blocking
until it is available).
|
void |
releaseLock(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(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(String transactionManagerJNDIName) |
public static final String DEFAULT_TRANSACTION_MANANGER_LOCATION
protected org.slf4j.Logger getLog()
public void setTransactionManagerJNDIName(String transactionManagerJNDIName)
public boolean obtainLock(Connection conn, String lockName) throws LockException
obtainLock
in interface Semaphore
conn
- Database connection used to establish lock. Can be null if
Semaphore.requiresConnection()
returns false.LockException
protected Transaction getTransaction() throws LockException
Transaction
from the TransactionManager
in JNDI.Transaction
, null if
not currently in a transaction.LockException
public void releaseLock(String lockName) throws LockException
releaseLock
in interface Semaphore
LockException
protected void releaseLock(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(Connection conn, String lockName)
public boolean requiresConnection()
requiresConnection
in interface Semaphore
Semaphore.obtainLock(Connection, String)
,
Semaphore.releaseLock(String)
Copyright 2001-2019, Terracotta, Inc.