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);
    }
}

Это работает, но выглядит как обходной путь, и мне не нравится это решение. Так что в основном мне нужно запустить перехватчик из транзакции. Как я могу это сделать?

0 ответов

Другие вопросы по тегам