1

I have an EJB Interceptor which should catch and process all exception which was thrown in transaction:

public class ExceptionsInterceptor {

@AroundInvoke
public Object intercept(final InvocationContext invocationContext) throws Exception {
    try {
        return invocationContext.proceed();
    } catch (Exception e) {
        throw new MyException(e);

    }
   }
}

But if during hibernate flush thrown PesistenceException because of constraint violation I can't catch this exception. I understood that hibernate do flush after my Interceptor finish work. But I need catch all exception.

To implement this I've decorate this EJB by other 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);
    }
}

It works but looks like workaround and I don't like this solution. So basically I need to run interceptor out of transaction. How can I do this?

aggredi
  • 406
  • 3
  • 11

0 Answers0