3

我正在尝试使用 Moxy 2.4.1(更新的 JAXB impl)和 Jersey 1.17(更新的 JAX-RS impl)。我将共享库模块(作为库)部署到服务器没有问题。

在我正在开发的应用程序(WAR)中,我尝试从 weblogic.xml 文件中引用它们,如下所示:

<library-ref>
    <library-name>EclipseLink-2.4.1</library-name>
    <specification-version>2.4.1</specification-version>
    <implementation-version>2.4.1.v20121003-ad44345</implementation-version>
    <exact-match>true</exact-match>
</library-ref>
<library-ref>
    <library-name>Jersey-1.17</library-name>
    <specification-version>1.17</specification-version>
    <implementation-version>1.17.0</implementation-version>
    <exact-match>true</exact-match>
</library-ref>

但似乎只有第一个引用的库被使用了。如果我使用类加载器分析工具 (wls-cat),我只会看到一个 FilteringClassLoader,并且过滤器模式只匹配第一个共享库的包。切换顺序给了我另一个库。

查看http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd表明 library-ref 是无界的。

除了合并共享库并且每个应用程序只使用一个库引用之外,我还能做什么?

编辑:请注意,我使用的是共享库(WebLogic 特定功能)而不是可选包(EE 标准功能)。两种方法的库定义相同,但哪些类型的模块可以是库以及引用它们的方式不同。

4

2 回答 2

0

如果您使用的是 WAR 文件,则在清单中包含共享库的适当方法是:http: //docs.oracle.com/cd/E17904_01/web.1111/e13706/libraries.htm#i1070938

请参阅标题为“从 Java EE 应用程序或模块中引用可选包”的部分:

任何 Java EE 归档(JAR、WAR、RAR、EAR)都可以使用归档清单文件中的属性引用一个或多个已注册的可选包。

WAR 文件还有一个清单,您可以在其中定义要提取的共享库。weblogic.xml 不会为 WAR 文件执行此操作。weblogic.xml 中的 library-ref 用于 SPI 的非共享库。

执行您所要求的正确方法是使用 MANIFEST.MF 文件。对于此特定示例,您将执行以下操作:

Extension-List EclipseLink Jersey
EclipseLink-Extension-Name: EclipseLink
EclipseLink-Specification-Version: 2.4.1
EclipseLink-Implementation-Version: 2.4.1.v20121003-ad44345
Jersey-Extension-Name: Jersey
Jersey-Specification-Version: 1.17
Jersey-Implementation-Version: 1.17.0

如果您需要,我可以提供一个如何使用 Maven 执行此操作的示例。我已经这样做了很多年了:)

下面是 WebLogic 中共享库的概述。我以为它有关于 WARS 的具体示例,但我想我把它省略了:)

http://www.youtube.com/watch?v=ArLTKapjV_8

于 2013-10-22T01:10:36.520 回答
0

要检测对共享库的 Classloader 的引用,您必须将 weblogic-application.xml 添加到 EAR 的 META-INF 目录。

你耳朵的结构如下:

yourEarFile.ear
    META-INF
         weblogic-application.xml
    yourWarFile.war

yourEarFile/META-INF

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application
    xmlns="http://xmlns.oracle.com/weblogic/weblogic-application"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.2/weblogic-application.xsd">

    <xml> 
        <parser-factory> 
            <saxparser-factory>org.apache.xerces.jaxp.SAXParserFactoryImpl</saxparser-factory>
            <document-builder-factory>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</document-builder-factory> 
        </parser-factory> 
    </xml> 

<library-ref>
    <library-name>EclipseLink-2.4.1</library-name>
    <specification-version>2.4.1</specification-version>
    <implementation-version>2.4.1.v20121003-ad44345</implementation-version>
    <exact-match>true</exact-match>
</library-ref>
<library-ref>
    <library-name>Jersey-1.17</library-name>
    <specification-version>1.17</specification-version>
    <implementation-version>1.17.0</implementation-version>
    <exact-match>true</exact-match>
</library-ref>


</weblogic-application>
于 2021-01-27T13:18:46.193 回答