org.springframework.transaction.jta

## Class SpringJtaSynchronizationAdapter

- java.lang.Object
- - org.springframework.transaction.jta.SpringJtaSynchronizationAdapter

- All Implemented Interfaces:
    Synchronization

      public class SpringJtaSynchronizationAdapter
      extends Object
      implements Synchronization

  Adapter that implements the JTA `Synchronization` interface delegating to an underlying Spring `TransactionSynchronization`.

  Useful for synchronizing Spring resource management code with plain JTA / EJB CMT transactions, despite the original code being built for Spring transaction synchronization.

  Since:
    2.0
  Author:
    Juergen Hoeller
  See Also:
    `Transaction.registerSynchronization(javax.transaction.Synchronization)`, `TransactionSynchronization`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected static Log` | `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `SpringJtaSynchronizationAdapter(TransactionSynchronization springSynchronization)` Create a new SpringJtaSynchronizationAdapter for the given Spring TransactionSynchronization and JTA TransactionManager.
    `SpringJtaSynchronizationAdapter(TransactionSynchronization springSynchronization, TransactionManager jtaTransactionManager)` Create a new SpringJtaSynchronizationAdapter for the given Spring TransactionSynchronization and JTA TransactionManager.
    `SpringJtaSynchronizationAdapter(TransactionSynchronization springSynchronization, UserTransaction jtaUserTransaction)` Create a new SpringJtaSynchronizationAdapter for the given Spring TransactionSynchronization and JTA TransactionManager.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterCompletion(int status)` JTA `afterCompletion` callback: invoked after commit/rollback.
    `void` | `beforeCompletion()` JTA `beforeCompletion` callback: just invoked before commit.

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

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

- - ### Field Detail

    - #### logger

          protected static final Log logger

  - ### Constructor Detail

    - #### SpringJtaSynchronizationAdapter

          public SpringJtaSynchronizationAdapter(TransactionSynchronization springSynchronization)

      Create a new SpringJtaSynchronizationAdapter for the given Spring TransactionSynchronization and JTA TransactionManager.
      Parameters:
        `springSynchronization` - the Spring TransactionSynchronization to delegate to

    - #### SpringJtaSynchronizationAdapter

          public SpringJtaSynchronizationAdapter(TransactionSynchronization springSynchronization,
                                         UserTransaction jtaUserTransaction)

      Create a new SpringJtaSynchronizationAdapter for the given Spring TransactionSynchronization and JTA TransactionManager.

      Note that this adapter will never perform a rollback-only call on WebLogic, since WebLogic Server is known to automatically mark the transaction as rollback-only in case of a `beforeCompletion` exception. Hence, on WLS, this constructor is equivalent to the single-arg constructor.

      Parameters:
        `springSynchronization` - the Spring TransactionSynchronization to delegate to
        `jtaUserTransaction` - the JTA UserTransaction to use for rollback-only setting in case of an exception thrown in `beforeCompletion` (can be omitted if the JTA provider itself marks the transaction rollback-only in such a scenario, which is required by the JTA specification as of JTA 1.1).

    - #### SpringJtaSynchronizationAdapter

          public SpringJtaSynchronizationAdapter(TransactionSynchronization springSynchronization,
                                         TransactionManager jtaTransactionManager)

      Create a new SpringJtaSynchronizationAdapter for the given Spring TransactionSynchronization and JTA TransactionManager.

      Note that this adapter will never perform a rollback-only call on WebLogic, since WebLogic Server is known to automatically mark the transaction as rollback-only in case of a `beforeCompletion` exception. Hence, on WLS, this constructor is equivalent to the single-arg constructor.

      Parameters:
        `springSynchronization` - the Spring TransactionSynchronization to delegate to
        `jtaTransactionManager` - the JTA TransactionManager to use for rollback-only setting in case of an exception thrown in `beforeCompletion` (can be omitted if the JTA provider itself marks the transaction rollback-only in such a scenario, which is required by the JTA specification as of JTA 1.1)

  - ### Method Detail

    - #### beforeCompletion

          public void beforeCompletion()

      JTA `beforeCompletion` callback: just invoked before commit.

      In case of an exception, the JTA transaction will be marked as rollback-only.

      Specified by:
        `beforeCompletion` in interface `Synchronization`
      See Also:
        `TransactionSynchronization.beforeCommit(boolean)`

    - #### afterCompletion

          public void afterCompletion(int status)

      JTA `afterCompletion` callback: invoked after commit/rollback.

      Needs to invoke the Spring synchronization's `beforeCompletion` at this late stage in case of a rollback, since there is no corresponding callback with JTA.

      Specified by:
        `afterCompletion` in interface `Synchronization`
      See Also:
        `TransactionSynchronization.beforeCompletion()`, `TransactionSynchronization.afterCompletion(int)`