【发布时间】:2013-11-03 07:10:46
【问题描述】:
当我尝试从一个应用程序中的另一个模块访问 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: at run() entry point of appInfo = null。
如何正确地将 EJB 从 core.jar 注入 App 中的另一个 EJB?
附:我将 EAR 部署到 JBoss 6.1 EAP P.S.S.我也尝试过使用@Remote: not working (appInfo is still equals null)
【问题讨论】:
标签: java jakarta-ee jboss ejb ejb-3.1