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 トランザクション プロキシが例外がスローされたことを検出しないためであると想定しているため、トランザクションはロールバックされません。
これを克服する方法はありますか?