【问题标题】:Injected EJB sometimes Null注入的 EJB 有时为 Null
【发布时间】:2010-02-17 18:21:52
【问题描述】:

我正在通过 @EJB 注释使用无状态 EJB...大多数时候一切正常,但似乎应该注入的内容有时会解析为 NULL,从而导致空指针异常.

什么可能导致这个间歇性问题?

【问题讨论】:

  • 是普通的无状态Bean吗?
  • 是的。我应该提到的。
  • 好的,那么它不应该发生。这是在某些特定负载下发生还是随机发生?另外,你用的是什么容器?
  • 我正在使用 Glassfish... 并且怀疑可能与内存不足有关...但不确定。

标签: ejb-3.0 ejb


【解决方案1】:

JBoss 4.x 不会自动将 EJB 注入 Servlet/JSP/POJO。但它也不会抱怨注释,它根本不会在运行时工作,并且对象将保持为 Null。您必须使用 JNDI 查找。

来自 JBoss 文档:

查找 EJB @EJB 注释是 可用于 servlet 和 JSP,但 不幸的是,我们还没有更新 tomcat 来支持它。还有,雄猫 使用旧的 XML 格式,所以你 也不能使用 XML。所以现在,你 必须通过其全局查找 EJB JNDI 名称。这不合规,但 如果你抽象得足够多,你就会 很好。

示例:

public void init() throws ServletException
   {
      super.init();
      try
      {
         InitialContext ctx = new InitialContext();

         // J2EE 1.5 has not yet defined exact XML <ejb-ref> syntax for EJB3
         CalculatorLocal calculator = (CalculatorLocal)ctx.lookup("tutorial/CalculatorBean/local");
         setCalculator(calculator);
      }
      catch (NamingException e)
      {
         throw new RuntimeException(e);
      }
}

请务必使用您的 EAR 名称作为您要查找的名称的第一个部分(上例中为 tutorial)。

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2012-05-11
    相关资源
    最近更新 更多