public final class TransactionManager
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
static class |
TransactionManager.FI
Internal use only
|
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
FAILURE_INFORMATION_KEY
key for the Failure information in the user provided context data.
|
Constructor and Description |
---|
TransactionManager(TransactionSecurityProvider securityProvider, java.util.logging.Logger logger, java.util.logging.Logger debugLogger)
Constructor
|
Modifier and Type | Method and Description |
---|---|
static void |
aggrStatValueStatic(java.lang.String aggrName, double value)
Convenience method for aggregating a statistical value for the current transaction.
|
static void |
assertTransaction()
Asserts that the current thread has a transaction
|
void |
attach(TransactionalCallable callable)
Associates the given callable unit of work with its transaction
|
Transaction |
beginTransaction(java.lang.String userDescription, boolean isSystemTransaction, boolean isReadOnlyTransaction)
Allows the user to start a transaction explicitly.
|
Transaction |
beginTransaction(java.lang.String userDescription, boolean isSystemTransaction, boolean isReadOnlyTransaction, TransactionPriority priority, java.util.Map contextData)
starts a new transaction
|
Transaction |
beginTransaction(java.lang.String userDescription, boolean isSystemTransaction, boolean isReadOnlyTransaction, TransactionPriority priority, java.util.Map contextData, TransactionManager.FI fi) |
Transaction |
beginTransaction(java.lang.String transactionGroupId, java.lang.String userDescription, java.util.Map contextData)
starts a new transaction
|
void |
detach()
Disassociates the current callable unit of work from the current thread and its transaction
|
Transaction.Status |
endTransaction()
either commits or rolls back the current transaction depending on the transaction status.
|
void |
enlistAsRead(Transactional t)
Enlists the given transactional object as read in the given transaction.
|
boolean |
enlistAsWrite(Transactional t)
Enlists the given transactional object as write in the given transaction.
|
<T> T |
executeSynchronized(java.util.concurrent.Callable<T> callable)
Executes the given callable object in a synchronization block with this transaction manager being the synchronization object.
|
java.util.logging.Logger |
getDebugLogger()
Returns the logger for debug messages
|
java.util.logging.Logger |
getLogger()
Returns the logger for all non-debug messages
|
static Transaction |
getTransaction()
Returns the transaction associated with the current thread
|
TransactionGroup |
getTransactionGroup(java.lang.String groupId)
Returns the TransactionGroup for the given group id.
|
static void |
incrStatCounterStatic(java.lang.String s)
Convenience method for incrementing a counter tracked by the current transaction by 1.
|
void |
prepareForCommit()
Prepares the transaction for commit.
|
void |
registerListener(TransactionListener l)
Convenience method for registering a transaction listener that listens to write-transactions and with default listener order (
DEFAULT_TRANSACTION_LISTENER_ORDER ). |
void |
registerListener(TransactionListener l, long order)
Registers a listener with the transaction manager using the given order.
|
void |
registerListener(TransactionListener l, Transaction tr)
Registers the given transaction listener with the given transaction.
|
void |
registerTransactionGroup(TransactionGroup group)
Registers a Transaction Group.
|
void |
resumeTransaction(Transaction tr)
Resumes a transaction that was previously suspended
|
void |
setRollbackOnly(java.lang.Throwable t)
Set the current transaction as rollback only.
|
Transaction |
suspendTransaction()
Suspends the current transaction associated with this thread.
|
void |
unregisterListener(java.lang.String id)
Unregisters a listener.
|
void |
unregisterTransactionGroup(java.lang.String groupId)
Unregisters the TransactionGroup for the given group id if one is found.
|
public static final java.lang.String FAILURE_INFORMATION_KEY
public TransactionManager(TransactionSecurityProvider securityProvider, java.util.logging.Logger logger, java.util.logging.Logger debugLogger)
securityProvider
- the security providerpublic java.util.logging.Logger getLogger()
public java.util.logging.Logger getDebugLogger()
public void registerListener(TransactionListener l, Transaction tr)
public void registerListener(TransactionListener l)
DEFAULT_TRANSACTION_LISTENER_ORDER
).public void registerListener(TransactionListener l, long order)
order
- the relative invocation order of the listener compared to other listeners. The smaller the value, the earlier listener will be invoked.public void unregisterListener(java.lang.String id)
id
- the id of the listener to unregisterpublic void registerTransactionGroup(TransactionGroup group) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException
java.lang.IllegalArgumentException
- if the group is null, or group id is null, or if another group is registered for the same group idjava.lang.IllegalStateException
- if this method is being called inside a transactionpublic TransactionGroup getTransactionGroup(java.lang.String groupId)
groupId
- the id of the group.public void unregisterTransactionGroup(java.lang.String groupId) throws java.lang.IllegalStateException
groupId
- the transaction group id.java.lang.IllegalStateException
- if this method is being called inside a transactionpublic static Transaction getTransaction()
public static void assertTransaction()
public Transaction beginTransaction(java.lang.String userDescription, boolean isSystemTransaction, boolean isReadOnlyTransaction) throws TransactionException
endTransaction()
. Upon returning from this method the thread has the transaction object.userDescription
- user-supplied descriptionisSystemTransaction
- whether this is a system transactionisReadOnlyTransaction
- whether this is a read only transactionTransactionException
- if an error occurs beginning the transactionpublic Transaction beginTransaction(java.lang.String userDescription, boolean isSystemTransaction, boolean isReadOnlyTransaction, TransactionPriority priority, java.util.Map contextData, TransactionManager.FI fi) throws TransactionException
TransactionException
public Transaction beginTransaction(java.lang.String transactionGroupId, java.lang.String userDescription, java.util.Map contextData) throws TransactionException
transactionGroupId
- the id of the group that this transaction will belong to. The TransactionGroup is used to customize the priority, conflict resolution and other aspects of a transactionuserDescription
- a user given descriptioncontextData
- a user given bag of properties associated with the transaction. These properties can be accessed or updated via the Transaction.addToContext(Object, Object)
or Transaction.removeFromContext(Object)
.TransactionException
- if transaction cannot be createdpublic Transaction beginTransaction(java.lang.String userDescription, boolean isSystemTransaction, boolean isReadOnlyTransaction, TransactionPriority priority, java.util.Map contextData) throws TransactionException
userDescription
- a user given descriptionisSystemTransaction
- whether the transaction is a system transactionisReadOnlyTransaction
- whether the transaction is a read only transaction. Attempting to write to transactional resources in a read-only transaction will result in an exception.priority
- the priority of a transaction. The priority is typically used for conflict resolution when one of the two conflicting transactions needs to be chosen as the victim and rolledback.contextData
- a user given bag of properties associated with the transaction. These properties can be accessed or updated via the Transaction.addToContext(Object, Object)
or Transaction.removeFromContext(Object)
.TransactionException
- if transaction cannot be createdpublic void prepareForCommit()
public Transaction.Status endTransaction()
public Transaction suspendTransaction()
public void resumeTransaction(Transaction tr)
public void setRollbackOnly(java.lang.Throwable t)
t
- Throwable that indicates reason for rollback onlypublic boolean enlistAsWrite(Transactional t) throws TransactionConflictException, java.lang.IllegalStateException, TransactionAlreadyMarkedAsRollbackException
Transaction.Status.Active
TransactionConflictException
- if this transaction will conflict with another transactionTransactionAlreadyMarkedAsRollbackException
- if this transaction was previously marked as rollback onlyjava.lang.IllegalStateException
- if this method is called while the transaction is not in active statejava.lang.UnsupportedOperationException
- if the transaction is a read only transactionpublic void enlistAsRead(Transactional t) throws TransactionConflictException, java.lang.IllegalStateException, TransactionAlreadyMarkedAsRollbackException
Transaction.Status.Active
t
- the transactional to enlistTransactionConflictException
- if this transaction will conflict with another transactionTransactionAlreadyMarkedAsRollbackException
- if this transaction was previously marked as rollback onlyjava.lang.IllegalStateException
- if this method is called while the transaction is not in active statepublic void attach(TransactionalCallable callable)
public void detach()
public <T> T executeSynchronized(java.util.concurrent.Callable<T> callable) throws java.lang.Exception
synchronize (transactionManager) { ... synchronize (some_object) { ... } }and Thread 2:
synchronize (some_object) { ... synchronize (transactionManager) { ... } }The first piece of code is an example of a transaction listener attempting to synchronize on some_object in on of its callback methods. The second piece of code is an example of an arbitrary code first synchronizing on some_object and then interacting with a transction (creating a transaction, or if already in a transaction, modifying an object). These two threads may eventually deadlock. This method can be used to rewrite the second code as follows (note that sometimes this conversion may not be easy, or even possible):
class implements Callable { public Object call() throws Exception { ... synchronized (some_object) { ... } }This method invokes the call method in a synchronized block, effectively doing the following which avoids the deadlock
synchronized (transactionManager) { callable.call(); }
java.lang.Exception
public static void incrStatCounterStatic(java.lang.String s)
public static void aggrStatValueStatic(java.lang.String aggrName, double value)
aggrName
- an arbitrary name representing the aggregationvalue
- the value to aggregate