Search code examples
ejb-3.0stateless-session-beaninterceptor

Is the ArroundInvoke method gets invoked if it were invoked from another ejb method?


I've the following case:

@Interceptors(MyInterceptClass.class)
public void ejbMethod1()
{

}


@Interceptors(MyInterceptClass.class)
public void ejbMethod2()
{
    ejbMethod1();
}

Is calling ejbMethod2 causes TWO interceptor calls to be executed?

Thanks.


Solution

  • I'll assume you mean @Interceptors (plural) annotation which defines the interceptor class which will be invoked upon annotated method invocation. @Interceptor annotation (singular) is for annotating a class which is an interceptor.

    If so, then short answer is: no.

    The interceptor is executed by the container. If your method invocation will not go through the container, then it will not be intercepted.

    Therefore the following call to ejbMethod1():

    @Interceptors(MyInterceptClass.class) 
    public void ejbMethod2() {
        ejbMethod1(); 
    }
    

    won't activate the MyInterceptClass as it's the local call (non-EJB one).

    If you'd like to call the interceptor once again, you should use business interface, so something like:

    // Somewhere in the class
    @Resource
    SessionContext ctx;
    
    @Interceptors(MyInterceptClass.class) 
    public void ejbMethod2() {
        // This is explicit call which will go through the EJB Container
        ctx.getBusinessObject(YourEJBClass.class).ejbMethod1();
    }
    

    This will make the EJB-aware call and will hit the interceptor while invoking ejbMethod1().