我正在将应用程序从JBoss 4.0.4迁移到JBoss 6.1。有一个jar有一些2.1版EJB。其中一个会话bean有一个静态初始化程序,用于查找实体bean。这在4.0.4中运行正常但在启动JBoss 6.1时出现此错误 - “javax.naming.NameNotFoundException:mymod not bound”。
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不是一种选择。我正在考虑创建一个POJO,它可以从会话bean的业务方法访问,并让POJO检索实体(仅一次)。
感谢您提供任何有用的信息。
保