EJB Перехватчик. Поймать исключение, если транзакция не зафиксирована
У меня есть EJB Interceptor, который должен отлавливать и обрабатывать все исключения, которые были брошены в транзакцию:
public class ExceptionsInterceptor {
@AroundInvoke
public Object intercept(final InvocationContext invocationContext) throws Exception {
try {
return invocationContext.proceed();
} catch (Exception e) {
throw new MyException(e);
}
}
}
Но если во время спящего сброса бросить 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);
}
}
Это работает, но выглядит как обходной путь, и мне не нравится это решение. Так что в основном мне нужно запустить перехватчик из транзакции. Как я могу это сделать?