我開發一個Web應用程序。負載類不是動態的Web應用程序的類路徑 - 不使用自定義類加載
- Web應用程序在運行中產生的Java類。例如,它生成類
com.people.Customer.java
- 在我的代碼,我動態編譯這讓com.people.Customer.class並將其存儲在某個目錄說
repository/com/people/Customer.class
這是不是我的應用server.My應用程序服務器的類路徑中(我使用WebSphere Application Server/Apache Tomcat等)從WEB-INF/classes
目錄獲取類。類加載器將使用它來加載類。 - 編譯完成後,我需要加載這個類,以便它在創建後可以被其他類使用。
- 當我使用
Thread.currentThread().getContextClassLoader().loadClass(com.people.Customer)
明顯的類加載器無法加載類,因爲它不是在類路徑中(不WEB-INF/classes
)。由於類似的原因,getResource(..)
或getResourceAsStream(..)
也不起作用。
我需要一種方法來:
閱讀類Customer.class
也許作爲一個流(或任何其他方式會做),然後加載它。以下是約束:
- 我無法將存儲庫文件夾添加到
WEB-INF/classes
文件夾。 - 我無法創建新的自定義ClassLoader。如果我創建了一個新的ClassLoader,並且這會加載該類,那麼它的父類ClassLoader將無法訪問它。
是否有實現這一目標的方法嗎?
如果不是這樣,在最壞的情況下,有一個自定義類加載器的Web應用程序的同一類應該被用來在我的web應用程序的整個生命週期內加載應用程序覆蓋了默認的類加載器的方式。
欣賞任何解決方案:)
爲什麼不能將它添加到WEB-INF/classes文件夾中?這是真正的解決方案。在任何情況下「不會」或「不會」或「寧願不」? – duffymo 2010-03-18 22:32:48
@duffymo:你的假設是web應用程序部署在擴展模式,並且web應用程序具有對文件系統的寫入權限。在生產環境中情況並非總是如此。將文件寫入WEB-INF/classes不是一個好的解決方案 – mhaller 2010-03-18 22:39:42
不,我不假設任何 - 你的透視界面已經關閉了,mhaller。我爭辯說WAR應該重新包裝,以包含所有必需的.class文件並重新部署。我希望看到這樣一個用例,它有必要創建一些和客戶一樣明顯的東西。實例?是。類?不,我不買它。 – duffymo 2010-03-18 23:14:15