Transactions
Explique la transaction ClientSession MongoDB de getTxJob, la propagation de session du contexte Reactor, la responsabilité de retry et les frontières de transaction Spring.
getTxJob
getTxJob(...) ouvre un ClientSession avec MongoExecutionContext.startSession(), commence la transaction, puis lie la session au contexte Reactor. En cas de succès, il effectue un commit, en cas d'erreur/annulation, il abandonne la transaction active, et enfin ferme la session.
Portée de session
La session de transaction est propagée uniquement à la même exécution DSL par MongoExecutionContext#getSessionScope(). Le DriverMongoExecutionContext par défaut utilise son propre MongoClient comme portée de session.
La responsabilité de la réessai de transaction incombe à l'appelant.
getTxJob(...) ne réessaie pas automatiquement les erreurs de transaction MongoDB comme TransientTransactionError. La décision de réessayer et le nombre de tentatives sont déterminés par l'idempotence de l'opération, les effets secondaires externes et les règles métier connues de l'application appelante.
Frontière avec la transaction Spring.
Spring @Transactional / TransactionalOperator.
Frontière de transaction/session gérée par Spring Data MongoDB.
ReactiveMongoDsl#getTxJob.
Le DSL démarre directement le ClientSession et le transmet au contexte Reactor.