Skip to content

Instantly share code, notes, and snippets.

@tteggel
Last active November 22, 2017 16:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tteggel/cf12bbbc7ebf7d6b5df5053f0d800c7a to your computer and use it in GitHub Desktop.
Save tteggel/cf12bbbc7ebf7d6b5df5053f0d800c7a to your computer and use it in GitHub Desktop.
public void book2(TripReq input) {
Flow f = Flows.currentFlow();
FlowFuture<BookingRes> flightFuture =
f.invokeFunction("./flight/book", input.flight, BookingRes.class);
FlowFuture<BookingRes> hotelFuture =
f.invokeFunction("./hotel/book", input.hotel, BookingRes.class);
FlowFuture<BookingRes> carFuture =
f.invokeFunction("./car/book", input.carRental, BookingRes.class);
flightFuture.thenCompose(
(flightRes) -> hotelFuture.thenCompose(
(hotelRes) -> carFuture.whenComplete(
(carRes, e) -> EmailReq.sendSuccessMail(flightRes, hotelRes, carRes)
)
.exceptionallyCompose( (e) -> cancel("./car/cancel", input.carRental, e) )
)
.exceptionallyCompose( (e) -> cancel("./hotel/cancel", input.hotel, e) )
)
.exceptionallyCompose( (e) -> cancel("./flight/cancel", input.flight, e) )
.exceptionally( (err) -> {EmailReq.sendFailEmail(); return null;} );
}
private static FlowFuture<BookingRes> cancel(String cancelFn, Object input, Throwable e) {
Flows.currentFlow().invokeFunction(cancelFn, input, BookingRes.class);
return Flows.currentFlow().failedFuture(e);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment