У меня есть компонент EJB, который доступен для двух интерфейсов, как показано ниже: локальный интерфейс для моего веб-приложения, а удаленный интерфейс для моего клиента приложения.
@Stateless
public class CoreMainEJB implements CoreMainEJBRemote, CoreMainEJBLocal {
//...
}
поэтому мой клиент приложения выглядит так, как показано ниже. В этом случае происходит удаленный вызов метода
public class Main {
@EJB
private static CoreMainEJBRemote coreEJBRemote;
public static void main(String[] args) {
coreEJBRemote.process(args[0]);
}
}
Из моего веб-приложения я вызываю, как показано ниже. В этом случае происходит вызов локального метода
@ManagedBean
@RequestScoped
public class DisplayInbound {
@EJB
private CoreMainEJBLocal coreMainEJBLocal;
public void processPackages() {
coreMainEJBLocal.process(...);
}
}
Итак, вот мой вопрос: Если EJB предоставляет только интерфейс @Remote, но в ваше веб-приложение вы внедряете компонент EJB напрямую вместо его интерфейса Remote, вызовет ли это удаленный вызов или локальный вызов? Например:
@Stateless
public class CoreMainEJB implements CoreMainEJBRemote{
//...
}
и в веб-приложении я делаю это
@EJB
private CoreMainEJB coreMainEJB;
public void processPackages() {
coreMainEJB.process(...); //Is this local or remote invocation here?
}