1

我正在将应用程序从 JBoss 4.0.4 迁移到 JBoss 6.1。有一个 jar 包含一些 2.1 版 EJB。其中一个会话 bean 具有查找实体 bean 的静态初始化程序。这在 4.0.4 中工作正常,但在启动 JBoss 6.1 时出现此错误 - “javax.naming.NameNotFoundException:mymod 未绑定”。

static
{
    MyEntityBeanLocalHome lhpt = MyEntityBeanUtil.getLocalHome();
    Collection things = lhpt.findAll();
    populate a static HashMap with things
}

上面的 getLocalHome 行会引发异常,该行执行以下操作:

InitialContext ic = new InitialContext(null);
Object objRef = ic.lookup("ejb/mymod/MyEntityBeanLocal");          <-- fails here
if (java.rmi.Remote.class.isAssignableFrom(MyEntityBeanLocalHome.class))
    return javax.rmi.PortableRemoteObject.narrow(objRef, MyEntityBeanLocalHome.class);
else
    return objRef;

我对 JBoss 4.0.4 中正确部署的 jar 感到有点惊讶——毕竟,为什么实体 bean 应该在原始编码器试图查找它的时候绑定到 JNDI?

但我想就什么是解决这个问题的最佳方法提出一些意见。会话 bean 是无状态的,因此将静态代码移动到 ejbActivate 不是一种选择。我正在考虑创建一个从会话 bean 的业务方法访问的 POJO,并让该 POJO 检索实体(仅一次)。

感谢您提供任何有用的意见。

保罗

4

0 回答 0