【问题标题】:@Inject not working EJB calls its own method@Inject 不工作 EJB 调用它自己的方法
【发布时间】:2013-02-13 20:23:26
【问题描述】:

平台:JBoss AS 7.1.1。

我有一个无状态 bean 方法,它需要调用同一个 bean 的另一个方法,但必须通过 EJB 容器。

@Stateless
public class OrderManager {
    @Resource
    SessionContext ctx;
    @Inject
    MailUtil mm;
    Logger logger = Logger.getLogger("Test");

    public void method1() {
        if (mm == null) {
            logger.info("MailUtil is null");
        }

        ctx.getBusinessObject(OrderManager.class).method2();
    }

    @Asynchronous
    public void method2() {
        if (mm == null) {
            logger.info("MailUtil is null");
        }
    }
}

不幸的是,注入的变量 mm 在 method2() 中为空。而在 method1() 中,存在一个正确注入的 mm 变量。

这是 JBOss 的缺陷,还是我做错了什么?谢谢。

【问题讨论】:

  • 您是否尝试过直接注入对象而不是使用 SessionContext.getBusinessObject?
  • 是的,我尝试使用@EJB 进行注入。结果相同。
  • Jin,我知道你指出的那个问题。我的代码已经在使用 EJB 代理来调用 method2()。异步行为工作得很好。这个问题的核心问题是 method2() 没有发生注入。即使我删除 @Asynchronous 也会发生这种情况。

标签: jboss7.x cdi ejb-3.1


【解决方案1】:

根据 Pete Muir 的说法,这是一个错误,但是,我们不确定它是否已修复。尝试更新版本的 JBoss(从源代码构建)将起作用。如果仍然存在问题,请创建bug report

【讨论】:

  • 我创建了一个简单的测试用例,现在似乎在 7.1.1 和 7.2 中都可以使用,奇怪!在 7.2 中尝试实际失败的代码需要更长的时间。
【解决方案2】:

我在使用 WebSphere 8.5.5.5 时也发生了同样的事情。自注入的 bean 在 注入的 bean 中有 null。

解决方案是将第二种方法从private 更改为public

【讨论】:

    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 2015-04-21
    • 2014-06-19
    相关资源
    最近更新 更多