Skip to content

Commit c1d840d

Browse files
christophstroblmp911de
authored andcommitted
DATAMONGO-2005 - Use Flux.usingWhen for resource management in reactive transactions.
Original pull request: spring-projects#574.
1 parent ed1f2c7 commit c1d840d

File tree

1 file changed

+2
-16
lines changed

1 file changed

+2
-16
lines changed

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

+2-16
Original file line numberDiff line numberDiff line change
@@ -519,22 +519,8 @@ public <T> Flux<T> execute(ReactiveSessionCallback<T> action, Consumer<ClientSes
519519
session.startTransaction();
520520
}
521521

522-
return ReactiveMongoTemplate.this.withSession(action, session) //
523-
.materialize() //
524-
.flatMap(signal -> {
525-
526-
if (session.hasActiveTransaction()) {
527-
if (signal.isOnComplete()) {
528-
return Mono.from(session.commitTransaction()).thenReturn(signal);
529-
}
530-
if (signal.isOnError()) {
531-
return Mono.from(session.abortTransaction()).thenReturn(signal);
532-
}
533-
}
534-
return Mono.just(signal);
535-
}) //
536-
.<T> dematerialize() //
537-
.doFinally(signalType -> {
522+
return Flux.usingWhen(Mono.just(session), s -> ReactiveMongoTemplate.this.withSession(action, s),
523+
ClientSession::commitTransaction, ClientSession::abortTransaction).doFinally(signalType -> {
538524
doFinally.accept(session);
539525
});
540526
});

0 commit comments

Comments
 (0)