2

我有一个 RESTFul 服务(由 jersey 实现)。该服务标有@Transactional。

我像这样声明了一个 ExceptionMapper:

@Provider
public class ThrowableMapper implements ExceptionMapper<Throwable> {
    private static final Logger log = Logger.getLogger(ThrowableMapper.class);

    public Response toResponse(Throwable ex) {
        log.error("throwable", ex);
        return Response.status(500).entity("Internal Error").type("text/plain").build();
    }
}

当未声明异常映射器时,事务将回滚。但是,当我有一个 ExceptionMapper 事务时,事务是提交而不回滚。

我假设事务不回滚的原因是因为当 ExceptionMapper 捕获异常时,spring 事务代理不会检测到异常被抛出,所以事务不回滚。

有没有办法克服这个问题?

4

1 回答 1

0

这不是最干净的解决方案,但没有找到其他任何东西。我将此添加到 ExceptionMapper:

TransactionAspectSupport.currentTransactionStatus( ).setRollbackOnly();
于 2013-09-03T07:00:12.263 回答