Class ReactiveMongoTransactionManager
- All Implemented Interfaces:
Serializable, InitializingBean, ConfigurableTransactionManager, ReactiveTransactionManager, TransactionManager
ReactiveTransactionManager implementation that manages
ClientSession based transactions for a single
ReactiveMongoDatabaseFactory.
Binds a ClientSession from the specified
ReactiveMongoDatabaseFactory to the subscriber
Context. Readonly transactions operate on a ClientSession and enable causal consistency, and also
start,
commit or
abort a transaction.
Application code is required to retrieve the MongoDatabase via
ReactiveMongoDatabaseUtils.getDatabase(ReactiveMongoDatabaseFactory) instead
of a standard ReactiveMongoDatabaseFactory.getMongoDatabase() call. Spring
classes such as ReactiveMongoTemplate use this strategy implicitly. By
default, failure of a commit operation raises a TransactionSystemException. You can override
doCommit(TransactionSynchronizationManager, ReactiveMongoTransactionObject) to implement the
Retry Commit Operation
behavior as outlined in the MongoDB reference manual.
- Since:
- 2.2
- Author:
- Christoph Strobl, Mark Paluch
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classMongoDB specific transaction object, representing aMongoResourceHolder.Nested classes/interfaces inherited from class AbstractReactiveTransactionManager
AbstractReactiveTransactionManager.SuspendedResourcesHolder -
Field Summary
Fields inherited from class AbstractReactiveTransactionManager
logger -
Constructor Summary
ConstructorsConstructorDescriptionCreate a newReactiveMongoTransactionManagerfor bean-style usage.ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory) Create a newReactiveMongoTransactionManagerobtaining sessions from the givenReactiveMongoDatabaseFactory.ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory, @Nullable com.mongodb.TransactionOptions options) Create a newReactiveMongoTransactionManagerobtaining sessions from the givenReactiveMongoDatabaseFactoryapplying the givenoptions, if present, when starting a new transaction.ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory, MongoTransactionOptionsResolver transactionOptionsResolver, @Nullable MongoTransactionOptions defaultTransactionOptions) Create a newReactiveMongoTransactionManagerobtaining sessions from the givenReactiveMongoDatabaseFactoryapplying the givenoptions, if present, when starting a new transaction. -
Method Summary
Modifier and TypeMethodDescriptionvoiddoBegin(TransactionSynchronizationManager synchronizationManager, Object transaction, TransactionDefinition definition) doCleanupAfterCompletion(TransactionSynchronizationManager synchronizationManager, Object transaction) doCommit(TransactionSynchronizationManager synchronizationManager, ReactiveMongoTransactionManager.ReactiveMongoTransactionObject transactionObject) Customization hook to perform an actual commit of the given transaction.
If a commit operation encounters an error, the MongoDB driver throws aMongoExceptionholding error labels.doCommit(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) protected ObjectdoGetTransaction(TransactionSynchronizationManager synchronizationManager) doResume(TransactionSynchronizationManager synchronizationManager, @Nullable Object transaction, Object suspendedResources) doRollback(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) doSetRollbackOnly(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) doSuspend(TransactionSynchronizationManager synchronizationManager, Object transaction) @Nullable ReactiveMongoDatabaseFactoryGet theReactiveMongoDatabaseFactorythat this instance manages transactions for.protected booleanisExistingTransaction(Object transaction) voidsetDatabaseFactory(ReactiveMongoDatabaseFactory databaseFactory) Set theReactiveMongoDatabaseFactorythat this instance should manage transactions for.voidsetOptions(@Nullable com.mongodb.TransactionOptions options) Set theTransactionOptionsto be applied when starting transactions.Methods inherited from class AbstractReactiveTransactionManager
commit, getReactiveTransaction, getTransactionExecutionListeners, prepareForCommit, registerAfterCompletionWithExistingTransaction, rollback, setTransactionExecutionListenersMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ConfigurableTransactionManager
addListener
-
Constructor Details
-
ReactiveMongoTransactionManager
public ReactiveMongoTransactionManager()Create a newReactiveMongoTransactionManagerfor bean-style usage.
Note:Thedb factoryhas to besetDatabaseFactory(ReactiveMongoDatabaseFactory)set} before using the instance. Use this constructor to prepare aReactiveMongoTransactionManagervia aBeanFactory.
Optionally it is possible to set defaulttransaction optionsdefiningReadConcernandWriteConcern.- See Also:
-
ReactiveMongoTransactionManager
Create a newReactiveMongoTransactionManagerobtaining sessions from the givenReactiveMongoDatabaseFactory.- Parameters:
databaseFactory- must not be null.
-
ReactiveMongoTransactionManager
public ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory, @Nullable com.mongodb.TransactionOptions options) Create a newReactiveMongoTransactionManagerobtaining sessions from the givenReactiveMongoDatabaseFactoryapplying the givenoptions, if present, when starting a new transaction.- Parameters:
databaseFactory- must not be null.options- can be null. Will defaultMongoTransactionOptions.NONEif null.
-
ReactiveMongoTransactionManager
public ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory, MongoTransactionOptionsResolver transactionOptionsResolver, @Nullable MongoTransactionOptions defaultTransactionOptions) Create a newReactiveMongoTransactionManagerobtaining sessions from the givenReactiveMongoDatabaseFactoryapplying the givenoptions, if present, when starting a new transaction.- Parameters:
databaseFactory- must not be null.transactionOptionsResolver- must not be null.defaultTransactionOptions- can be null. Will defaultMongoTransactionOptions.NONEif null.- Since:
- 4.3
-
-
Method Details
-
doGetTransaction
protected Object doGetTransaction(TransactionSynchronizationManager synchronizationManager) throws TransactionException - Specified by:
doGetTransactionin classAbstractReactiveTransactionManager- Throws:
TransactionException
-
isExistingTransaction
- Overrides:
isExistingTransactionin classAbstractReactiveTransactionManager- Throws:
TransactionException
-
doBegin
protected Mono<Void> doBegin(TransactionSynchronizationManager synchronizationManager, Object transaction, TransactionDefinition definition) throws TransactionException - Specified by:
doBeginin classAbstractReactiveTransactionManager- Throws:
TransactionException
-
doSuspend
protected Mono<Object> doSuspend(TransactionSynchronizationManager synchronizationManager, Object transaction) throws TransactionException - Overrides:
doSuspendin classAbstractReactiveTransactionManager- Throws:
TransactionException
-
doResume
protected Mono<Void> doResume(TransactionSynchronizationManager synchronizationManager, @Nullable Object transaction, Object suspendedResources) - Overrides:
doResumein classAbstractReactiveTransactionManager
-
doCommit
protected final Mono<Void> doCommit(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) throws TransactionException - Specified by:
doCommitin classAbstractReactiveTransactionManager- Throws:
TransactionException
-
doCommit
protected Mono<Void> doCommit(TransactionSynchronizationManager synchronizationManager, ReactiveMongoTransactionManager.ReactiveMongoTransactionObject transactionObject) Customization hook to perform an actual commit of the given transaction.
If a commit operation encounters an error, the MongoDB driver throws aMongoExceptionholding error labels.
By default those labels are ignored, nevertheless one might check fortransient commit errors labelsand retry the the commit.- Parameters:
synchronizationManager- reactive synchronization manager.transactionObject- never null.
-
doRollback
protected Mono<Void> doRollback(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) - Specified by:
doRollbackin classAbstractReactiveTransactionManager
-
doSetRollbackOnly
protected Mono<Void> doSetRollbackOnly(TransactionSynchronizationManager synchronizationManager, GenericReactiveTransaction status) throws TransactionException - Overrides:
doSetRollbackOnlyin classAbstractReactiveTransactionManager- Throws:
TransactionException
-
doCleanupAfterCompletion
protected Mono<Void> doCleanupAfterCompletion(TransactionSynchronizationManager synchronizationManager, Object transaction) - Overrides:
doCleanupAfterCompletionin classAbstractReactiveTransactionManager
-
setDatabaseFactory
Set theReactiveMongoDatabaseFactorythat this instance should manage transactions for.- Parameters:
databaseFactory- must not be null.
-
setOptions
public void setOptions(@Nullable com.mongodb.TransactionOptions options) Set theTransactionOptionsto be applied when starting transactions.- Parameters:
options- can be null.
-
getDatabaseFactory
Get theReactiveMongoDatabaseFactorythat this instance manages transactions for.- Returns:
- can be null.
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSetin interfaceInitializingBean
-