使用Jersey ExceptionMapper将异常映射到响应时的回滚事务

问题描述 投票:2回答:1

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

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

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

exception transactions jersey
1个回答
1
投票

您可以做的是使用RequestEventListener在请求的整个生命周期内管理事务。您可以监听RequestEvent.Types,其中包括RESOURCE_METHOD_STARTON_EXCEPTIONRESOURCE_METHOD_FINISH等事件。您可以在请求处理开始时开始事务,并根据成功处理或抛出异常来提交或回滚事务。

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

© www.soinside.com 2019 - 2024. All rights reserved.