【问题标题】:Class Loading issue in webspherewebsphere中的类加载问题
【发布时间】:2016-04-27 07:42:03
【问题描述】:

我们有一个生产服务器,它是一个 websphere 实例,我们将一个 jar(例如,已经存在于 EAR 中并现在被覆盖的 c.jar)复制到已经部署为热修复的 EAR。 我有 A 类,在 c.jar 的同一个 Jar 中引用 B 类,并且在加载 A 类时,B 类无法找到并导致 NoClassFoundError。 服务器中的热部署被禁用。但是,在重新启动服务器后,A 能够找到 B。我们缺少任何属性吗?为什么B类虽然存在于同一个jar中但找不到,但重新启动后却能找到。此外,在复制 jar 之前,旧 c.jar 在加载了 A 类和 B 类的情况下工作正常。我们使用的是 6.1

【问题讨论】:

  • 您是否在更改后重新启动了应用程序?有关更多详细信息,请参见此处 - www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/…。不建议直接复制 jars。现在6.1也不再支持了。您应该迁移到较新的版本。
  • 重启后工作正常,但是为什么jar文件中存在类却出现类加载问题。但是,重新启动后它工作正常

标签: websphere websphere-6.1


【解决方案1】:

当应用程序服务器启动时,它会创建您在 WAS JVM 实例中部署的应用程序的类文件,以使其在运行时可用。当您探索应用程序时,会加载其他类。当您删除/覆盖 jar 文件时,您正在破坏链接,这就是其他类在 c.jar 中找不到类的原因。当您重新启动 JVM 时,会在 JVM 运行时加载一个新的类文件,并且您发现它是可用的。

【讨论】:

  • 感谢您的解释,但这个问题之前没有发生。现在才发生这种情况