我需要将一个单例bean注入会话bean。以下是相应的课程。问题是注入的对象始终为null。我尝试了我的JBoss 7.0.1服务器在启动期间向我显示的JNDI查找字符串的全部(即,部署单元子部署中部署的名为GlobalBean的会话bean的 JNDI绑定...如下: ..)。我还尝试在GlobalBean.java中注释掉@EJB注释,并尝试在注入期间使用“ejb / GlobalBean”。但是,没有运气。可能是什么原因? THX。
GlobalBean.java:
@Startup
@Singleton
@Remote(GlobalBeanRemote.class)
@EJB(name="ejb/GlobalBean", beanName="GlobalBean", beanInterface=GlobalBeanRemote.class)
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class GlobalBean implements GlobalBeanRemote
{
// CODE
}
SessionBean.java:
@Stateful
public class SessionBean extends ParentBean
{
@EJB(name="java:module/GlobalBean!project.framework.interfaces.GlobalBeanRemote")
private GlobalBeanRemote globalBeanAPI3;
// CODE
}
答案 0 :(得分:3)
在SessionBean类中,尝试将@EJB的name属性更改为mappedName。
@EJB(mappedName="java:module/GlobalBean!project.framework.interfaces.GlobalBeanRemote")
当然,只有当你的两个bean在同一个模块中时才会有效。
<强>更新强> 鉴于您的bean位于不同的模块中,请尝试使用java:app命名空间:
@EJB(mappedName="java:app ...")
java:app命名空间用于查找在同一应用程序中打包的本地企业bean。也就是说,企业bean打包在包含多个Java EE模块的EAR文件中。使用java:app命名空间的JNDI地址具有以下形式:
java:app [/ module name] / enterprise bean name [/ interface name]
还尝试删除GlobalBean的@EJB注释。 @EJB用于定义依赖项。