Java應用程序從網絡驅動器上的Jar運行。如果由於某種原因Jar文件變得不可用,那麼就會出現NoClassDefFoundError。就像在示例網絡連接中丟失一樣。但我覺得奇怪的是,如果Jar文件所在的網絡驅動器上發生故障轉移,應用程序仍然會完全崩潰並且不會恢復。爲什麼在網絡驅動器彈起後JVM不能恢復?
故障轉移意味着網絡驅動器並沒有改變,它只是簡單的筆觸和再次可用的時候了,但它改變了一些內部低電平驅動的(基礎設施傢伙稱之爲節點)。發生故障轉移(節點更改)後,所有連接到在Citrix服務器中運行的應用程序的用戶都會得到相同的異常。
我會想,一旦網絡驅動器重新聯機,JVM應該能夠恢復,但它似乎試圖從Jar所在的舊節點獲取類,而不是從新節點獲取類。有誰知道爲什麼JVM會出現這種行爲?
它只會嘗試加載JAR文件。它將其複製到本地臨時文件。 – EJP
感謝您的評論,如果Jar文件被加載到本地臨時文件,那麼當網絡驅動器變得不可用時,Java應用程序會發出錯誤是沒有意義的。我描述的場景發生在Java應用程序正在運行時,也就是說,它已經成功地將從Jar運行所需的所有內容加載到內存中,直到故障轉移發生,並且故障轉移需要約一秒或更少的時間,並且在發生Jar在相同的網絡驅動器中仍然可用,但內部「節點」已更改。 – alejob2k
但是由於網絡錯誤,JAR文件*無法*被加載到臨時文件*。* – EJP