【问题标题】:inverse_loading in WASCE 3.0.0.3 / Geronimo 3.0WASCE 3.0.0.3 / Geronimo 3.0 中的 inverse_loading
【发布时间】:2015-03-26 03:19:21
【问题描述】:

我正在尝试在 IBM Websphere Application Server Community Edition (WASCE) 3.0.0.3 上部署战争。我在 WASCE 3.0.0.3 附带的那些 jar 之间遇到了一些 jar 冲突问题,并且这些 jar 来自我们的应用程序依赖项。最后,我通过在 geronimo-web.xml 中使用以下属性来强制 WASCE 从我的应用程序加载 jar 来解决问题。

<import-package>!the.conflicting.jars</import-package>

但是,我想强制 WASCE 始终首先从我的应用程序中获取 jar,即反转默认的类加载器行为以首先从应用程序加载。在这种情况下要更改的正确配置是什么?


经过一番搜索,根据link,WASCE 3.0 基于 Geronimo 3.0。我发现在 geronimo-web.xml 中设置 <inverse-classloading> 可能会有所帮助。但是下面Apache Geronimo 3.0 website 上的两个文档提到 Geronimo 3.0 上不再提供此功能

Migrating from G 2.x to G 3.x 中,它说:

inverse-classloading Geronimo 3.0 不支持部署计划中的元素。

geronimo-web.xml

<sys:environment> 元素包含以下元素:

...

<inverse-classloading> 元素可用于指定要为该模块反转标准类加载器委托。 Geronimo 类加载器委托遵循 Java EE 5 规范,正常行为是在检查当前类加载器之前从父类加载器(如果可用)加载类。 ...... ...... (3.0不支持,请改用<import-package/>


那么如果<inverse-classloading> 不再可用,那么在WASCE 3.0.0.3 中这个属性的等价物是什么?或者对于所有重复的 jar,我应该如何使用 <import-package/> 来执行此操作?

【问题讨论】:

    标签: apache geronimo ibm-was


    【解决方案1】:

    在您提到的链接中,您将找到以下部分

    <sys:environment>

    <sys:environment> XML 元素使用 Geronimo System 命名空间,该命名空间用于指定公共库和模块范围服务的公共元素,并在此处记录:

    http://geronimo.apache.org/schemas-3.0/docs/geronimo-module-1.2.xsd.html

    该元素包含以下元素:

    <moduleId> 元素用于为部署在 Geronimo 服务器中的 Web 应用程序提供配置名称。它包含 groupId、artifactId、版本和模块类型的元素。模块 ID 通常在四个组件之间用斜线打印,例如 GroupID/ArtifactID/Version/Type。

    <dependencies> 元素用于提供 Web 模块所依赖的配置和第三方库。这些配置和库可通过 Geronimo 类加载器层次结构提供给 Web 模块。

    <bundle-activator> 元素用于在 Web 应用程序的清单文件中创建 Bundle-Activator 标头。它指定部署在 Geronimo 服务器中的 Web 应用程序的入口点。

    <bundle-classPath> 元素用于在 Web 应用程序的清单文件中创建 Import-Package 标头。它包含目录列表或嵌入的 jar 文件,也称为捆绑资源并扩展 Web 应用程序的类路径。

    <import-package> 元素用于在 Web 应用程序的清单文件中创建 Import-Package 标头。它指定在启动 Web 应用程序之前要解析的包列表。使用<import-package>!packagename</import-package>覆盖服务器中的特定包。

    <export-package> 元素用于在 Web 应用程序的清单文件中创建 Export-Package 标头。它指定要导出的包列表。

    <require-bundle> 元素用于在 Web 应用程序的清单文件中创建 Require-Bundle 标头。它指定要绑定到的捆绑包列表,无论它们的包。

    <dynamic-import-package> 元素用于在 Web 应用程序的清单文件中创建 DynamicImport-Package 标头。它指定要动态导入的打包列表,尤其是在类加载期间。

    所以基本上,您需要添加以下指令,即

    <sys:import-package>!package-class-name-here*</sys:import-package><sys:environment> 节中。通常在 Application Context-Root 指令之前。

    如您所知,这是嵌入在应用程序 WAR/EAR 中的 geronimo-web.xml 中——如链接中所述

    http://geronimo.apache.org/GMOxDOC30/geronimo-webxml.html

    【讨论】:

    • 感谢您的帮助,但不能完全回答我的问题。 <inverse-classloading> 所做的总是首先从 Web 应用程序级别加载 jars,然后从 WASCE 加载,重复的 jars 不会被加载两次。这里的问题是,如果我需要使用<sys:import-package>!package-class-name-here*</sys:import-package>,这意味着我需要确切地知道哪些 jars/packages 不能从 WASCE 服务器导入。每次在我的项目中引入一个新的 jar 时,我可能需要添加额外的行,这也不是很容易维护。
    • 虽然这不是我所要求的,但最后,这就是我解决问题的方法。识别所有重复项需要一些时间,并且将来在引入新 jar 时可能会导致一些问题。
    猜你喜欢
    • 2012-07-31
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多