当我尝试从一个应用程序中的另一个模块访问 EJB 时,我得到了 NullPointerException。
我将解释一个更准确的例子。
EAR 结构如下:
EAR
|
— core.jar (EJB-module with core EJB) — application core
|
— app.jar (another EJB-module with EJBs) — business logic here
|
— web.war (servlets)
在 code.jar 有 EJB:
@LocalBean
@Singleton
@Startup
public class AppInfo(){
private int counter;
public void incCounter(){
counter++;
}
public int getCounterValue(){
return counter;
}
}
在模块 app.jar 中,我们有无状态 EJB,它尝试读取计数器。
@Stateless
public class SomeBean{
@EJB private AppInfo appinfo;
public void run(){
int counter = appInfo.getCounterValue(); // here method throws with NPE
System.out.println("Counter value is: "+counter);
}
}
在模块 web.war 中,有一个 servlet 为每个请求增加计数器值:
public class MyServlet extends HttpServlet{
@EJB private AppInfo appInfo;
protected void doPost(params){
appInfo.incCounter();
...
other code
}
}
在调试时,我检测到: 在 servlet 注入工作良好:输入 doPost() 时,appInfo 是 AppInfo EJB 的代理对象。在 SomeBean 有 NPE:在 appInfo = null 的 run() 入口点值。
如何正确地将 EJB 从 core.jar 注入 App 中的另一个 EJB?
PS 我将 EAR 部署到 JBoss 6.1 EAP PSS 我也尝试使用 @Remote: not working (appInfo is still equals null)