Transactions
getTxJobのMongoDB ClientSessionトランザクション、Reactorコンテキストセッション伝播、リトライ責任とSpringトランザクション境界を説明します。
getTxJob
getTxJob(...)はMongoExecutionContext.startSession()でClientSessionを開き、トランザクションを開始した後、Reactorコンテキストにセッションバインディングを入れます。正常に完了した場合はコミット、エラー/キャンセル時はアクティブトランザクションを中止し、最後にセッションをクローズする順序で処理します。
セッションスコープ
トランザクションセッションはMongoExecutionContext#getSessionScope()が同じDSL実行にのみ伝播されます。基本のDriverMongoExecutionContextは自身のMongoClientをセッションスコープとして使用します。
トランザクションの再試行は呼び出し側の責任です。
getTxJob(...) は TransientTransactionError のような MongoDB トランザクションエラーを自動的に再試行しません。再試行の有無と回数は、操作の冪等性、外部の副作用、業務ルールを知っている呼び出しアプリケーションが決定します。
Spring トランザクションとの境界
Spring @Transactional / TransactionalOperator
Spring Data MongoDB が管理するトランザクション/セッションの境界です。
ReactiveMongoDsl#getTxJob
DSL が直接 ClientSession を開始し、Reactor コンテキストに渡します。