Package org.springframework.data.mongodb
Class MongoTransactionManager
java.lang.Object
org.springframework.transaction.support.AbstractPlatformTransactionManager
org.springframework.data.mongodb.MongoTransactionManager
- All Implemented Interfaces:
Serializable,org.springframework.beans.factory.InitializingBean,org.springframework.transaction.PlatformTransactionManager,org.springframework.transaction.support.ResourceTransactionManager,org.springframework.transaction.TransactionManager
public class MongoTransactionManager
extends org.springframework.transaction.support.AbstractPlatformTransactionManager
implements org.springframework.transaction.support.ResourceTransactionManager, org.springframework.beans.factory.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
Nested ClassesModifier and TypeClassDescriptionprotected static classMongoDB specific transaction object, representing aMongoResourceHolder.Nested classes/interfaces inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
org.springframework.transaction.support.AbstractPlatformTransactionManager.SuspendedResourcesHolder -
Field Summary
Fields inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
logger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION -
Constructor Summary
ConstructorsConstructorDescriptionCreate a newMongoTransactionManagerfor bean-style usage.MongoTransactionManager(MongoDatabaseFactory dbFactory) Create a newMongoTransactionManagerobtaining sessions from the givenMongoDatabaseFactory.MongoTransactionManager(MongoDatabaseFactory dbFactory, com.mongodb.TransactionOptions options) Create a newMongoTransactionManagerobtaining sessions from the givenMongoDatabaseFactoryapplying the givenoptions, if present, when starting a new transaction. -
Method Summary
Modifier and TypeMethodDescriptionvoidprotected voidprotected voiddoCleanupAfterCompletion(Object transaction) protected voiddoCommit(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 aMongoExceptionholding error labels.protected final voiddoCommit(org.springframework.transaction.support.DefaultTransactionStatus status) protected Objectprotected voidprotected voiddoRollback(org.springframework.transaction.support.DefaultTransactionStatus status) protected voiddoSetRollbackOnly(org.springframework.transaction.support.DefaultTransactionStatus status) protected ObjectGet theMongoDatabaseFactorythat this instance manages transactions for.protected booleanisExistingTransaction(Object transaction) voidsetDbFactory(MongoDatabaseFactory dbFactory) Set theMongoDatabaseFactorythat this instance should manage transactions for.voidsetOptions(com.mongodb.TransactionOptions options) Set theTransactionOptionsto be applied when starting transactions.Methods inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
commit, determineTimeout, getDefaultTimeout, getTransaction, getTransactionSynchronization, invokeAfterCompletion, isFailEarlyOnGlobalRollbackOnly, isGlobalRollbackOnParticipationFailure, isNestedTransactionAllowed, isRollbackOnCommitFailure, isValidateExistingTransaction, newTransactionStatus, prepareForCommit, prepareSynchronization, prepareTransactionStatus, registerAfterCompletionWithExistingTransaction, resume, rollback, setDefaultTimeout, setFailEarlyOnGlobalRollbackOnly, setGlobalRollbackOnParticipationFailure, setNestedTransactionAllowed, setRollbackOnCommitFailure, setTransactionSynchronization, setTransactionSynchronizationName, setValidateExistingTransaction, shouldCommitOnGlobalRollbackOnly, suspend, triggerBeforeCommit, triggerBeforeCompletion, useSavepointForNestedTransactionMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.transaction.PlatformTransactionManager
commit, getTransaction, rollback
-
Constructor Details
-
MongoTransactionManager
public MongoTransactionManager()Create a newMongoTransactionManagerfor bean-style usage.
Note:Thedb factoryhas to besetbefore using the instance. Use this constructor to prepare aMongoTransactionManagervia aBeanFactory.
Optionally it is possible to set defaulttransaction optionsdefiningReadConcernandWriteConcern.- See Also:
-
setDbFactory(MongoDatabaseFactory)AbstractPlatformTransactionManager.setTransactionSynchronization(int)
-
MongoTransactionManager
Create a newMongoTransactionManagerobtaining sessions from the givenMongoDatabaseFactory.- Parameters:
dbFactory- must not be null.
-
MongoTransactionManager
public MongoTransactionManager(MongoDatabaseFactory dbFactory, @Nullable com.mongodb.TransactionOptions options) Create a newMongoTransactionManagerobtaining sessions from the givenMongoDatabaseFactoryapplying the givenoptions, if present, when starting a new transaction.- Parameters:
dbFactory- must not be null.options- can be null.
-
-
Method Details
-
doGetTransaction
- Specified by:
doGetTransactionin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
isExistingTransaction
protected boolean isExistingTransaction(Object transaction) throws org.springframework.transaction.TransactionException - Overrides:
isExistingTransactionin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doBegin
protected void doBegin(Object transaction, org.springframework.transaction.TransactionDefinition definition) throws org.springframework.transaction.TransactionException - Specified by:
doBeginin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doSuspend
protected Object doSuspend(Object transaction) throws org.springframework.transaction.TransactionException - Overrides:
doSuspendin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doResume
- Overrides:
doResumein classorg.springframework.transaction.support.AbstractPlatformTransactionManager
-
doCommit
protected final void doCommit(org.springframework.transaction.support.DefaultTransactionStatus status) throws org.springframework.transaction.TransactionException - Specified by:
doCommitin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.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 aMongoExceptionholding error labels.
By default those labels are ignored, nevertheless one might check fortransient commit errors labelsand 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
protected void doRollback(org.springframework.transaction.support.DefaultTransactionStatus status) throws org.springframework.transaction.TransactionException - Specified by:
doRollbackin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doSetRollbackOnly
protected void doSetRollbackOnly(org.springframework.transaction.support.DefaultTransactionStatus status) throws org.springframework.transaction.TransactionException - Overrides:
doSetRollbackOnlyin classorg.springframework.transaction.support.AbstractPlatformTransactionManager- Throws:
org.springframework.transaction.TransactionException
-
doCleanupAfterCompletion
- Overrides:
doCleanupAfterCompletionin classorg.springframework.transaction.support.AbstractPlatformTransactionManager
-
setDbFactory
Set theMongoDatabaseFactorythat this instance should manage transactions for.- Parameters:
dbFactory- 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.
-
getDbFactory
Get theMongoDatabaseFactorythat this instance manages transactions for.- Returns:
- can be null.
-
getResourceFactory
- Specified by:
getResourceFactoryin interfaceorg.springframework.transaction.support.ResourceTransactionManager
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean
-