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.
-
-
Constructor Summary
Constructors Constructor Description AbstractTransactionController()INTERNAL: Return a new controller.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddUnitOfWork(Object transactionKey, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl activeUnitOfWork)INTERNAL: Add a UnitOfWork object to the Hashtable keyed on the external transaction object.voidbeginTransaction(org.eclipse.persistence.internal.sessions.AbstractSession session)INTERNAL: Begin an external transaction.voidbindToCurrentTransaction(org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, org.eclipse.persistence.internal.sessions.AbstractSession session)INTERNAL: Associate the given unit of work and EclipseLink session with the active external transaction.voidclearSequencingListeners()INTERNAL: Clears sequencing listeners.voidcommitTransaction(org.eclipse.persistence.internal.sessions.AbstractSession session)INTERNAL: Commit the external transaction.org.eclipse.persistence.internal.sequencing.SequencingCallbackgetActiveSequencingCallback(DatabaseSession dbSession, org.eclipse.persistence.internal.sequencing.SequencingCallbackFactory sequencingCallbackFactory)INTERNAL: Returns sequencingCallback for the current active external transaction.org.eclipse.persistence.internal.sessions.UnitOfWorkImplgetActiveUnitOfWork()INTERNAL: Return the active unit of work for the current external transaction.ExceptionHandlergetExceptionHandler()Return the exception handler used to handle or wrap exceptions thrown in before/after completion.SynchronizationListenerFactorygetListenerFactory()INTERNAL: Get the factory used to generate synchronization listeners.org.eclipse.persistence.internal.sessions.AbstractSessiongetSession()INTERNAL: Return the manager's session.ObjectgetTransaction()INTERNAL: Return the active external transaction object, or null if none is active.ObjectgetTransactionKey(Object transaction)INTERNAL: Return a key for the specified external transaction object.ObjectgetTransactionStatus()INTERNAL: Return the transaction status.MapgetUnitsOfWork()INTERNAL: Return the hashtable keyed on the external transaction objects with values that are the associated units of work.booleanhasActiveUnitOfWork()INTERNAL: Return true if there is a unit of work associated with the active external transaction.voidinitializeSequencingListeners()INTERNAL: Initializes sequencing listeners.abstract booleanisRolledBack_impl(Object status)INTERNAL: Return true if the transaction is in the rolled back state.booleanisSequencingCallbackRequired()INTERNAL: Indicates whether sequencing callback may be required.ObjectjndiLookup(String jndiName)PUBLIC: Look up a given name in JNDI.voidlogTxStateTrace(org.eclipse.persistence.internal.sessions.AbstractSession session, String msgInd, Object status)voidlogTxTrace(org.eclipse.persistence.internal.sessions.AbstractSession session, String msgInd, Object[] args)org.eclipse.persistence.internal.sessions.UnitOfWorkImpllookupActiveUnitOfWork()INTERNAL: Return the unit of work associated with the active external transaction.org.eclipse.persistence.internal.sessions.UnitOfWorkImpllookupActiveUnitOfWork(Object transaction)INTERNAL: Return the unit of work associated with the active external transaction.voidmarkTransactionForRollback()INTERNAL: Mark the external transaction for rollback.booleannoTransactionOrRolledBackOrCommited()INTERNAL: Used the EJB 3.0 to determine if a transaction is in a state where an EntityManager can be closedintnumSessionsRequiringSequencingCallback()INTERNAL: Indicates how many sessions require sequencing callbacks.voidregisterSynchronizationListener(org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, org.eclipse.persistence.internal.sessions.AbstractSession session)INTERNAL: Associate the given unit of work and EclipseLink session with the current external transaction.voidremoveSequencingListener(Object transactionKey)INTERNAL: Clears sequencingCallbacks.voidremoveUnitOfWork(Object transactionKey)INTERNAL: Remove the unit of work associated with the transaction passed in.voidrollbackTransaction(org.eclipse.persistence.internal.sessions.AbstractSession session)INTERNAL: Roll back the external transaction.voidsetExceptionHandler(ExceptionHandler exceptionHandler)Set an exception handler to handle or wrap exceptions thrown in before/after completion.voidsetListenerFactory(SynchronizationListenerFactory factory)INTERNAL: Set the factory used to generate synchronization listeners.voidsetSession(org.eclipse.persistence.internal.sessions.AbstractSession session)INTERNAL: Set the manager's session.
-
-
-
Method Detail
-
getExceptionHandler
public ExceptionHandler getExceptionHandler()
Return the exception handler used to handle or wrap exceptions thrown in before/after completion.- Specified by:
getExceptionHandlerin interfaceExternalTransactionController
-
setExceptionHandler
public void setExceptionHandler(ExceptionHandler exceptionHandler)
Set an exception handler to handle or wrap exceptions thrown in before/after completion.- Specified by:
setExceptionHandlerin interfaceExternalTransactionController
-
bindToCurrentTransaction
public void bindToCurrentTransaction(org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, org.eclipse.persistence.internal.sessions.AbstractSession session)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
public void beginTransaction(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Begin an external transaction.- Specified by:
beginTransactionin interfaceExternalTransactionController- Parameters:
session- The session for which the transaction is being begun.
-
commitTransaction
public void commitTransaction(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Commit the external transaction.- Specified by:
commitTransactionin interfaceExternalTransactionController- Parameters:
session- The session for which the transaction is being committed.
-
rollbackTransaction
public void rollbackTransaction(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Roll back the external transaction.- Specified by:
rollbackTransactionin 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:
markTransactionForRollbackin interfaceExternalTransactionController
-
getTransaction
public Object 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
public Object getTransactionKey(Object transaction)
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
public Object 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
public abstract boolean isRolledBack_impl(Object status)
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
public org.eclipse.persistence.internal.sessions.UnitOfWorkImpl 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:
getActiveUnitOfWorkin interfaceExternalTransactionController
-
lookupActiveUnitOfWork
public org.eclipse.persistence.internal.sessions.UnitOfWorkImpl 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
public org.eclipse.persistence.internal.sessions.UnitOfWorkImpl lookupActiveUnitOfWork(Object transaction)
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
public void addUnitOfWork(Object transactionKey, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl activeUnitOfWork)
INTERNAL: Add a UnitOfWork object to the Hashtable keyed on the external transaction object.
-
removeUnitOfWork
public void removeUnitOfWork(Object transactionKey)
INTERNAL: Remove the unit of work associated with the transaction passed in.
-
getSession
public org.eclipse.persistence.internal.sessions.AbstractSession getSession()
INTERNAL: Return the manager's session.- Specified by:
getSessionin interfaceExternalTransactionController
-
setSession
public void setSession(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Set the manager's session.- Specified by:
setSessionin interfaceExternalTransactionController
-
getUnitsOfWork
public Map getUnitsOfWork()
INTERNAL: Return the hashtable keyed on the external transaction objects with values that are the associated units of work.
-
getListenerFactory
public SynchronizationListenerFactory getListenerFactory()
INTERNAL: Get the factory used to generate synchronization listeners.
-
setListenerFactory
public void setListenerFactory(SynchronizationListenerFactory factory)
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(org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, org.eclipse.persistence.internal.sessions.AbstractSession session) throws DatabaseExceptionINTERNAL: Associate the given unit of work and EclipseLink session with the current external transaction. This method is offered only for backwards compatibility.- Specified by:
registerSynchronizationListenerin interfaceExternalTransactionController- Throws:
DatabaseException
-
jndiLookup
public Object jndiLookup(String jndiName)
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:
initializeSequencingListenersin interfaceExternalTransactionController
-
getActiveSequencingCallback
public org.eclipse.persistence.internal.sequencing.SequencingCallback getActiveSequencingCallback(DatabaseSession dbSession, org.eclipse.persistence.internal.sequencing.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:
getActiveSequencingCallbackin interfaceExternalTransactionController
-
clearSequencingListeners
public void clearSequencingListeners()
INTERNAL: Clears sequencing listeners. Called by initializeSequencingListeners and by sequencing on disconnect.- Specified by:
clearSequencingListenersin 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
public void removeSequencingListener(Object transactionKey)
INTERNAL: Clears sequencingCallbacks. Called by initializeSequencingCallbacks and by sequencing on disconnect.
-
logTxTrace
public void logTxTrace(org.eclipse.persistence.internal.sessions.AbstractSession session, String msgInd, Object[] args)
-
-