public class WebLogicJtaTransactionManager extends JtaTransactionManager
JtaTransactionManager variant for BEA WebLogic (9.0 and higher).
Supports the full power of Spring's transaction definitions on WebLogic's
transaction coordinator, beyond standard JTA: transaction names,
per-transaction isolation levels, and proper resuming of transactions in all cases.
Uses WebLogic's special begin(name) method to start a JTA transaction,
in order to make Spring-driven transactions visible in WebLogic's transaction
monitor. In case of Spring's declarative transactions, the exposed name will
(by default) be the fully-qualified class name + "." + method name.
Supports a per-transaction isolation level through WebLogic's corresponding JTA transaction property "ISOLATION LEVEL". This will apply the specified isolation level (e.g. ISOLATION_SERIALIZABLE) to all JDBC Connections that participate in the given transaction.
Invokes WebLogic's special forceResume method if standard JTA resume
failed, to also resume if the target transaction was marked rollback-only.
If you're not relying on this feature of transaction suspension in the first
place, Spring's standard JtaTransactionManager will behave properly too.
By default, the JTA UserTransaction and TransactionManager handles are
fetched directly from WebLogic's TransactionHelper. This can be
overridden by specifying "userTransaction"/"userTransactionName" and
"transactionManager"/"transactionManagerName", passing in existing handles
or specifying corresponding JNDI locations to look up.
NOTE: This JtaTransactionManager is intended to refine specific transaction demarcation behavior on Spring's side. It will happily co-exist with independently configured WebLogic transaction strategies in your persistence provider, with no need to specifically connect those setups in any way.
TransactionDefinition.getName(),
TransactionDefinition.getIsolationLevel(),
UserTransaction,
Transaction,
TransactionManager,
TransactionHelper,
Serialized FormAbstractPlatformTransactionManager.SuspendedResourcesHolderDEFAULT_TRANSACTION_SYNCHRONIZATION_REGISTRY_NAME, DEFAULT_USER_TRANSACTION_NAME, FALLBACK_TRANSACTION_MANAGER_NAMESlogger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION| Constructor and Description |
|---|
WebLogicJtaTransactionManager() |
| Modifier and Type | Method and Description |
|---|---|
void |
afterPropertiesSet()
Initialize the UserTransaction as well as the TransactionManager handle.
|
Transaction |
createTransaction(String name,
int timeout)
Create an active Transaction object based on the given name and timeout.
|
protected void |
doJtaBegin(JtaTransactionObject txObject,
TransactionDefinition definition)
Perform a JTA begin on the JTA UserTransaction or TransactionManager.
|
protected void |
doJtaResume(JtaTransactionObject txObject,
Object suspendedTransaction)
Perform a JTA resume on the JTA TransactionManager.
|
protected TransactionManager |
retrieveTransactionManager()
Allows subclasses to retrieve the JTA TransactionManager in a vendor-specific manner.
|
protected UserTransaction |
retrieveUserTransaction()
Allows subclasses to retrieve the JTA UserTransaction in a vendor-specific manner.
|
applyIsolationLevel, applyTimeout, buildUserTransaction, checkUserTransactionAndTransactionManager, doBegin, doCleanupAfterCompletion, doCommit, doGetJtaTransaction, doGetTransaction, doJtaSuspend, doRegisterAfterCompletionWithJtaTransaction, doResume, doRollback, doSetRollbackOnly, doSuspend, findTransactionManager, findTransactionSynchronizationRegistry, findUserTransaction, getJndiEnvironment, getJndiTemplate, getTransactionManager, getTransactionSynchronizationRegistry, getUserTransaction, initTransactionSynchronizationRegistry, initUserTransactionAndTransactionManager, isExistingTransaction, lookupTransactionManager, lookupTransactionSynchronizationRegistry, lookupUserTransaction, registerAfterCompletionWithExistingTransaction, retrieveTransactionSynchronizationRegistry, setAllowCustomIsolationLevels, setAutodetectTransactionManager, setAutodetectTransactionSynchronizationRegistry, setAutodetectUserTransaction, setCacheUserTransaction, setJndiEnvironment, setJndiTemplate, setTransactionManager, setTransactionManagerName, setTransactionSynchronizationRegistry, setTransactionSynchronizationRegistryName, setUserTransaction, setUserTransactionName, shouldCommitOnGlobalRollbackOnly, supportsResourceAdapterManagedTransactions, useSavepointForNestedTransactioncommit, determineTimeout, getDefaultTimeout, getTransaction, getTransactionSynchronization, invokeAfterCompletion, isFailEarlyOnGlobalRollbackOnly, isGlobalRollbackOnParticipationFailure, isNestedTransactionAllowed, isRollbackOnCommitFailure, isValidateExistingTransaction, newTransactionStatus, prepareForCommit, prepareSynchronization, prepareTransactionStatus, resume, rollback, setDefaultTimeout, setFailEarlyOnGlobalRollbackOnly, setGlobalRollbackOnParticipationFailure, setNestedTransactionAllowed, setRollbackOnCommitFailure, setTransactionSynchronization, setTransactionSynchronizationName, setValidateExistingTransaction, suspend, triggerBeforeCommit, triggerBeforeCompletionpublic void afterPropertiesSet()
throws TransactionSystemException
JtaTransactionManagerafterPropertiesSet in interface InitializingBeanafterPropertiesSet in class JtaTransactionManagerTransactionSystemExceptionJtaTransactionManager.initUserTransactionAndTransactionManager()@Nullable protected UserTransaction retrieveUserTransaction() throws TransactionSystemException
JtaTransactionManagerThe default implementation simply returns null.
retrieveUserTransaction in class JtaTransactionManagernull if none foundTransactionSystemException - in case of errorsJtaTransactionManager.setUserTransaction(javax.transaction.UserTransaction),
JtaTransactionManager.setUserTransactionName(java.lang.String)@Nullable protected TransactionManager retrieveTransactionManager() throws TransactionSystemException
JtaTransactionManagerThe default implementation simply returns null.
retrieveTransactionManager in class JtaTransactionManagernull if none foundTransactionSystemException - in case of errorsJtaTransactionManager.setTransactionManager(javax.transaction.TransactionManager),
JtaTransactionManager.setTransactionManagerName(java.lang.String)protected void doJtaBegin(JtaTransactionObject txObject, TransactionDefinition definition) throws NotSupportedException, SystemException
JtaTransactionManagerThis implementation only supports standard JTA functionality: that is, no per-transaction isolation levels and no transaction names. Can be overridden in subclasses, for specific JTA implementations.
Calls applyIsolationLevel and applyTimeout
before invoking the UserTransaction's begin method.
doJtaBegin in class JtaTransactionManagertxObject - the JtaTransactionObject containing the UserTransactiondefinition - the TransactionDefinition instance, describing propagation
behavior, isolation level, read-only flag, timeout, and transaction nameNotSupportedException - if thrown by JTA methodsSystemException - if thrown by JTA methodsJtaTransactionManager.getUserTransaction(),
JtaTransactionManager.getTransactionManager(),
JtaTransactionManager.applyIsolationLevel(org.springframework.transaction.jta.JtaTransactionObject, int),
JtaTransactionManager.applyTimeout(org.springframework.transaction.jta.JtaTransactionObject, int),
JtaTransactionObject.getUserTransaction(),
UserTransaction.setTransactionTimeout(int),
UserTransaction.begin()protected void doJtaResume(@Nullable JtaTransactionObject txObject, Object suspendedTransaction) throws InvalidTransactionException, SystemException
JtaTransactionManagerCan be overridden in subclasses, for specific JTA implementations.
doJtaResume in class JtaTransactionManagertxObject - the JtaTransactionObject containing the UserTransactionsuspendedTransaction - the suspended JTA Transaction objectInvalidTransactionException - if thrown by JTA methodsSystemException - if thrown by JTA methodsJtaTransactionManager.getTransactionManager(),
TransactionManager.resume(javax.transaction.Transaction)public Transaction createTransaction(@Nullable String name, int timeout) throws NotSupportedException, SystemException
TransactionFactorycreateTransaction in interface TransactionFactorycreateTransaction in class JtaTransactionManagername - the transaction name (may be null)timeout - the transaction timeout (may be -1 for the default timeout)null)NotSupportedException - if the transaction manager does not support
a transaction of the specified typeSystemException - if the transaction manager failed to create the
transaction