У меня есть перехватчик EJB, который должен перехватить и обработать все исключение, которое было сгенерировано в транзакции:
public class ExceptionsInterceptor {
@AroundInvoke
public Object intercept(final InvocationContext invocationContext) throws Exception {
try {
return invocationContext.proceed();
} catch (Exception e) {
throw new MyException(e);
}
}
}
Но если во время сброса hibernate PesistenceException
из-за нарушения ограничения, я не могу поймать это исключение,Я понял, что hibernate действительно сбрасывается после окончания работы моего Interceptor.Но мне нужно перехватить все исключения.
Чтобы реализовать это, я украсил этот EJB другим EJB.
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED_NEW)
public class TargetServiceBean implements TargetServiceLocal {
@Override
public boolean method1(Integer digit) {
.. some code which my generate exception..
}
}
@Stateless
@Interceptors(ExceptionsInterceptor.class)
public class TargetServiceBean implements TargetServiceDecorator {
@Inject
private TargetServiceLocal service;
@Override
public boolean method1(Integer digit) {
service.method1(digit);
}
}
Это работает, но выглядит как обходной путь, и мне не нравится это решение.Так что в основном мне нужно запустить перехватчик из транзакции.Как я могу это сделать?