我有一個java代理,它測試字節碼。 我正在使用java 6中的attach apis來允許用戶使用我的java代理動態加載代理和工具以及解除代碼。 我正在使用Boot-Class-Path清單屬性來確保我的javagent類在引導類路徑中,以便我的用戶可以使用ArrayList等工具類。Javaagent類卸載
但是,版本控制會帶來問題。 可以說用戶動態地附加了我的代理的版本1。 然後我給了他第2版。現在,由於他的應用程序服務器從未關閉,因爲他連接了我的代理的版本1,所以版本1的類仍然被加載。
我需要某種方式,當我的客戶端版本2的Javaagent,版本1被卸載。
我知道一個辦法是寫一個客戶類加載器爲我javaagent的課程,並設置類加載器引用設置爲null。 然而,在那種情況下,我不能在引導類路徑中檢測類,因爲我的類加載器將在引導類加載器的層次結構中處於下方,因此我的用戶不能像ArrayList那樣的工具類,因爲如果我在ArrayList的方法中添加一個調用,我的代理程序的類的方法引導類加載程序將無法看到它們。
那麼有什麼辦法來解決引導類路徑問題,並仍然卸載以前的代理類?
您可能想看看JavaRebel(http://www.zeroturnaround.com/javarebel/),它是您試圖執行的商業實現。它可能會告訴你什麼是和不可能的。 – skaffman 2009-08-12 17:06:18