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トランザクションがある場合、ロールバックなしでコミットされます。

トランザクションがロールバックされない理由は、ExceptionMapper によって例外がキャッチされたときに、Spring トランザクション プロキシが例外がスローされたことを検出しないためであると想定しているため、トランザクションはロールバックされません。

これを克服する方法はありますか?

4

1 に答える 1

0

これは最もクリーンな解決策ではありませんが、他に何も見つかりませんでした。これを ExceptionMapper に追加します。

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