Package org.springframework.transaction.jta

# Class WebLogicJtaTransactionManager

java.lang.Object
org.springframework.transaction.support.AbstractPlatformTransactionManager
org.springframework.transaction.jta.JtaTransactionManager
org.springframework.transaction.jta.WebLogicJtaTransactionManager

All Implemented Interfaces:
  `Serializable`, `org.springframework.beans.factory.InitializingBean`, `ConfigurableTransactionManager`, `TransactionFactory`, `PlatformTransactionManager`, `TransactionManager`

public class WebLogicJtaTransactionManager extends JtaTransactionManager
Special `JtaTransactionManager` variant for Oracle WebLogic 15.1.1 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 class was initially removed as of Spring Framework 6.0 but then brought back after the WebLogic 15.1.1 release which finally delivers Jakarta EE 9 compatibility. As of Spring Framework 6.2.16, it is available again for manual configuration - as a replacement for the standard `JtaTransactionManager`.

Since:
  6.2.16
Author:
  Juergen Hoeller
See Also:
  - `TransactionDefinition.getName()`
  - `TransactionDefinition.getIsolationLevel()`
  - Serialized Form

## Nested Class Summary

## Nested classes/interfaces inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager

`AbstractPlatformTransactionManager.SuspendedResourcesHolder`

## Field Summary

### Fields inherited from class org.springframework.transaction.jta.JtaTransactionManager

`DEFAULT_TRANSACTION_SYNCHRONIZATION_REGISTRY_NAME, DEFAULT_USER_TRANSACTION_NAME, FALLBACK_TRANSACTION_MANAGER_NAMES`

### Fields inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager

`logger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION`

## Constructor Summary

Constructors
Constructor
Description
`WebLogicJtaTransactionManager()`

## Method Summary

Modifier and Type
Method
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.

### Methods inherited from class org.springframework.transaction.jta.JtaTransactionManager

`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, useSavepointForNestedTransaction`

### Methods inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager

`commit, determineTimeout, getDefaultTimeout, getTransaction, getTransactionExecutionListeners, getTransactionSynchronization, invokeAfterCompletion, isFailEarlyOnGlobalRollbackOnly, isGlobalRollbackOnParticipationFailure, isNestedTransactionAllowed, isRollbackOnCommitFailure, isValidateExistingTransaction, prepareForCommit, prepareSynchronization, resume, rollback, setDefaultTimeout, setFailEarlyOnGlobalRollbackOnly, setGlobalRollbackOnParticipationFailure, setNestedTransactionAllowed, setRollbackOnCommitFailure, setTransactionExecutionListeners, setTransactionSynchronization, setTransactionSynchronizationName, setValidateExistingTransaction, suspend, triggerBeforeCommit, triggerBeforeCompletion`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.springframework.transaction.ConfigurableTransactionManager

`addListener`

## Constructor Details

### WebLogicJtaTransactionManager

public WebLogicJtaTransactionManager()

## Method Details

### afterPropertiesSet

public void afterPropertiesSet() throws TransactionSystemException
Description copied from class: `JtaTransactionManager`
Initialize the UserTransaction as well as the TransactionManager handle.

Specified by:
  `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`
Overrides:
  `afterPropertiesSet` in class `JtaTransactionManager`
Throws:
  `TransactionSystemException`
See Also:
  - `JtaTransactionManager.initUserTransactionAndTransactionManager()`

### retrieveUserTransaction

@Nullable protected UserTransaction retrieveUserTransaction() throws TransactionSystemException
Description copied from class: `JtaTransactionManager`
Allows subclasses to retrieve the JTA UserTransaction in a vendor-specific manner. Only called if no "userTransaction" or "userTransactionName" specified.

The default implementation simply returns `null`.

Overrides:
  `retrieveUserTransaction` in class `JtaTransactionManager`
Returns:
  the JTA UserTransaction handle to use, or `null` if none found
Throws:
  `TransactionSystemException` - in case of errors
See Also:
  - `JtaTransactionManager.setUserTransaction(jakarta.transaction.UserTransaction)`
  - `JtaTransactionManager.setUserTransactionName(java.lang.String)`

### retrieveTransactionManager

@Nullable protected TransactionManager retrieveTransactionManager() throws TransactionSystemException
Description copied from class: `JtaTransactionManager`
Allows subclasses to retrieve the JTA TransactionManager in a vendor-specific manner. Only called if no "transactionManager" or "transactionManagerName" specified.

The default implementation simply returns `null`.

Overrides:
  `retrieveTransactionManager` in class `JtaTransactionManager`
Returns:
  the JTA TransactionManager handle to use, or `null` if none found
Throws:
  `TransactionSystemException` - in case of errors
See Also:
  - `JtaTransactionManager.setTransactionManager(jakarta.transaction.TransactionManager)`
  - `JtaTransactionManager.setTransactionManagerName(java.lang.String)`

### doJtaBegin

protected void doJtaBegin(JtaTransactionObject txObject, TransactionDefinition definition) throws NotSupportedException, SystemException
Description copied from class: `JtaTransactionManager`
Perform a JTA begin on the JTA UserTransaction or TransactionManager.

This 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.

Overrides:
  `doJtaBegin` in class `JtaTransactionManager`
Parameters:
  `txObject` - the JtaTransactionObject containing the UserTransaction
  `definition` - the TransactionDefinition instance, describing propagation behavior, isolation level, read-only flag, timeout, and transaction name
Throws:
  `NotSupportedException` - if thrown by JTA methods
  `SystemException` - if thrown by JTA methods
See Also:
  - `JtaTransactionManager.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()`

### doJtaResume

protected void doJtaResume(@Nullable JtaTransactionObject txObject, Object suspendedTransaction) throws InvalidTransactionException, SystemException
Description copied from class: `JtaTransactionManager`
Perform a JTA resume on the JTA TransactionManager.

Can be overridden in subclasses, for specific JTA implementations.

Overrides:
  `doJtaResume` in class `JtaTransactionManager`
Parameters:
  `txObject` - the JtaTransactionObject containing the UserTransaction
  `suspendedTransaction` - the suspended JTA Transaction object
Throws:
  `InvalidTransactionException` - if thrown by JTA methods
  `SystemException` - if thrown by JTA methods
See Also:
  - `JtaTransactionManager.getTransactionManager()`
  - `TransactionManager.resume(jakarta.transaction.Transaction)`

### createTransaction

public Transaction createTransaction(@Nullable String name, int timeout) throws NotSupportedException, SystemException
Description copied from interface: `TransactionFactory`
Create an active Transaction object based on the given name and timeout.

Specified by:
  `createTransaction` in interface `TransactionFactory`
Overrides:
  `createTransaction` in class `JtaTransactionManager`
Parameters:
  `name` - the transaction name (may be `null`)
  `timeout` - the transaction timeout (may be -1 for the default timeout)
Returns:
  the active Transaction object (never `null`)
Throws:
  `NotSupportedException` - if the transaction manager does not support a transaction of the specified type
  `SystemException` - if the transaction manager failed to create the transaction