Module org.eclipse.persistence.core
Class AbstractTransactionController
java.lang.Object
org.eclipse.persistence.transaction.AbstractTransactionController
- All Implemented Interfaces:
ExternalTransactionController
- Direct Known Subclasses:
JTATransactionController
public abstract class AbstractTransactionController
extends Object
implements ExternalTransactionController
Purpose: Abstract implementation of an ExternalTransactionController.
Description: This class implements the ExternalTransactionController interface. Concrete implementations of this class are responsible for performing the coordination with the external transaction manager through whatever means available to that manager. Different transaction services may do this in slightly different ways, but most common ones (JTA and JTS/OTS) will use a synchronization interface.
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected ThreadLocal
<UnitOfWorkImpl> PERF: Cache the active uow in a thread local.protected ConcurrentMap
<Object, AbstractSynchronizationListener> Non-null only in case sequencing callbacks are used: numSessionsRequiringSequencingCallback > 0protected ExceptionHandler
Allow exception in before/after completion to be wrapped.protected SynchronizationListenerFactory
Generates listener instances for synchronizationprotected int
more - the session is a session broker with several members requiring sequencing callbacks.protected ConcurrentMap
<Object, AbstractSynchronizationListener> Non-null only in case sequencing callbacks are used: numSessionsRequiringSequencingCallback > 0protected AbstractSession
The session this controller is responsible for controllingprotected ConcurrentMap
<Object, UnitOfWorkImpl> Table of external transaction object keys and unit of work values -
Constructor Summary
ModifierConstructorDescriptionprotected
INTERNAL: Return a new controller. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addUnitOfWork
(Object transactionKey, UnitOfWorkImpl activeUnitOfWork) INTERNAL: Add a UnitOfWork object to the Hashtable keyed on the external transaction object.void
beginTransaction
(AbstractSession session) INTERNAL: Begin an external transaction.protected abstract void
INTERNAL: Begin an external transaction.void
bindToCurrentTransaction
(UnitOfWorkImpl unitOfWork, AbstractSession session) INTERNAL: Associate the given unit of work and EclipseLink session with the active external transaction.protected abstract boolean
canBeginTransaction_impl
(Object status) INTERNAL: Return true if the status indicates that a transaction can be started.protected abstract boolean
canCommitTransaction_impl
(Object status) INTERNAL: Return true if the status indicates that a transaction can be committed.protected abstract boolean
canIssueSQLToDatabase_impl
(Object status) INTERNAL: Return true if the status indicates that the SQL should be issued to the db.protected abstract boolean
canMergeUnitOfWork_impl
(Object status) INTERNAL: Return true if the status indicates that the unit of work should be merged into the shared cache.protected abstract boolean
canRollbackTransaction_impl
(Object status) INTERNAL: Return true if the status indicates that a transaction can be rolled back.void
INTERNAL: Clears sequencing listeners.void
commitTransaction
(AbstractSession session) INTERNAL: Commit the external transaction.protected abstract void
INTERNAL: Commit the external transaction.getActiveSequencingCallback
(DatabaseSession dbSession, SequencingCallbackFactory sequencingCallbackFactory) INTERNAL: Returns sequencingCallback for the current active external transaction.INTERNAL: Return the active unit of work for the current external transaction.Return the exception handler used to handle or wrap exceptions thrown in before/after completion.INTERNAL: Get the factory used to generate synchronization listeners.INTERNAL: Return the manager's session.INTERNAL: Return the active external transaction object, or null if none is active.protected abstract Object
INTERNAL: Return the active external transaction for the calling thread, or null if none is currently active for this thread.getTransactionKey
(Object transaction) INTERNAL: Return a key for the specified external transaction object.protected abstract Object
getTransactionKey_impl
(Object transaction) INTERNAL: Return a key for the specified external transaction object.INTERNAL: Return the transaction status.protected abstract Object
INTERNAL: Return the transaction status.INTERNAL: Return the hashtable keyed on the external transaction objects with values that are the associated units of work.boolean
INTERNAL: Return true if there is a unit of work associated with the active external transaction.void
INTERNAL: Initializes sequencing listeners.abstract boolean
isRolledBack_impl
(Object status) INTERNAL: Return true if the transaction is in the rolled back state.boolean
INTERNAL: Indicates whether sequencing callback may be required.jndiLookup
(String jndiName) PUBLIC: Look up a given name in JNDI.void
logTxStateTrace
(AbstractSession session, String msgInd, Object status) void
logTxTrace
(AbstractSession session, String msgInd, Object[] args) INTERNAL: Return the unit of work associated with the active external transaction.lookupActiveUnitOfWork
(Object transaction) INTERNAL: Return the unit of work associated with the active external transaction.void
INTERNAL: Mark the external transaction for rollback.protected abstract void
INTERNAL: Mark the external transaction for rollback.boolean
INTERNAL: Used the EJB 3.0 to determine if a transaction is in a state where an EntityManager can be closedint
INTERNAL: Indicates how many sessions require sequencing callbacks.protected abstract void
registerSynchronization_impl
(AbstractSynchronizationListener listener, Object txn) INTERNAL: Register the specified synchronization listener with the given active transaction.void
registerSynchronizationListener
(UnitOfWorkImpl uow, AbstractSession session) INTERNAL: Associate the given unit of work and EclipseLink session with the current external transaction.void
removeSequencingListener
(Object transactionKey) INTERNAL: Clears sequencingCallbacks.void
removeUnitOfWork
(Object transactionKey) INTERNAL: Remove the unit of work associated with the transaction passed in.void
rollbackTransaction
(AbstractSession session) INTERNAL: Roll back the external transaction.protected abstract void
INTERNAL: Roll back the external transaction.void
setExceptionHandler
(ExceptionHandler exceptionHandler) Set an exception handler to handle or wrap exceptions thrown in before/after completion.void
INTERNAL: Set the factory used to generate synchronization listeners.void
setSession
(AbstractSession session) INTERNAL: Set the manager's session.protected void
setUnitsOfWork
(ConcurrentMap<Object, UnitOfWorkImpl> unitsOfWork) INTERNAL: Set the table of transactions to units of work.protected abstract String
statusToString_impl
(Object status) INTERNAL: Convert the status to a string for tracing.
-
Field Details
-
unitsOfWork
Table of external transaction object keys and unit of work values -
session
The session this controller is responsible for controlling -
listenerFactory
Generates listener instances for synchronization -
activeUnitOfWorkThreadLocal
PERF: Cache the active uow in a thread local. -
sequencingListeners
Non-null only in case sequencing callbacks are used: numSessionsRequiringSequencingCallback > 0 -
currentlyProcessedListeners
Non-null only in case sequencing callbacks are used: numSessionsRequiringSequencingCallback > 0 -
numSessionsRequiringSequencingCallback
protected int numSessionsRequiringSequencingCallbackmore - the session is a session broker with several members requiring sequencing callbacks. -
exceptionHandler
Allow exception in before/after completion to be wrapped.
-
-
Constructor Details
-
AbstractTransactionController
protected AbstractTransactionController()INTERNAL: Return a new controller.
-
-
Method Details
-
getExceptionHandler
Return the exception handler used to handle or wrap exceptions thrown in before/after completion.- Specified by:
getExceptionHandler
in interfaceExternalTransactionController
-
setExceptionHandler
Set an exception handler to handle or wrap exceptions thrown in before/after completion.- Specified by:
setExceptionHandler
in interfaceExternalTransactionController
-
bindToCurrentTransaction
INTERNAL: Associate the given unit of work and EclipseLink session with the active external transaction. This may be done by whatever means supported by the transaction manager (i.e. through a synchronization protocol).- Parameters:
unitOfWork
- The unit of work that is to be bound to the active transactionsession
- The session ancestor of the unit of work
-
beginTransaction
INTERNAL: Begin an external transaction.- Specified by:
beginTransaction
in interfaceExternalTransactionController
- Parameters:
session
- The session for which the transaction is being begun.
-
commitTransaction
INTERNAL: Commit the external transaction.- Specified by:
commitTransaction
in interfaceExternalTransactionController
- Parameters:
session
- The session for which the transaction is being committed.
-
rollbackTransaction
INTERNAL: Roll back the external transaction.- Specified by:
rollbackTransaction
in interfaceExternalTransactionController
- Parameters:
session
- The session for which the transaction is being rolled back.
-
markTransactionForRollback
public void markTransactionForRollback()INTERNAL: Mark the external transaction for rollback.- Specified by:
markTransactionForRollback
in interfaceExternalTransactionController
-
getTransaction
INTERNAL: Return the active external transaction object, or null if none is active. This may be in whatever form the transaction system uses. -
getTransactionKey
INTERNAL: Return a key for the specified external transaction object. The key is just something that can be inserted into a hashtable (must support hashCode() and equals() methods). -
getTransactionStatus
INTERNAL: Return the transaction status. This may be any type of status or value, depending upon the transaction system. -
noTransactionOrRolledBackOrCommited
public boolean noTransactionOrRolledBackOrCommited()INTERNAL: Used the EJB 3.0 to determine if a transaction is in a state where an EntityManager can be closed -
isRolledBack_impl
INTERNAL: Return true if the transaction is in the rolled back state. -
hasActiveUnitOfWork
public boolean hasActiveUnitOfWork()INTERNAL: Return true if there is a unit of work associated with the active external transaction. Return false if no transaction is current, or if no uow has been associated with the active transaction yet. -
getActiveUnitOfWork
INTERNAL: Return the active unit of work for the current external transaction. If no transaction is active then return null. If a transaction is active but no unit of work has been bound to it then create and return one.- Specified by:
getActiveUnitOfWork
in interfaceExternalTransactionController
-
lookupActiveUnitOfWork
INTERNAL: Return the unit of work associated with the active external transaction. Return null if no transaction is active, or if no uow has been associated with the active transaction yet. -
lookupActiveUnitOfWork
INTERNAL: Return the unit of work associated with the active external transaction. Return null if no transaction is active, or if no uow has been associated with the active transaction yet. -
addUnitOfWork
INTERNAL: Add a UnitOfWork object to the Hashtable keyed on the external transaction object. -
removeUnitOfWork
INTERNAL: Remove the unit of work associated with the transaction passed in. -
getSession
INTERNAL: Return the manager's session.- Specified by:
getSession
in interfaceExternalTransactionController
-
setSession
INTERNAL: Set the manager's session.- Specified by:
setSession
in interfaceExternalTransactionController
-
getUnitsOfWork
INTERNAL: Return the hashtable keyed on the external transaction objects with values that are the associated units of work. -
setUnitsOfWork
INTERNAL: Set the table of transactions to units of work. -
getListenerFactory
INTERNAL: Get the factory used to generate synchronization listeners. -
setListenerFactory
INTERNAL: Set the factory used to generate synchronization listeners. This should be set if a listener other than the default one is being used. -
registerSynchronizationListener
public void registerSynchronizationListener(UnitOfWorkImpl uow, AbstractSession session) throws DatabaseException INTERNAL: Associate the given unit of work and EclipseLink session with the current external transaction. This method is offered only for backwards compatibility.- Specified by:
registerSynchronizationListener
in interfaceExternalTransactionController
- Throws:
DatabaseException
-
jndiLookup
PUBLIC: Look up a given name in JNDI. This can be used by a subclass or even an application to look up transaction artifacts that are required for the implementation.The lookup assumes that it is taking place on the server side, and that the InitialContext can be used without requiring any special properties.
- Parameters:
jndiName
- The name to look up- Returns:
- The object bound in JNDI to the specified name
- Throws:
TransactionException
- Thrown in case of lookup failure
-
initializeSequencingListeners
public void initializeSequencingListeners()INTERNAL: Initializes sequencing listeners. There are two methods calling this method: 1. setSession method - this could lead to initialization of sequencing listeners only if sequencing already connected (that would happen if setSession is called after session.login, which is normally not the case). 2. in the very end of connecting sequencing or adding descriptors to sequencing, after it's determined whether sequencing callbacks (and therefore listeners) will be required. In SessionBroker case each member's sequencing may call this method. Note that the number of sessions requiring callbacks may never decrease, therefore if isSequencingCallbackRequired method has returned true once, it will always return true after that (unless clearSequencingListeners method is called).- Specified by:
initializeSequencingListeners
in interfaceExternalTransactionController
-
getActiveSequencingCallback
public SequencingCallback getActiveSequencingCallback(DatabaseSession dbSession, SequencingCallbackFactory sequencingCallbackFactory) INTERNAL: Returns sequencingCallback for the current active external transaction. DatabaseSession is passed for the sake of SessionBroker case. This method requires active external transaction.- Specified by:
getActiveSequencingCallback
in interfaceExternalTransactionController
-
clearSequencingListeners
public void clearSequencingListeners()INTERNAL: Clears sequencing listeners. Called by initializeSequencingListeners and by sequencing on disconnect.- Specified by:
clearSequencingListeners
in interfaceExternalTransactionController
-
isSequencingCallbackRequired
public boolean isSequencingCallbackRequired()INTERNAL: Indicates whether sequencing callback may be required. -
numSessionsRequiringSequencingCallback
public int numSessionsRequiringSequencingCallback()INTERNAL: Indicates how many sessions require sequencing callbacks. -
removeSequencingListener
INTERNAL: Clears sequencingCallbacks. Called by initializeSequencingCallbacks and by sequencing on disconnect. -
logTxTrace
-
logTxStateTrace
-
registerSynchronization_impl
protected abstract void registerSynchronization_impl(AbstractSynchronizationListener listener, Object txn) throws Exception INTERNAL: Register the specified synchronization listener with the given active transaction.- Parameters:
listener
- The synchronization listener created for this transactiontxn
- The active transaction for which notification is being requested- Throws:
Exception
-
getTransaction_impl
INTERNAL: Return the active external transaction for the calling thread, or null if none is currently active for this thread.- Returns:
- The active transaction object, or null if no transaction is active
- Throws:
Exception
-
getTransactionKey_impl
INTERNAL: Return a key for the specified external transaction object. The key is just something that can be inserted into a hashtable (must support hashCode() and equals() methods).- Parameters:
transaction
- The transaction to which the returned key applies (may be null)- Returns:
- A key for the passed in transaction, or null if no transaction specified
- Throws:
Exception
-
getTransactionStatus_impl
INTERNAL: Return the transaction status. This may be any type of status or value, depending upon the transaction system.- Returns:
- The current transaction status
- Throws:
Exception
-
beginTransaction_impl
INTERNAL: Begin an external transaction. Do this in a way appropriate to the transaction subsystem.- Throws:
Exception
-
commitTransaction_impl
INTERNAL: Commit the external transaction. Do this in a way appropriate to the transaction subsystem.- Throws:
Exception
-
rollbackTransaction_impl
INTERNAL: Roll back the external transaction. Do this in a way appropriate to the transaction subsystem.- Throws:
Exception
-
markTransactionForRollback_impl
INTERNAL: Mark the external transaction for rollback. Do this in a way appropriate to the transaction subsystem.- Throws:
Exception
-
canBeginTransaction_impl
INTERNAL: Return true if the status indicates that a transaction can be started. This would normally mean that no transaction is currently active. The status is interpreted by the transaction subsystem.- Parameters:
status
- The current transaction status- Returns:
- true if the current state allows for a transaction to be started
-
canCommitTransaction_impl
INTERNAL: Return true if the status indicates that a transaction can be committed. This would normally mean that a transaction is currently active. The status is interpreted by the transaction subsystem.- Parameters:
status
- The current transaction status- Returns:
- true if the current state allows for a transaction to be committed
-
canRollbackTransaction_impl
INTERNAL: Return true if the status indicates that a transaction can be rolled back. This would normally mean that a transaction is currently active. The status is interpreted by the transaction subsystem.- Parameters:
status
- The current transaction status- Returns:
- true if the current state allows for a transaction to be rolled back
-
canIssueSQLToDatabase_impl
INTERNAL: Return true if the status indicates that the SQL should be issued to the db. This would normally mean that a transaction was active and not being rolled back or marked for rollback. The status is interpreted by the transaction subsystem.- Parameters:
status
- The current transaction status- Returns:
- true if the current state allows for the SQL to be sent to the database
-
canMergeUnitOfWork_impl
INTERNAL: Return true if the status indicates that the unit of work should be merged into the shared cache. This would normally mean that the transaction was committed successfully. The status is interpreted by the transaction subsystem.- Parameters:
status
- The current transaction status- Returns:
- true if the current state dictates that the unit of work should be merged
-
statusToString_impl
INTERNAL: Convert the status to a string for tracing.
-