Метод ArroundInvoke вызывается, если он был вызван из другого метода ejb? - PullRequest
1 голос
/ 29 ноября 2011

У меня следующий случай:

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

}


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

Вызывает ли ejbMethod2 выполнение ДВУХ перехватчиков?

Спасибо.

1 Ответ

0 голосов
/ 29 ноября 2011

Я предполагаю, что вы имеете в виду аннотацию @Interceptors (множественное число), которая определяет класс перехватчика, который будет вызываться при вызове аннотированного метода.@Interceptor аннотация (в единственном числе) предназначена для аннотирования класса, который является перехватчиком.

Если это так, короткий ответ: no .

Перехватчик выполняетсяконтейнер.Если ваш вызов метода не пройдет через контейнер, то он не будет перехвачен.

Поэтому следующий вызов ejbMethod1():

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

won 't MyInterceptClass активировать, так как это локальный вызов (не EJB).

Если вы хотите снова вызвать перехватчик, вам следует использовать бизнес-интерфейс, например:

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

Это сделает вызов с поддержкой EJB и ударит перехватчик.при вызове ejbMethod1().

...