public class ReactiveMongoTransactionManager extends org.springframework.transaction.reactive.AbstractReactiveTransactionManager implements InitializingBean
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.ReactiveMongoDatabaseUtils.getDatabase(ReactiveMongoDatabaseFactory, SessionSynchronization)
,
Serialized FormModifier and Type | Class and Description |
---|---|
protected static class |
ReactiveMongoTransactionManager.ReactiveMongoTransactionObject
MongoDB specific transaction object, representing a
MongoResourceHolder . |
org.springframework.transaction.reactive.AbstractReactiveTransactionManager.SuspendedResourcesHolder
logger
Constructor and Description |
---|
ReactiveMongoTransactionManager()
Create a new
ReactiveMongoTransactionManager for bean-style usage. |
ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory)
Create a new
ReactiveMongoTransactionManager obtaining sessions from the given
ReactiveMongoDatabaseFactory . |
ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory,
com.mongodb.TransactionOptions options)
Create a new
ReactiveMongoTransactionManager obtaining sessions from the given
ReactiveMongoDatabaseFactory applying the given options , if present, when
starting a new transaction. |
commit, getReactiveTransaction, prepareForCommit, registerAfterCompletionWithExistingTransaction, rollback
public ReactiveMongoTransactionManager()
ReactiveMongoTransactionManager
for bean-style usage.
Note:The db factory
has to
be setDatabaseFactory(ReactiveMongoDatabaseFactory)
set} before using the instance. Use this constructor
to prepare a ReactiveMongoTransactionManager
via a BeanFactory
.
Optionally it is possible to set default transaction options
defining
ReadConcern
and WriteConcern
.public ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory)
ReactiveMongoTransactionManager
obtaining sessions from the given
ReactiveMongoDatabaseFactory
.databaseFactory
- must not be null.public ReactiveMongoTransactionManager(ReactiveMongoDatabaseFactory databaseFactory, @Nullable com.mongodb.TransactionOptions options)
ReactiveMongoTransactionManager
obtaining sessions from the given
ReactiveMongoDatabaseFactory
applying the given options
, if present, when
starting a new transaction.databaseFactory
- must not be null.options
- can be null.protected Object doGetTransaction(org.springframework.transaction.reactive.TransactionSynchronizationManager synchronizationManager) throws TransactionException
doGetTransaction
in class org.springframework.transaction.reactive.AbstractReactiveTransactionManager
TransactionException
protected boolean isExistingTransaction(Object transaction) throws TransactionException
isExistingTransaction
in class org.springframework.transaction.reactive.AbstractReactiveTransactionManager
TransactionException
protected reactor.core.publisher.Mono<Void> doBegin(org.springframework.transaction.reactive.TransactionSynchronizationManager synchronizationManager, Object transaction, TransactionDefinition definition) throws TransactionException
doBegin
in class org.springframework.transaction.reactive.AbstractReactiveTransactionManager
TransactionException
protected reactor.core.publisher.Mono<Object> doSuspend(org.springframework.transaction.reactive.TransactionSynchronizationManager synchronizationManager, Object transaction) throws TransactionException
doSuspend
in class org.springframework.transaction.reactive.AbstractReactiveTransactionManager
TransactionException
protected reactor.core.publisher.Mono<Void> doResume(org.springframework.transaction.reactive.TransactionSynchronizationManager synchronizationManager, @Nullable Object transaction, Object suspendedResources)
doResume
in class org.springframework.transaction.reactive.AbstractReactiveTransactionManager
protected final reactor.core.publisher.Mono<Void> doCommit(org.springframework.transaction.reactive.TransactionSynchronizationManager synchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction status) throws TransactionException
doCommit
in class org.springframework.transaction.reactive.AbstractReactiveTransactionManager
TransactionException
protected reactor.core.publisher.Mono<Void> doCommit(org.springframework.transaction.reactive.TransactionSynchronizationManager synchronizationManager, ReactiveMongoTransactionManager.ReactiveMongoTransactionObject transactionObject)
MongoException
holding
error labels. transient commit errors labels
and retry the the
commit.synchronizationManager
- reactive synchronization manager.transactionObject
- never null.protected reactor.core.publisher.Mono<Void> doRollback(org.springframework.transaction.reactive.TransactionSynchronizationManager synchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction status)
doRollback
in class org.springframework.transaction.reactive.AbstractReactiveTransactionManager
protected reactor.core.publisher.Mono<Void> doSetRollbackOnly(org.springframework.transaction.reactive.TransactionSynchronizationManager synchronizationManager, org.springframework.transaction.reactive.GenericReactiveTransaction status) throws TransactionException
doSetRollbackOnly
in class org.springframework.transaction.reactive.AbstractReactiveTransactionManager
TransactionException
protected reactor.core.publisher.Mono<Void> doCleanupAfterCompletion(org.springframework.transaction.reactive.TransactionSynchronizationManager synchronizationManager, Object transaction)
public void setDatabaseFactory(ReactiveMongoDatabaseFactory databaseFactory)
ReactiveMongoDatabaseFactory
that this instance should manage transactions for.databaseFactory
- must not be null.public void setOptions(@Nullable com.mongodb.TransactionOptions options)
TransactionOptions
to be applied when starting transactions.options
- can be null.@Nullable public ReactiveMongoDatabaseFactory getDatabaseFactory()
ReactiveMongoDatabaseFactory
that this instance manages transactions for.public void afterPropertiesSet()
afterPropertiesSet
in interface InitializingBean
Copyright © 2011–2020 Pivotal Software, Inc.. All rights reserved.