gpt4 book ai didi

java - EJB 的类加载器问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:50:29 25 4
gpt4 key购买 nike

我正在开发一个项目,其中包括持久性库 (JPA 1.2)、EJB 3 和 Web 表示层 (JSF)。我使用 Eclipse 开发应用程序,并通过 eclipse 插件在 Websphere Application Server Community Edition (Geronimo 2.1.4) 上发布应用程序(但如果我手动发布,也会发生同样的情况)。发布到服务器时出现以下错误:

java.lang.NoClassDefFoundError: Could not fully load class: manager.administration.vehicles.VehicleTypeAdminBean
due to:manager/vehicles/VehicleType
in classLoader:
org.apache.geronimo.kernel.classloader.TemporaryClassLoader@18878c7
at org.apache.xbean.finder.ClassFinder.(ClassFinder.java:177)
at org.apache.xbean.finder.ClassFinder.(ClassFinder.java:146)...

在 web.xml 中我引用了 EJB:

<ejb-local-ref>
<ejb-ref-name>ejb/VehicleTypeAdmin</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local>manager.administration.vehicles.VehicleTypeAdmin</local>
<ejb-link>VehicleTypeAdminBean</ejb-link>
</ejb-local-ref>

EJB 项目引用了持久性项目,Web 项目引用了这两个项目。我没有收到任何编译错误,因此我认为类和引用是正确的。

我不知道这是否是应用程序服务器问题,但我之前使用相同的配置参数在同一服务器上运行了应用程序。

有人知道可能是什么问题吗?

最佳答案

在尝试创建/加载类 manager.administration.vehicles.VehicleTypeAdminBean 时,看起来几乎找不到类 manager.vehicles.VehicleType。

我以前也遇到过类似的问题。当类加载器尝试加载类时,它会查看 import 语句(以及其他类使用声明),然后尝试加载那些类,依此类推,直到到达链的底部(即 java.lang.Object)。如果它无法在链中找到一个类(在您的情况下,它看起来无法加载 VehicleType),那么它将声明它无法加载链顶部的类(在您的情况下 VehicleTypeAdminBean)。

VehicleType 类是否位于不同的 jar 中?如果您有 Web 模块和 EJB 模块,那么您是否在适当的位置拥有包含 VehicleType 类的 jar。有时,对于 Web 项目,您必须将 jar 放在 WebContent/WEB-INF/lib 文件夹中,否则它将找不到它们。

这两个项目是单独部署的(即两只耳朵?还是一只耳朵和一场 war ?)还是一起部署(即一只耳朵有 jar ,里面有一场 war ?)。我假设第二个你声明了你的 EJB 本地?

您所依赖的 jar 也必须在使用它的项目的 MANIFEST.MF 文件中声明。

我有点猜测,因为我不知道你的项目结构。表明这一点会有很大帮助。但我仍然会检查 VehicleType 相对于您的 EJB 类的位置。您可能会发现它不在您认为的打包或运行时位置。

关于java - EJB 的类加载器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3461866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com