1

我需要将一个单例 bean 注入会话 bean。下面是对应的类。问题是注入的对象始终为空。我尝试了我的 JBoss 7.0.1 服务器在启动期间显示给我的所有JNDI 查找字符串(即部署单元子部署中名为 GlobalBean 的会话 bean 的 JNDI 绑定..部署..如下: ..)。我还尝试在 GlobalBean.java 中注释掉 @EJB 注释,并尝试在注入期间使用“ejb/GlobalBean”。然而,没有运气。可能是什么原因?谢谢。

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
}

会话Bean.java:

@Stateful
public class SessionBean extends ParentBean
{
      @EJB(name="java:module/GlobalBean!project.framework.interfaces.GlobalBeanRemote")
      private GlobalBeanRemote globalBeanAPI3;

      // CODE
}
4

1 回答 1

3

在您的 SessionBean 类中,尝试将 @EJB 的名称属性更改为 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[/模块名称]/企业bean名称[/接口名称]

还可以尝试删除 GlobalBean 的 @EJB 注释。@EJB 用于定义依赖项。

于 2012-08-23T23:31:21.500 回答