Transaktionen
Erklärt die MongoDB ClientSession-Transaktion von getTxJob, die Sitzungsweitergabe im Reactor-Kontext, die Verantwortung für Wiederholungen und die Grenzen der Spring-Transaktion.
getTxJob
getTxJob(...) öffnet die ClientSession mit MongoExecutionContext.startSession(), startet die Transaktion und bindet die Sitzung an den Reactor-Kontext. Bei erfolgreichem Abschluss wird ein Commit durchgeführt, bei Fehlern/Abbrüchen wird die aktive Transaktion abgebrochen, und am Ende wird die Sitzung geschlossen.
Sitzungsbereich
Die Transaktionssitzung wird nur an die gleiche DSL-Ausführung von MongoExecutionContext#getSessionScope() weitergegeben. Der Standard DriverMongoExecutionContext verwendet seinen eigenen MongoClient als Sitzungsbereich.
Die Verantwortung für das Transaktions-Retry liegt beim Aufrufer.
getTxJob(...) führt kein automatisches Retry bei MongoDB-Transaktionsfehlern wie TransientTransactionError durch. Ob und wie oft ein Retry erfolgt, wird von der Idempotenz der Operation, externen Nebeneffekten und den Geschäftsregeln der aufrufenden Anwendung entschieden.
Grenzen zu Spring-Transaktionen
Spring @Transactional / TransactionalOperator
Grenzen der Transaktionen/Sitzungen, die von Spring Data MongoDB verwaltet werden.
ReactiveMongoDsl#getTxJob
DSL startet direkt ClientSession und übergibt es an den Reactor Context.