【发布时间】:2011-08-24 17:25:27
【问题描述】:
我想使用 Filtering Classloader 之类的东西来防止特定包潜入应用程序上下文并被 Spring 可见。
更改类加载器顺序会导致各种讨厌的问题,所以我想试试这条路线。
是否可以使用 Websphere 6 实现这一点?如果没有,我可以替换我自己的应用程序类并自己实现过滤器吗?
【问题讨论】:
标签: java spring websphere filtering classloader
我想使用 Filtering Classloader 之类的东西来防止特定包潜入应用程序上下文并被 Spring 可见。
更改类加载器顺序会导致各种讨厌的问题,所以我想试试这条路线。
是否可以使用 Websphere 6 实现这一点?如果没有,我可以替换我自己的应用程序类并自己实现过滤器吗?
【问题讨论】:
标签: java spring websphere filtering classloader
WebSphere 中没有这样的过滤机制,也没有办法替代应用程序类加载器。抱歉,您必须使用 PARENT_LAST 来覆盖类。
【讨论】:
bkail 的回答是对的,WAS 即使在最新的公开版本(8.5.5)中也没有这个功能。
我刚刚创建了一个请求此类功能的 RFE,因此任何对此感兴趣的人,请投票支持它,这可能会增加实现此功能的可能性: http://www.ibm.com/developerworks/rfe/execute?use_case=viewRfe&CR_ID=43936 (需要 IBM ID)
与此同时,您可以使用独立的共享库来覆盖任何特定的类(上面提到的类加载顺序控制 - 如 parent_last - 过于粗糙,因为它会影响整个应用程序或模块的类加载顺序) 在类路径上创建一个包含所需 jar 的共享库,将其配置为独立的共享库,从已部署的应用程序(或模块)中引用它。 有关完整文档,请参见此处 http://pic.dhe.ibm.com/infocenter/wasinfo/v8r5/topic/com.ibm.websphere.base.doc/ae/tcws_sharedlib.html
【讨论】:
我正要发布同样的问题。但答案很不满意。然而,我在 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 来描述机制。您基本上必须执行以下操作:
-Dcom.ibm.ws.classloader.server.alwaysProtectedPackages=org.bouncycastle.
请不要说最后一个点“。”真的很重要,否则一切都会被忽略!几个包可以用逗号“,”添加ProtectionMetaData.clinit: system property: com.ibm.ws.classloader.server.alwaysProtectedPackages=org.bouncycastle.
【讨论】: