繁体   English   中英

从同一个webapp中的其他jar中加载实用程序jar类的Weblogic应用程序类加载

[英]Weblogic application classloading of utility jar classes from other jars in the same webapp

我在Weblogic的应用程序中遇到一些类加载问题的困惑。 在我的代码中的某些地方,有一些类依赖于其他jar中的类,因此我必须缺少一些基本知识。

通过查看信息可以发现,如果两个jar都位于类路径上,这应该不成问题,但是在Weblogic上的Java EE应用程序上下文中,这似乎更加微妙。

我有一个耳朵MyApp.ear

MyApp.ear包含多个web应用程序(战争)以及一堆实用程序jar和EJB。 结构是这样的(我不控制)。

MyApp.ear
     MyWebApp.war
     UtilJar1.jar
     UtilJar2.jar
     etc...

假设UtilJar1中有一些类从UtilJar2导入类。 哪个MANIFEST.MF应该指定两个jar都应该在类路径上? 耳朵? Webapp的? UtilJar1的?

从反复试验(Weblogic 10.3.2)来看,似乎唯一可行的方法是如果在UtilJar1的清单类路径中定义了UtilJar2。 但是我会认为,在Web应用程序的上下文中,Web应用程序的类路径将用于该Web应用程序中发生的任何类加载? 相反,除非在第一个jar的类路径中指定了第二个jar,否则我会看到NoClassDefFound。

以下是oracle文档的摘录:

J2EE规范提供清单类路径条目,作为模块指定它需要类的辅助JAR的一种方式。

仅当您有其他支持的JAR文件作为EJB JAR或WAR文件的一部分时,才需要使用此清单类路径条目。

请仔细阅读以下文档中的清单类路径部分-

类加载

J2ee部署档案库[EAR]是不同模块的组合,每个模块在相应的清单文件中声明依赖关系。

根据我的理解,EAR中的每个模块[war,ejb,jar]都会有自己的类加载器,它们是EAR类加载器的子级。 除非您在清单文件中声明依赖项,否则子类加载器将仅对其父级具有可见性,并且不会意识到同级类加载器。

在此处输入图片说明

即使在WAR清单中有一个条目,utilit1.jar也不知道Utility2.jar,您必须在Utility1.jar的清单文件中明确提及依赖项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM