【问题标题】:rollback transaction when mapping exception to responses with Jersey ExceptionMapper使用 Jersey ExceptionMapper 将异常映射到响应时回滚事务
【发布时间】:2019-03-06 16:23:08
【问题描述】:

我正在使用自定义 Jersey ExceptionMapper 将未经检查的异常映射到错误响应中(如 documentation 中所述)。我的问题是事务没有回滚,在异常之前所做的每个数据库修改都被持久化了。

如果我不使用 ExceptionMapper,而是抛出 WebApplicationException,也会发生同样的事情。

如何向客户端发送错误响应以保持正常行为(回滚事务)? 我发现了一个类似的问题here,但是我没有使用spring。

【问题讨论】:

    标签: exception transactions jersey


    【解决方案1】:

    您可以使用RequestEventListener 在请求的整个生命周期内管理事务。您可以侦听RequestEvent.Types,其中包括RESOURCE_METHOD_STARTON_EXCEPTIONRESOURCE_METHOD_FINISH 等事件。您可以在请求处理开始时开始事务并提交或回滚事务,具体取决于它是否处理成功或抛出异常。

    这几乎就是Dropwizard@UnitOfWork 所做的事情。你可以在this package 中看到它是如何实现的。看看UnitOfWorkApplicationEventListener。你会看到他们是如何实现我上面所说的。

    【讨论】:

    • 嗨,保罗,感谢您的提示!我还在keycloak源代码here..中找到了一个可能的解决方案,以防其他人遇到同样的问题。
    猜你喜欢
    • 2015-03-14
    • 2017-01-01
    • 2015-10-28
    • 1970-01-01
    • 2016-08-14
    • 2013-11-18
    • 2013-10-16
    • 2012-05-06
    • 2012-12-28
    相关资源
    最近更新 更多