【问题标题】:NoClassDefFoundError for EJB Home classEJB Home 类的 NoClassDefFoundError
【发布时间】:2012-03-08 18:20:07
【问题描述】:

我正在使用 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 可能无法完全加载。也许缺少一些辅助课程?不过,我没有看到任何表明这一点的错误。调试此问题的最佳方法是什么?

【问题讨论】:

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

标签: jboss ejb


【解决方案1】:

经过更多的挖掘,我找到了答案。它与 jboss-app.xml 文件和 loader-repository 元素有关。背景是我之前有一个完整的 EAR 文件,其中包含所有 WAR 和 EJB。我决定将它们分开,当我这样做时,我修改了 jboss-app.xml 文件,以便每个文件的存档名称都不同。那是错误的。它们在 EJB 的 EAR 和 WAR 的 EAR 之间必须相同(是的,如果它只是一个 WAR,我真的不需要 EAR 文件……OC4J 除外)。此外,我必须让 loader-repository 元素与存档名称一起出现。忽略它会导致其他问题。

【讨论】:

    猜你喜欢
    • 2015-08-20
    • 2019-06-25
    • 2017-11-09
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多