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,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
Nested ClassesModifier and TypeClassDescriptionprotected static classMongoDB 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
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 voiddoBegin(Object transaction, TransactionDefinition definition) protected 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(DefaultTransactionStatus status) protected Objectprotected voidprotected voiddoRollback(DefaultTransactionStatus status) protected voidprotected 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. -
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 classAbstractPlatformTransactionManager- Throws:
TransactionException
-
isExistingTransaction
- Overrides:
isExistingTransactionin classAbstractPlatformTransactionManager- Throws:
TransactionException
-
doBegin
protected void doBegin(Object transaction, TransactionDefinition definition) throws TransactionException - Specified by:
doBeginin classAbstractPlatformTransactionManager- Throws:
TransactionException
-
doSuspend
- Overrides:
doSuspendin classAbstractPlatformTransactionManager- Throws:
TransactionException
-
doResume
- Overrides:
doResumein classAbstractPlatformTransactionManager
-
doCommit
- Specified by:
doCommitin 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 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
- Specified by:
doRollbackin classAbstractPlatformTransactionManager- Throws:
TransactionException
-
doSetRollbackOnly
- Overrides:
doSetRollbackOnlyin classAbstractPlatformTransactionManager- Throws:
TransactionException
-
doCleanupAfterCompletion
- Overrides:
doCleanupAfterCompletionin classAbstractPlatformTransactionManager
-
setDbFactory
Set theMongoDatabaseFactorythat this instance should manage transactions for.- Parameters:
dbFactory- must not be null.
-
setOptions
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 interfaceResourceTransactionManager
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSetin interfaceInitializingBean
-