Class AbstractSpringTransactionOperations

All Implemented Interfaces:
SynchronousTransactionManager<Connection>, TransactionManager, TransactionOperations<Connection>
Direct Known Subclasses:
SpringJdbcTransactionOperations

@Internal public abstract class AbstractSpringTransactionOperations extends AbstractPropagatedStatusTransactionOperations<TransactionStatus<Connection>,Connection> implements SynchronousTransactionManager<Connection>
Adds Spring Transaction management capability to Micronaut Data.
Since:
1.0.0
Author:
graemerocher
  • Constructor Details

    • AbstractSpringTransactionOperations

      protected AbstractSpringTransactionOperations(org.springframework.transaction.PlatformTransactionManager transactionManager)
  • Method Details

    • getTransaction

      public TransactionStatus<Connection> getTransaction(TransactionDefinition definition) throws TransactionException
      Description copied from interface: SynchronousTransactionManager
      Return a currently active transaction or create a new one, according to the specified propagation behavior.

      Note that parameters like isolation level or timeout will only be applied to new transactions, and thus be ignored when participating in active ones.

      Furthermore, not all transaction definition settings will be supported by every transaction manager: A proper transaction manager implementation should throw an exception when unsupported settings are encountered.

      An exception to the above rule is the read-only flag, which should be ignored if no explicit read-only mode is supported. Essentially, the read-only flag is just a hint for potential optimization.

      Specified by:
      getTransaction in interface SynchronousTransactionManager<Connection>
      Parameters:
      definition - the TransactionDefinition instance (can be null for defaults), describing propagation behavior, isolation level, timeout etc.
      Returns:
      transaction status object representing the new or current transaction
      Throws:
      TransactionException - in case of lookup, creation, or system errors
      See Also:
    • commit

      public void commit(TransactionStatus<Connection> status) throws TransactionException
      Description copied from interface: SynchronousTransactionManager
      Commit the given transaction, with regard to its status. If the transaction has been marked rollback-only programmatically, perform a rollback.

      If the transaction wasn't a new one, omit the commit for proper participation in the surrounding transaction. If a previous transaction has been suspended to be able to create a new one, resume the previous transaction after committing the new one.

      Note that when the commit call completes, no matter if normally or throwing an exception, the transaction must be fully completed and cleaned up. No rollback call should be expected in such a case.

      If this method throws an exception other than a TransactionException, then some before-commit error caused the commit attempt to fail. For example, an O/R Mapping tool might have tried to flush changes to the database right before commit, with the resulting DataAccessException causing the transaction to fail. The original exception will be propagated to the caller of this commit method in such a case.

      Specified by:
      commit in interface SynchronousTransactionManager<Connection>
      Parameters:
      status - object returned by the getTransaction method
      Throws:
      TransactionException - if something goes wrong during commit
      See Also:
    • rollback

      public void rollback(TransactionStatus<Connection> status) throws TransactionException
      Description copied from interface: SynchronousTransactionManager
      Perform a rollback of the given transaction.

      If the transaction wasn't a new one, just set it rollback-only for proper participation in the surrounding transaction. If a previous transaction has been suspended to be able to create a new one, resume the previous transaction after rolling back the new one.

      Do not call rollback on a transaction if commit threw an exception. The transaction will already have been completed and cleaned up when commit returns, even in case of a commit exception. Consequently, a rollback call after commit failure will lead to an IllegalTransactionStateException.

      Specified by:
      rollback in interface SynchronousTransactionManager<Connection>
      Parameters:
      status - object returned by the getTransaction method
      Throws:
      TransactionException - if something goes wrong during rollback
    • executeRead

      public <R> R executeRead(@NonNull @NonNull TransactionCallback<Connection,R> callback)
      Description copied from interface: TransactionOperations
      Execute a read-only transaction within the context of the function.
      Specified by:
      executeRead in interface TransactionOperations<Connection>
      Type Parameters:
      R - The result
      Parameters:
      callback - The call back
      Returns:
      The result
    • executeWrite

      public <R> R executeWrite(@NonNull @NonNull TransactionCallback<Connection,R> callback)
      Description copied from interface: TransactionOperations
      Execute a default transaction within the context of the function.
      Specified by:
      executeWrite in interface TransactionOperations<Connection>
      Type Parameters:
      R - The result
      Parameters:
      callback - The call back
      Returns:
      The result
    • doExecute

      protected <R> R doExecute(TransactionDefinition definition, TransactionCallback<Connection,R> callback)
      Description copied from class: AbstractPropagatedStatusTransactionOperations
      Do execute in transaction.
      Specified by:
      doExecute in class AbstractPropagatedStatusTransactionOperations<TransactionStatus<Connection>,Connection>
      Type Parameters:
      R - The result type
      Parameters:
      definition - The transaction definition
      callback - The callback
      Returns:
      The result