2011-01-08 28 views
0

我正在爲長時間運行的服務器實例編寫類加載器。如果用戶尚未上傳類定義,則拋出ClassNotFoundException;似乎合理。類加載器異常正在被記憶

問題是這樣的:有三個類(C1,C2和C3)。 C1取決於C2,C2取決於C3。 C1和C2是可分辨的,C3不()。 C1被加載。 C1隨後執行需要C2的動作,因此C2被加載。 C2隨後執行需要C3的動作,所以類加載器試圖加載C3,但無法解決它,並引發異常。現在將C3添加到類路徑中,並重新啓動序列(從原始加載的C1開始)。問題是,C2似乎記得C3無法加載,並且不打擾要求類加載器找到類...它只是重新引發memoized異常。

很明顯,我無法重新加載C1或C2,因爲其他類可能已鏈接到它們(因爲C1已經鏈接到C2)。

我試過拋出不同類型的錯誤,希望班級不要記憶它們。不幸的是,沒有這種運氣。

有沒有辦法阻止加載的類綁定到異常?也就是說,如果第一次沒有成功,我希望類加載器可以繼續嘗試。

謝謝!

+0

http://stackoverflow.com/questions/1457863/what-is-the-difference-between-noclassdeffounderror-and-classnotfoundexception線程可能是有用的。看起來你應該拋出NoClassDefFoundError。 – Osw 2011-01-08 21:43:32

回答

0

不,這是不可能的。在JVM specification第2.17.2:

If an error occurs during class loading, then an instance of one of the following subclasses of class LinkageError will be thrown at any point in the program that (directly or indirectly) uses the type:

...

  • NoClassDefFoundError: No definition for a requested class or interface could be found by the relevant class loader.