2011-05-13 107 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.