public interface ReactiveTransactionManager extends TransactionManager
TransactionalOperator
,
TransactionInterceptor
,
PlatformTransactionManager
Modifier and Type | Method and Description |
---|---|
reactor.core.publisher.Mono<Void> |
commit(ReactiveTransaction transaction)
Commit the given transaction, with regard to its status.
|
reactor.core.publisher.Mono<ReactiveTransaction> |
getReactiveTransaction(TransactionDefinition definition)
Emit a currently active reactive transaction or create a new one, according to
the specified propagation behavior.
|
reactor.core.publisher.Mono<Void> |
rollback(ReactiveTransaction transaction)
Perform a rollback of the given transaction.
|
reactor.core.publisher.Mono<ReactiveTransaction> getReactiveTransaction(@Nullable TransactionDefinition definition)
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.
Note: In contrast to PlatformTransactionManager
, exceptions
are propagated through the reactive pipeline returned from this method.
definition
- the TransactionDefinition instance,
describing propagation behavior, isolation level, timeout etc.TransactionException
- in case of lookup, creation, or system errorsIllegalTransactionStateException
- if the given transaction definition
cannot be executed (for example, if a currently active transaction is in
conflict with the specified propagation behavior)TransactionDefinition.getPropagationBehavior()
,
TransactionDefinition.getIsolationLevel()
,
TransactionDefinition.getTimeout()
,
TransactionDefinition.isReadOnly()
reactor.core.publisher.Mono<Void> commit(ReactiveTransaction transaction)
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 propagating an exception, the transaction must be fully completed and cleaned up. No rollback call should be expected in such a case.
Note: In contrast to PlatformTransactionManager
, exceptions
are propagated through the reactive pipeline returned from this method.
Also, depending on the transaction manager implementation, commit
may propagate DataAccessException
as well.
transaction
- object returned by the getTransaction
methodUnexpectedRollbackException
- in case of an unexpected rollback
that the transaction coordinator initiatedHeuristicCompletionException
- in case of a transaction failure
caused by a heuristic decision on the side of the transaction coordinatorTransactionSystemException
- in case of commit or system errors
(typically caused by fundamental resource failures)IllegalTransactionStateException
- if the given transaction
is already completed (that is, committed or rolled back)TransactionExecution.setRollbackOnly()
reactor.core.publisher.Mono<Void> rollback(ReactiveTransaction 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 failed. 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.
Note: In contrast to PlatformTransactionManager
, exceptions
are propagated through the reactive pipeline returned from this method.
Also, depending on the transaction manager implementation, rollback
may propagate DataAccessException
as well.
transaction
- object returned by the getTransaction
methodTransactionSystemException
- in case of rollback or system errors
(typically caused by fundamental resource failures)IllegalTransactionStateException
- if the given transaction
is already completed (that is, committed or rolled back)