DATAMONGO-2005 - Use Flux.usingWhen for resource management in reactive transactions.

Original pull request: #574.
This commit is contained in:
Christoph Strobl
2018-06-14 14:55:51 +02:00
committed by Mark Paluch
parent ed1f2c7833
commit c1d840d87d

View File

@@ -519,22 +519,8 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
session.startTransaction();
}
return ReactiveMongoTemplate.this.withSession(action, session) //
.materialize() //
.flatMap(signal -> {
if (session.hasActiveTransaction()) {
if (signal.isOnComplete()) {
return Mono.from(session.commitTransaction()).thenReturn(signal);
}
if (signal.isOnError()) {
return Mono.from(session.abortTransaction()).thenReturn(signal);
}
}
return Mono.just(signal);
}) //
.<T> dematerialize() //
.doFinally(signalType -> {
return Flux.usingWhen(Mono.just(session), s -> ReactiveMongoTemplate.this.withSession(action, s),
ClientSession::commitTransaction, ClientSession::abortTransaction).doFinally(signalType -> {
doFinally.accept(session);
});
});