WebSphere 如何选择文件夹中的类加载顺序 (WEB-INF/lib)

How Does WebSphere Choose the Classloading Order in a Folder (WEB-INF/lib)

我目前面临一个有趣的问题,即由于类加载问题,我们的应用程序无法在 3/4 节点上启动。

问题似乎是 WAS 在 a.jar 之前加载 b.jar。在进行更多故障排除后,我发现所有节点都以不同的顺序加载 jar(通过控制台中的类路径查看器),工作节点可能只是侥幸。

WebSphere 如何确定已安装应用程序 WEB-INF/lib 文件夹中的类加载顺序?

加载 jar 的顺序在 websphere 中未定义。为了解决您的问题,我建议您使用以下选项之一。

通过按照您希望的加载顺序提及 jar 名称来使用清单类路径设置。

您可以从 a.jar 中提取 类 并将其放入 WEB-INF/classes 目录中。然后从 lib 文件夹中删除 a.jar。因为 classes 目录将在 lib 目录之前加载。

您可以通过两种方式在 Websphere 中配置 classloader,PARENT_FIRST(默认)或 PARENT_LAST。 Websphere 中的类加载器是分层的,您可以将其视为一棵树,其中有: Java class loader -> ext class loader -> App 模块 class loader -> web 模块 class loader

PARENT_FIRST 将从 "top down" 加载 classes,从 Java class 加载器开始,而 PARENT_LAST 将加载 classes 来自 "bottom up",从 Web 模块 class 加载程序开始。如果您使用的开源库与 WAS 附带的库有冲突,我建议您使用 PARENT_LAST.

查看这些资源以获取更多信息: