отдыхает WebService, что управлять его операцией, используя следующий подход:Как Предпочитать CDI перехватчик над JAX-RS ExceptionMapper
@Inherited
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({METHOD, TYPE, FIELD, PARAMETER})
public @interface TransactionRequired {
}
@Interceptor
@TransactionRequired
public class TransactionRequiredInterceptor {
@Inject
private EntityManager entityManager;
@AroundInvoke
public Object manageTransaction(InvocationContext ctx) {
try {
..start transaction..
}
catch(Exception e) {
..rollback..
}
}
}
И я также отображающий мои исключения, как это:
@Provider
public class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException> {
@Override
public Response toResponse(RuntimeException exception) {
.. return some response..
}
}
Проблема заключается в том, что когда, скажем, генерируется исключение RuntimeException (после запуска транзакции), он немедленно перехватывается RuntimeExceptionMapper, и транзакция никогда не откатется.
Быть так, мне нужен способ Предпочитать в TransactionRequiredInterceptor ..
Obs: Использование @Transactional не вариант, так как мне нужно развернуть на Tomcat 8.
Похоже, вы перехватываете весь метод ресурсов. Я предполагаю, что вы вызываете EM внутри метода ресурсов. Почему бы вам не добавить слой DAO и перехватить вызовы DAO. –