【问题标题】:Inject singleton bean into session bean via remote interface, object always "null"通过远程接口将单例 bean 注入会话 bean,对象始终为“null”
【发布时间】:2012-08-23 18:52:40
【问题描述】:

我需要将一个单例 bean 注入会话 bean。下面是对应的类。问题是注入的对象始终为空。我尝试了 all 我的 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
}

SessionBean.java:

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

      // CODE
}

【问题讨论】:

    标签: dependency-injection ejb jboss7.x


    【解决方案1】:

    在您的 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 用于定义依赖关系。

    【讨论】:

    • 这样做给了我一个运行时错误:org.jboss.msc.service.DuplicateServiceException: Service jboss.naming.context.java.app."Project".project-modules-global-ejb .GlobalBean 已注册。 PS。它们位于不同的模块中。
    • 按照你的建议做了,现在启动时没有错误,但引用仍然为空。
    • 您没有在 SessionBean 的构造函数中引用 globalBeanAPI3,是吗?
    • 通过使用 InitialContext 和查找解决了这个问题。我是。 :-) 哦不,注入的字段是否仅在构造函数完成后才初始化?
    • 完全正确:) 必须先创建对象,然后容器才能向其中注入任何东西。如果你想做一些初始化,只需添加一个带有@PostConstruct 的方法。在 PostConstruct 注释的方法中,注入的字段将可用(如果注入成功)。
    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2011-01-02
    • 2011-12-29
    • 2023-02-26
    相关资源
    最近更新 更多