1

我正在使用 ADF 框架和 webcenter 套件 11.1.1.5,它恰好捆绑了 Apache POI 库版本 3.5。但是,当前项目至少需要 3.7,甚至是该库的最新版本。

我有 weblogic 服务器,带有预部署的 webcenter 应用程序和所有必需的库。

如果我将 Apache POI 库版本 3.8 捆绑在我的项目中,它会一起部署,但应用程序仍使用版本 3.5。

Webcenter 库部署较早,我无法更改此行为。除了在我的项目中包含 Apache POI 的源之外,有没有办法至少为我的应用程序覆盖它?

谢谢。

4

3 回答 3

1

我不确定 weblogic 中的情况如何,但我可以建议您查看类加载器配置。据我记得在部署 Web 应用程序时有某种类加载器顺序配置。一般来说,你应该要求它先使用应用程序级别的类路径,然后再使用应用程序服务器库类。打开 weblogic 管理控制台并尝试查找此配置。

于 2012-09-06T09:27:54.103 回答
1

您可以尝试查看 weblogic-application.xml 文件(放入 META-INF)。在此文件中,可以指定应从应用程序库文件夹而不是从 weblogic 加载哪些类。

例子:

<wls:prefer-application-packages> <wls:package-name>org.apache.log4j.*</wls:package-name> </wls:prefer-application-packages>

(这将从应用程序库加载 log4j,而不是 weblogic log4j 库)

于 2012-09-06T14:26:10.343 回答
0

AlexR 指出了正确的方法,实际上有几个解决这个问题的方法。1. 将 POI 库安装到 $DOMAIN_HOME/lib/ 并重新启动服务器。这是系统类路径,如果您没有配置,否则它将覆盖其他来源。此解决方案很简单,但不适用于所有情况。2. 第二种解决方案是使用过滤类加载器功能,这会将标准查找从系统->应用程序->web 更改为过滤->应用程序->web。更多详细信息,请访问https://blogs.oracle.com/jamesbayer/entry/sharing_a_class_with_a

简而言之,您可以使用 adminserver:port:/wls-cat(类加载器分析工具)来识别可能的类冲突并检查当前的类加载器配置,然后使用收集到的信息添加到应用程序中的 weblogic-application.xml 以启用过滤类加载器特征。例如,您可以在过滤器中添加:“org.apache.poi.*”,使类加载器首先检查您的应用程序库。并且此配置将仅影响当前应用程序,因此您不会破坏可能需要旧/不同版本的旧库的其他应用程序。

于 2012-09-06T14:19:55.917 回答