我正在使用JBoss 4.2.3,EJB2,XDoclet,并且已经在其中部署了一个带有EJB的EAR,以及其中包含各种网站的其他EAR。
当尝试从其中一个网站访问EJB时,我得到NoClassDefFoundError。
似乎查找成功。例如,我可以看到getContext().lookup(SecurityServiceRemoteHome.JNDI_NAME)
返回类“$ Proxy266”的内容。我也在JBoss的JNDI中看到了这个绑定:
remote (proxy: $Proxy266 implements interface com.icumed.ifactory.service.session.SecurityServiceRemoteHome,interface javax.ejb.Handle)
仅供参考,SecurityServiceRemoteHome.JNDI_NAME =“ejb / ifactory / SecurityService / remote”
在查找之后,我调用它,这是抛出错误的地方:
home = (SecurityServiceRemoteHome)PortableRemoteObject.narrow(obj,
SecurityServiceRemoteHome.class);
我听说这可能是不必要的,我可以在这里进行直接类型转换,但我不认为这是问题所在。从我到目前为止在网上看到的内容来看,似乎可能无法完全加载SecurityServiceRemoteHome。也许缺少一些辅助课程?但是,我没有看到任何错误。调试它的最佳方法是什么?
答案 0 :(得分:0)
经过更多的挖掘,我找到了答案。它与jboss-app.xml文件和loader-repository元素有关。背景是我之前有一个包含所有WAR和EJB的完整EAR文件。我决定将它们分开,当我这样做时,我修改了jboss-app.xml文件,以便每个文件的存档名称都不同。那是错的。它们在EJB的EAR和WAR的EAR之间必须相同(是的,如果它只是一个WAR,我真的不需要EAR文件......除了OC4J)。此外,我必须让loader-repository元素具有存档名称。离开这会导致其他问题。