package com.vtence.molecule.middlewares; import com.vtence.molecule.FailureReporter; import com.vtence.molecule.Request; import com.vtence.molecule.Response; public class FailureMonitor extends AbstractMiddleware { private final FailureReporter reporter; public FailureMonitor(FailureReporter reporter) { this.reporter = reporter; } public void handle(Request request, Response response) throws Exception { try { forward(request, response).whenFailed((result, error) -> reporter.errorOccurred(error)); } catch (Throwable error) { reporter.errorOccurred(error); throw error; } } }