gpt4 book ai didi

java - 从一个 EJB 模块注入(inject)另一个 EJB 模块

转载 作者:行者123 更新时间:2023-12-01 06:17:54 25 4
gpt4 key购买 nike

当我尝试从一个应用程序内的另一个模块访问 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 注入(inject)中效果很好:当输入 doPost() 时,appInfo 是 AppInfo EJB 的代理对象。在 SomeBean 中存在 NPE:在 run() 入口点值 appInfo = null。

如何正确地将 EJB 从 core.jar 注入(inject)到应用程序中的另一个 EJB?

附注我将 EAR 部署到 JBoss 6.1 EAP附言我还尝试使用@Remote:不起作用(appInfo 仍然等于 null)

最佳答案

我认为本地应该可以工作 - 这是在同一个应用程序中。

尝试完全限定的包名称:

@EJB(beanName="my.package.AppInfo")

关于java - 从一个 EJB 模块注入(inject)另一个 EJB 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19750667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com