【发布时间】:2017-07-03 01:03:30
【问题描述】:
Java 应用程序正在网络驱动器上的 Jar 中运行。如果 Jar 文件由于某种原因变得不可用,那么就会出现预期的 NoClassDefFoundError。就像在示例中网络连接丢失一样。但我觉得奇怪的是,如果 Jar 文件所在的网络驱动器上发生故障转移,应用程序仍然会完全崩溃并且无法恢复。
故障转移意味着网络驱动器不会改变,它只是短暂闪烁并立即再次可用,但它会改变某种内部低级驱动器(基础架构人员称之为节点)。发生故障转移(更改节点)后,连接到 Citrix 服务器中运行的应用程序的所有用户都会遇到相同的异常。
我本以为,一旦网络驱动器重新联机,JVM 应该能够恢复,但它似乎试图从 Jar 所在的旧节点而不是新节点获取类。有谁知道为什么JVM会出现这种行为?
【问题讨论】:
-
它只尝试加载 JAR 文件一次。它将其复制到本地临时文件。
-
感谢您的评论,如果将 Jar 文件加载到本地临时文件中,那么当网络驱动器不可用时,Java 应用程序给出错误是没有意义的。我描述的场景发生在 Java 应用程序运行时,这意味着它已经成功地将它需要从 Jar 运行的所有内容加载到内存中,直到发生点故障转移,并且故障转移大约需要一秒钟或更短的时间,并且在它发生之后 Jar在同一网络驱动器中仍然可用,但内部“节点”已更改。
-
但是 JAR 文件无法加载到临时文件中,因为网络错误。
-
jar 类加载到内存并运行应用程序后出现网络错误,如果不理解问题,请不要回复。有人已经回答了有用的信息。