Jersey WebLogic 12c web应用程序中的多个引用共享库

Jersey WebLogic 12c web应用程序中的多个引用共享库,jersey,weblogic,moxy,weblogic12c,Jersey,Weblogic,Moxy,Weblogic12c,我尝试使用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.

我尝试使用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>

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

查看显示库ref是无界的

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


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

如果使用WAR文件,则包含共享库的适当方式在清单中:

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

任何JavaEE归档(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中共享库的概述。我以为它有战争的具体例子,但我想我漏掉了:)


要检测对共享库类加载器的引用,必须将weblogic-application.xml添加到EAR的META-INF目录中

您耳朵的结构如下所示:

yourEarFile.ear
    META-INF
         weblogic-application.xml
    yourWarFile.war
您的耳文件/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>

org.apache.xerces.jaxp.SAXParserFactoryImpl
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
日食k-2.4.1
2.4.1
2.4.1.v20121003-ad44345
真的
泽西-1.17
1.17
1.17.0
真的

我正在尝试引用库,而不是定义库。感谢更新,但我使用的是共享库,而不是可选库。从该页面开始:“任何Java EE应用程序或模块都可以引用可选包(使用META-INF/MANIFEST.MF),而只有企业应用程序和Web应用程序可以引用共享Java EE库(使用weblogic-application.xml或weblogic.xml)”当您说“共享库”时您是将其作为通用术语使用,还是指WebLogic共享库?查看视频中的4:50(谢谢),您声明要引用共享库,您需要使用weblogic部署描述符。这是正确的,也是我正在努力实现的目标。我可以一次引用一个共享库,在战争中使用weblogic.xml不会有任何问题。问题是当我引用多个WebLogic共享库时(这应该可以工作,因为xsd说它是无界的)。我在12c btw上,我的LIB和应用程序都是WAR。您在上面的回答中提供的示例与标题为引用Java EE应用程序或模块的可选包的示例相匹配。可选包和WebLogic共享库是解决重叠问题的两种不同的方法。我尝试使用WebLogic共享库,而不是可选包。你是说我需要切换到可选的包而不是WebLogic共享库吗?不管语法如何,你都是在WebLogic中将一个工件部署为库(而不是应用程序),并希望从另一个工件引用它。从WAR文件引用WebLogic中作为库部署的工件的正确方法是使用清单方法。祝你好运。请查看更新的回复。请查看另一个更新的回复:)请花点时间尝试一下。Java EE库在部署时不引用它们的应用程序上下文中是可选的,而不是在系统类路径、域类路径或与所部署工件打包的应用程序上下文中,类路径/资源路径优先顺序遵循库引用元素在weblogic.xml文件中出现的顺序。因此,多个共享库应该可以工作。