2011-11-15 49 views
3

是否可以將Java類的.class文件添加到正在運行的應用程序服務器上的ear文件中,而無需重新啓動它。 JVM類加載器如何以這種方式加載它。我的印象是,類加載器在啓動時加載文件,如果要在運行的應用程序服務器中更改類文件,則必須重新啓動服務器。在正在運行的生產環境中添加類文件

回答

1

EAR是一個帶有一些額外信息的JAR文件,因此您可以使用與J2EE容器相同的方法:創建一個新的類加載器(嘗試URLClassLoader)併爲其提供加載新類所需的信息。

這適用於新班級;替換現有類是另一回事,因爲這些類的所有實例都包含對原始類型的引用。沒有通用的方法來解決這個問題,但JRebel的人寫了一個類加載器,它也可以做到這一點(有一些限制)。

0

對於熱代碼替換,您可以使用JRebel 僅僅將.class添加到耳朵中是不夠的,因此您需要完整地重建歸檔。

1

如果類尚未加載,您可以簡單地將其提供給類加載器,即將其編譯爲您部署的分解文件夾(例如,WEB-INF/classes)。當您從打包的EAR進行部署時,這不起作用,因爲這些通常在部署時爆炸。

當這個類已經被加載時,你需要一個改變感知類加載器。要麼你的容器爲你做,或者你可以看看JRebel這很好。

相關問題