Transações
Explica a transação do MongoDB ClientSession do getTxJob, a propagação de sessão do Reactor Context, a responsabilidade de retry e as fronteiras da transação do Spring.
getTxJob
getTxJob(...) abre uma ClientSession com MongoExecutionContext.startSession(), inicia a transação e insere o binding da sessão no Contexto Reactor. Em caso de conclusão normal, faz commit; em caso de erro/cancelamento, aborta a transação ativa; e, por fim, fecha a sessão.
Escopo da sessão
A sessão de transação é propagada apenas para a mesma execução DSL com MongoExecutionContext#getSessionScope(). O DriverMongoExecutionContext padrão usa seu próprio MongoClient como escopo de sessão.
A responsabilidade pela repetição da transação é do chamador.
getTxJob(...) não tenta automaticamente repetir erros de transação do MongoDB, como TransientTransactionError. A decisão sobre a repetição e o número de tentativas é feita pela aplicação chamadora, que conhece a idempotência da operação, efeitos colaterais externos e regras de negócios.
Limite com transações Spring.
Spring @Transactional / TransactionalOperator.
Limite de transação/sessão gerenciado pelo Spring Data MongoDB.
ReactiveMongoDsl#getTxJob.
O DSL inicia diretamente o ClientSession e o passa para o Contexto Reactor.