Browse Source

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

Original pull request: #574.
pull/578/merge
Christoph Strobl 8 years ago committed by Mark Paluch
parent
commit
c1d840d87d
  1. 18
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java

18
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java

@ -519,22 +519,8 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati @@ -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);
});
});

Loading…
Cancel
Save