我正在尝试使用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>但似乎只使用了第一个被引用的库。如果我使用Classloader Analysis Tool (wls-cat),我只看到一个FilteringClassLoader,过滤器模式只与第一个共享库的包匹配。交换顺序会给我另一个库。
查看http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd会发现库引用是无界的。
除了合并共享库并且每个应用程序只使用一个库引用之外,我还能做什么?
编辑:请注意,我使用的是共享库(一个特定于WebLogic的特性),而不是可选的包(一个EE标准特性)。两种方法对库的定义是相同的,但是哪些类型的模块可以是库,以及如何引用它们是不同的。
发布于 2013-10-22 09:10:37
如果您使用的是WAR文件,那么包含共享库的适当方式在清单中:http://docs.oracle.com/cd/E17904_01/web.1111/e13706/libraries.htm#i1070938
请参阅标题为“从Java EE应用程序或模块引用可选程序包”的小节:
任何Java存档文件(JAR、WAR、RAR、EAR)都可以使用存档清单文件中的属性引用一个或多个注册的可选软件包。
WAR文件也有一个Manifest,您可以在其中定义想要引入的共享库。weblogic.xml不会对WAR文件执行此操作。weblogic.xml中的库引用是针对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中共享库的概述。我以为它有关于战争的具体例子,但我想我遗漏了这一点:)
http://www.youtube.com/watch?v=ArLTKapjV_8
发布于 2021-01-27 21:18:46
要检测对共享库的Classloader的引用,必须将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>https://stackoverflow.com/questions/15232513
复制相似问题