Привет, Хабралюди!
При попытке получить EJB из другого модуля возникает NullPointerException.
Приведу пример, чтобы было понятнее.
Общая структура приложения такая:
EAR
|
— core.jar (EJB-модуль с основными бинами) — ядро приложения
|
— app.jar (другой EJB-модуль с бинами) — бизнес-логика
|
— web.war (сервлеты)
В code.jar объявлен такой EJB:
@LocalBean
@Singleton
@Startup
public class AppInfo(){
private int counter;
public void incCounter(){
counter++;
}
public int getCounterValue(){
return counter;
}
}
В модуле app.jar есть Stateless бин который пытается читать значение counter'a.
@Stateless
public class SomeBean{
@EJB private AppInfo appinfo;
public void run(){
int counter = appInfo.getCounterValue(); // здесь метод падает с NPE
System.out.println("Counter value is: "+counter);
}
}
В модуле web.war есть сервлет который, который при каждом запросе увеличивает счетчик:
public class MyServlet extends HttpServlet{
@EJB private AppInfo appInfo;
protected void doPost(params){
appInfo.incCounter();
...
other code
}
}
При дебаге видно:
В сервлете все работает: при входе в doPost() значение appInfo — это Proxy объект для AppInfo EJB.
В SomeBean возникает NPE: при входе в run() значение appInfo — null.
Как правильно инжектировать EJB из модуля Core в EJB из модуля App?
P.S. Деплоится EAR'ник на JBoss 6.1 EAP
P.S.S. Через Remote интерфейс пробовал: не работает (appInfo — null+NPE в методе)