我正在尝试使用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是无限制的。
除了合并共享库以及每个应用程序只使用一个库-ref,我还能做什么?
编辑:请注意我使用的是共享库(WebLogic特定功能)而不是可选包(EE标准功能)。两个方法的库的定义是相同的,但哪些类型的模块可以是库,以及您如何引用它们是不同的。
答案 0 :(得分:0)
如果您使用WAR文件,则在清单中包含共享库的适当方式:http://docs.oracle.com/cd/E17904_01/web.1111/e13706/libraries.htm#i1070938
请参阅标题为“从Java EE应用程序或模块引用可选包”的部分:
任何Java EE归档(JAR,WAR,RAR,EAR)都可以引用一个或多个 使用归档中的属性注册可选包 清单文件。
WAR文件还有一个Manifest,您可以在其中定义要引入的共享库.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的具体例子,但我想我把它留了出来:))
答案 1 :(得分:0)
要检测对共享库的类加载器的引用,您必须将 weblogic-application.xml 添加到 EAR 的 META-INF 目录中。
您耳朵的结构如下:
yourEarFile.ear
META-INF
weblogic-application.xml
yourWarFile.war
你的EarFile/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>