通过远程接口将单例bean注入会话bean,对象总是“null”

时间:2012-08-23 18:52:41

标签: dependency-injection ejb jboss7.x

我需要将一个单例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
}

1 个答案:

答案 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用于定义依赖项。