我正在解決多個應用程序需要共享彼此加載的類的問題。部署期間在WEB-INF/lib下自動加載Java EE類
因此,我已經開始創建一個單獨的應用程序,並把所有的公用庫。我也做了必要的應用程序服務器特定的啓用/配置更改。我試圖找出它可能在戰爭部署後立即加載WEB-INF/lib/*。jar下的所有類。
假設我不想通過使用Foo.class單獨加載類。我真的試圖看看是否只有通過啓用配置寫入JAVA代碼才能手動加載WEB-INF/lib下的所有類。
我正在解決多個應用程序需要共享彼此加載的類的問題。部署期間在WEB-INF/lib下自動加載Java EE類
因此,我已經開始創建一個單獨的應用程序,並把所有的公用庫。我也做了必要的應用程序服務器特定的啓用/配置更改。我試圖找出它可能在戰爭部署後立即加載WEB-INF/lib/*。jar下的所有類。
假設我不想通過使用Foo.class單獨加載類。我真的試圖看看是否只有通過啓用配置寫入JAVA代碼才能手動加載WEB-INF/lib下的所有類。
如果您嘗試在多個Web應用程序中共享庫,則需要將這些庫存放在JBOSS的共享庫文件夾中。 JBOSS將在啓動時加載。
看到這個:
Where to put a shared library in JBoss AS 5?
這是不可能的web應用程序訪問另一個Web應用程序的類加載器。 該應用程序的類加載器,先後獲得3類裝載器:
事實上,JBoss確實可以協助在多個應用程序之間共享課程。檢查http://phytodata.wordpress.com/2010/10/21/demystifying-the-jboss5-jboss-classloading-xml-file/ –
不錯,我不知道這.. .. – edubriguenti
如果我們通過不同的點,你提到的:
我工作的一個問題,即多個應用程序需要共享相互加載的類:把班級的共同在服務器級別加載類加載器,並將它們從WARs WEB-INF/libs中刪除,以避免WAR類隱藏服務器類。例如在Tomcat的情況下把罐子放在$TOMCAT_HOME/lib
。
爲什麼這不是一個好主意:這通常不是一個好主意,我們應該只把在服務器級別所需的類的最低數額,以避免由於靜態變量的問題(與類)是無意間共享的跨應用,增加了造型異常的方法可行,等等
所以我通過創建一個單獨的應用程序,並把它所有的公用庫啓動:這不會爲你工作期望,一個WAR應用程序的WEB-INF/lib中的類是孤立的,並且在另一個WAR中的類中不可見。因此,創建單獨的應用程序並不是實現此目的的方法,而是將這些類安裝在服務器級別的類加載器中。
我試圖找出它可以裝載下所有類WEB-INF/lib目錄/的.jar一旦戰爭部署:*這不是在servlet容器預見,看到這個answer爲一種使用Java代碼執行此操作的方法。此功能不可用的原因在於JVM在其他類需要時會延遲加載類,並且不會爲了節省內存而進行預加載。
當類的加載發生時最好留到JVM,許多優化到位的內部運作加載類中最有效的方式,避免燙髮根問題的時刻。
如果這不能回答您的問題,您可以告訴我們您的用例是否需要預先加載類,我們可能會爲您正在嘗試實施的內容提供一些備選方案 - 如增加初始請求的超時等。
什麼是您的問題? –
你有沒有看過下面的鏈接,有一種在啓動時加載類的方法,如果你可以讓我們知道這樣做的理由,所以我們更好地理解用例,但總的來說這不是一個明智的做法,根據需要的原因,可能會有更好的替代方案 –
顯然現在這不是必需的。我想我必須手動加載類才能使ClassLoaders從共享類加載域中獲取。情況並非如此。 –