2011-05-13 106 views
1

我想使用類似Filtering Classloader的東西來防止特定的包蠕動到應用程序上下文中並且變得對Spring可見。是否有類似Websphere的Weblogic過濾類加載器

更改classloader的順序導致各種討厭的問題,所以我想嘗試這條路線。

Websphere 6可以實現這個嗎?如果沒有,我可以替換我自己的應用程序classolader並自己實現過濾器嗎?

回答

1

WebSphere中沒有這種過濾機制,也沒有辦法替換應用程序類加載器。您必須使用PARENT_LAST重寫類,對不起。

+0

燁...我有我自己的周圍廣泛的樣子,但沒有成功。可憐... – Eddy 2011-05-17 09:57:29

1

bkail的回答是對的,即使在最新的公開版本(8.5.5)中,WAS也沒有這樣的功能。

我剛剛創建了一個RFE,要求這樣的功能,使任何有興趣在此,請爲它投票這可能會增加這個正在實施的可能性:(需要IBM ID) http://www.ibm.com/developerworks/rfe/execute?use_case=viewRfe&CR_ID=43936

在此期間,你可以使用獨立的共享庫來覆蓋任何特定的類(上面提到的類加載順序控制 - 比如parent_last - 太粗糙了,因爲它會影響整個應用程序或模塊的類加載順序) 在類路徑中創建包含所需jar的共享庫,將其配置爲獨立的共享庫,從已部署的應用程序(或模塊)中引用它。 在這裏查看完整的文檔 http://pic.dhe.ibm.com/infocenter/wasinfo/v8r5/topic/com.ibm.websphere.base.doc/ae/tcws_sharedlib.html

0

我剛剛發佈相同的問題。但答案相當不令人滿意。然而,我在IBM developerworks檢查了Petr H的請求,並且IBM 確實實現了此功能(非常感謝Petr!):

「WebSphere Application Server V8.5.5.7(= Fixpack 7)獲得了防止來自服務器類加載程序的包對應用程序可見,它在文檔「ISOLATE DEPLOYED ARTIFACTS FROM OSS PACKAGES"」中提供,並記錄在'Isolating open source software packages'中。

提供的鏈接通過配置always-protected packages來描述機制。您基本上必須執行以下操作:

  1. 在管理控制檯的服務器設置頁面上的服務器基礎結構下,單擊Java和進程管理>進程定義。
  2. 選擇Java虛擬機。
  3. 在JVM通用參數部分中定義以下系統屬性,如下所示: -Dcom.ibm.ws.classloader.server.alwaysProtectedPackages=org.bouncycastle. 請注意最後一個點「。」真的很重要,否則一切都會被忽略!可以通過逗號添加幾個軟件包「,」
  4. 單擊應用,確定並保存更改。確保在重新啓動服務器之前完成文件同步。重新啓動WebSphere Application Server以使更改生效。
  5. 檢查native_stdout.log並查找先前定義的系統屬性。例如,當您指定always-protected軟件包org.bouncycastle時。,可能出現這樣的語句如下所示: ProtectionMetaData.clinit: system property: com.ibm.ws.classloader.server.alwaysProtectedPackages=org.bouncycastle.