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 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 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 Semaphoreconn - Database connection used to establish lock. Can be null if
Semaphore.requiresConnection() returns false.LockExceptionprotected Transaction getTransaction()
throws LockException
Transaction
from the TransactionManager in JNDI.Transaction, null if
not currently in a transaction.LockExceptionpublic void releaseLock(String lockName) throws LockException
releaseLock in interface SemaphoreLockExceptionprotected 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 SemaphoreSemaphore.obtainLock(Connection, String),
Semaphore.releaseLock(String)Copyright 2001-2019, Terracotta, Inc.