Jboss EJB主类的NoClassDefFoundError

Jboss EJB主类的NoClassDefFoundError,jboss,ejb,Jboss,Ejb,我正在使用JBoss4.2.3、EJB2、XDoclet,并且部署了一个EAR,其中包含EJB,其他EAR中包含各种网站 当尝试从其中一个网站访问EJB时,我得到NoClassDefFoundError。 看来查找是成功的。例如,我可以看到getContext.lookupsecurityservicemotehome.JNDI_NAME返回$Proxy266类的内容。我还在JBoss的JNDI视图中看到了这个绑定: remote (proxy: $Proxy266 implements int

我正在使用JBoss4.2.3、EJB2、XDoclet,并且部署了一个EAR,其中包含EJB,其他EAR中包含各种网站

当尝试从其中一个网站访问EJB时,我得到NoClassDefFoundError。 看来查找是成功的。例如,我可以看到getContext.lookupsecurityservicemotehome.JNDI_NAME返回$Proxy266类的内容。我还在JBoss的JNDI视图中看到了这个绑定:

remote (proxy: $Proxy266 implements interface com.icumed.ifactory.service.session.SecurityServiceRemoteHome,interface javax.ejb.Handle)
仅供参考,securityservicemotehome.JNDI_NAME=ejb/ifactory/SecurityService/remote

在查找之后,我将其称为,这就是引发错误的地方:

home = (SecurityServiceRemoteHome)PortableRemoteObject.narrow(obj,
    SecurityServiceRemoteHome.class);

我听说这可能是不必要的,我可以在这里直接进行类型转换,但我认为这不是问题所在。从我目前在网上看到的情况来看,似乎SecurityServiceRemoteHome无法完全加载。也许缺少一些辅助类?不过,我没有看到任何错误表明这一点。调试这个的最佳方法是什么?

在深入研究之后,我找到了答案。它与jboss-app.xml文件和loader repository元素有关。背景是我以前有一个完整的EAR文件,其中包含所有WAR和EJB。我已经决定将它们分开,当我这样做时,我修改了jboss-app.xml文件,以便每个文件的归档名称都不同。那是错误的。ejb的EAR和WARs的EAR必须相同是的,如果只是一场战争,我并不需要EAR文件……除了OC4J。此外,我必须让loader repository元素具有存档名称。忽略这一点会导致其他问题。

好的,这不是问题。我添加了一些调试,并且能够记录超类、接口、方法返回类型和方法参数的每个类定义。那么,如何才能找到第一类def,SecurityServiceRemoteHome呢?啊,这里有一些东西可以帮助你帮助我。异常的扩展消息是:java.lang.ClassNotFoundException:找不到的类加载器:…SecurityServiceRemoteHome和SecurityServiceRemoteHome以及它所依赖的每个类似乎都有相同的类加载器:org.jboss.mx.loading.UnifiedClassLoader3M我的解决方案可能会帮助您[此处][1]: