Package org.springframework.data.mongodb
Class MongoTransactionManager
java.lang.Object
org.springframework.transaction.support.AbstractPlatformTransactionManager
org.springframework.data.mongodb.MongoTransactionManager
- All Implemented Interfaces:
Serializable
,InitializingBean
,ConfigurableTransactionManager
,PlatformTransactionManager
,ResourceTransactionManager
,TransactionManager
public class MongoTransactionManager
extends AbstractPlatformTransactionManager
implements ResourceTransactionManager, InitializingBean
A
Binds a
Application code is required to retrieve the
By default failure of a commit operation raises a
PlatformTransactionManager
implementation that manages
ClientSession
based transactions for a single MongoDatabaseFactory
.
Binds a
ClientSession
from the specified MongoDatabaseFactory
to the thread.
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
MongoDatabaseUtils.getDatabase(MongoDatabaseFactory)
instead of a standard
MongoDatabaseFactory.getMongoDatabase()
call. Spring classes such as
MongoTemplate
use this strategy implicitly.
By default failure of a commit operation raises a
TransactionSystemException
. One may override
doCommit(MongoTransactionObject)
to implement the
Retry Commit Operation
behavior as outlined in the MongoDB reference manual.- Since:
- 2.1
- Author:
- Christoph Strobl, Mark Paluch
- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static class
MongoDB specific transaction object, representing aMongoResourceHolder
.Nested classes/interfaces inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
AbstractPlatformTransactionManager.SuspendedResourcesHolder
-
Field Summary
Fields inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
logger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION
-
Constructor Summary
ConstructorDescriptionCreate a newMongoTransactionManager
for bean-style usage.MongoTransactionManager
(MongoDatabaseFactory databaseFactory) Create a newMongoTransactionManager
obtaining sessions from the givenMongoDatabaseFactory
.MongoTransactionManager
(MongoDatabaseFactory databaseFactory, com.mongodb.TransactionOptions options) Create a newMongoTransactionManager
obtaining sessions from the givenMongoDatabaseFactory
applying the givenoptions
, if present, when starting a new transaction.MongoTransactionManager
(MongoDatabaseFactory databaseFactory, MongoTransactionOptionsResolver transactionOptionsResolver, MongoTransactionOptions defaultTransactionOptions) Create a newMongoTransactionManager
obtaining sessions from the givenMongoDatabaseFactory
applying the givenoptions
, if present, when starting a new transaction. -
Method Summary
Modifier and TypeMethodDescriptionvoid
protected void
doBegin
(Object transaction, TransactionDefinition definition) protected void
doCleanupAfterCompletion
(Object transaction) protected void
doCommit
(MongoTransactionManager.MongoTransactionObject transactionObject) Customization hook to perform an actual commit of the given transaction.
If a commit operation encounters an error, the MongoDB driver throws aMongoException
holding error labels.protected final void
doCommit
(DefaultTransactionStatus status) protected Object
protected void
protected void
doRollback
(DefaultTransactionStatus status) protected void
protected Object
Get theMongoDatabaseFactory
that this instance manages transactions for.protected boolean
isExistingTransaction
(Object transaction) void
setDatabaseFactory
(MongoDatabaseFactory databaseFactory) Set theMongoDatabaseFactory
that this instance should manage transactions for.void
setOptions
(com.mongodb.TransactionOptions options) Set theTransactionOptions
to be applied when starting transactions.Methods inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
commit, determineTimeout, getDefaultTimeout, getTransaction, getTransactionExecutionListeners, getTransactionSynchronization, invokeAfterCompletion, isFailEarlyOnGlobalRollbackOnly, isGlobalRollbackOnParticipationFailure, isNestedTransactionAllowed, isRollbackOnCommitFailure, isValidateExistingTransaction, prepareForCommit, prepareSynchronization, registerAfterCompletionWithExistingTransaction, resume, rollback, setDefaultTimeout, setFailEarlyOnGlobalRollbackOnly, setGlobalRollbackOnParticipationFailure, setNestedTransactionAllowed, setRollbackOnCommitFailure, setTransactionExecutionListeners, setTransactionSynchronization, setTransactionSynchronizationName, setValidateExistingTransaction, shouldCommitOnGlobalRollbackOnly, suspend, triggerBeforeCommit, triggerBeforeCompletion, useSavepointForNestedTransaction
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.transaction.ConfigurableTransactionManager
addListener
Methods inherited from interface org.springframework.transaction.PlatformTransactionManager
commit, getTransaction, rollback
-
Constructor Details
-
MongoTransactionManager
public MongoTransactionManager()Create a newMongoTransactionManager
for bean-style usage.
Note:Thedb factory
has to beset
before using the instance. Use this constructor to prepare aMongoTransactionManager
via aBeanFactory
.
Optionally it is possible to set defaulttransaction options
definingReadConcern
andWriteConcern
. -
MongoTransactionManager
Create a newMongoTransactionManager
obtaining sessions from the givenMongoDatabaseFactory
.- Parameters:
databaseFactory
- must not be null.
-
MongoTransactionManager
public MongoTransactionManager(MongoDatabaseFactory databaseFactory, @Nullable com.mongodb.TransactionOptions options) Create a newMongoTransactionManager
obtaining sessions from the givenMongoDatabaseFactory
applying the givenoptions
, if present, when starting a new transaction.- Parameters:
databaseFactory
- must not be null.options
- can be null.
-
MongoTransactionManager
public MongoTransactionManager(MongoDatabaseFactory databaseFactory, MongoTransactionOptionsResolver transactionOptionsResolver, MongoTransactionOptions defaultTransactionOptions) Create a newMongoTransactionManager
obtaining sessions from the givenMongoDatabaseFactory
applying the givenoptions
, if present, when starting a new transaction.- Parameters:
databaseFactory
- must not be null.transactionOptionsResolver
- must not be null.defaultTransactionOptions
- can be null.- Since:
- 4.3
-
-
Method Details
-
doGetTransaction
- Specified by:
doGetTransaction
in classAbstractPlatformTransactionManager
- Throws:
TransactionException
-
isExistingTransaction
- Overrides:
isExistingTransaction
in classAbstractPlatformTransactionManager
- Throws:
TransactionException
-
doBegin
protected void doBegin(Object transaction, TransactionDefinition definition) throws TransactionException - Specified by:
doBegin
in classAbstractPlatformTransactionManager
- Throws:
TransactionException
-
doSuspend
- Overrides:
doSuspend
in classAbstractPlatformTransactionManager
- Throws:
TransactionException
-
doResume
- Overrides:
doResume
in classAbstractPlatformTransactionManager
-
doCommit
- Specified by:
doCommit
in classAbstractPlatformTransactionManager
- Throws:
TransactionException
-
doCommit
protected void doCommit(MongoTransactionManager.MongoTransactionObject transactionObject) throws Exception Customization hook to perform an actual commit of the given transaction.
If a commit operation encounters an error, the MongoDB driver throws aMongoException
holding error labels.
By default those labels are ignored, nevertheless one might check fortransient commit errors labels
and retry the the commit.
int retries = 3; do { try { transactionObject.commitTransaction(); break; } catch (MongoException ex) { if (!ex.hasErrorLabel(MongoException.UNKNOWN_TRANSACTION_COMMIT_RESULT_LABEL)) { throw ex; } } Thread.sleep(500); } while (--retries > 0);
- Parameters:
transactionObject
- never null.- Throws:
Exception
- in case of transaction errors.
-
doRollback
- Specified by:
doRollback
in classAbstractPlatformTransactionManager
- Throws:
TransactionException
-
doSetRollbackOnly
- Overrides:
doSetRollbackOnly
in classAbstractPlatformTransactionManager
- Throws:
TransactionException
-
doCleanupAfterCompletion
- Overrides:
doCleanupAfterCompletion
in classAbstractPlatformTransactionManager
-
setDatabaseFactory
Set theMongoDatabaseFactory
that this instance should manage transactions for.- Parameters:
databaseFactory
- must not be null.
-
setOptions
Set theTransactionOptions
to be applied when starting transactions.- Parameters:
options
- can be null.
-
getDatabaseFactory
Get theMongoDatabaseFactory
that this instance manages transactions for.- Returns:
- can be null.
-
getResourceFactory
- Specified by:
getResourceFactory
in interfaceResourceTransactionManager
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSet
in interfaceInitializingBean
-