gpt4 book ai didi

java - 如何在 EAR 中的 jar 和共享库之间的 Websphere Liberty Profile 中获取类加载器可见性

转载 作者:行者123 更新时间:2023-11-29 06:29:32 25 4
gpt4 key购买 nike

我正在尝试让一些遗留代码在 Websphere Liberty Profile(最新版本 16)中运行。

此代码以库的体系结构集的形式出现,我已将其设置为 WLP 中的共享库,以及作为 EAR 出现的应用程序

我遇到一个问题,其中一个库中的 jar 中的某些代码试图实例化 EAR 中的类(在 lib 文件夹中的 jar 中)。

我得到这个堆栈跟踪:

Caused by: java.lang.ClassNotFoundException: com.isb.holamu.fnegocio.ln.AAL_FNegocioFactory <-- This class (1) is inside a .jar inside the EAR
at com.ibm.ws.classloading.internal.AppClassLoader.findClassCommonLibraryClassLoaders(AppClassLoader.java:491)
at com.ibm.ws.classloading.internal.AppClassLoader.findClass(AppClassLoader.java:274)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.ibm.ws.classloading.internal.AppClassLoader.findOrDelegateLoadClass(AppClassLoader.java:469)
at com.ibm.ws.classloading.internal.AppClassLoader.loadClass(AppClassLoader.java:441)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at com.isb.bs.bl.base.MetaFacadeFactory.createFactoryInstance(MetaFacadeFactory.java:74) <-- This class (2) is in the shared library in WLP.

这些是 server.xml 中的相关位:

   <!-- Server shared library -->

<library id="architecture" >
<fileset dir="${server.config.dir}/lib/jars" includes="*.jar" scanInterval="5s"/> <-- (2) is here

</library>

<enterpriseApplication autoStart="true" id="sample" location="sample.ear" name="sample"> <-- (1) is here
<classloader commonLibraryRef="architecture" delegation="parentFirst"/>
</enterpriseApplication>

似乎 EAR 类可以访问共享库类加载器及其类,但共享库类找不到 EAR 中的类。

任何人都可以提供任何关于如何让它工作的线索吗?

谢谢!

最佳答案

这行不通,因为公共(public)库使用它们自己的类加载器,而不是引用它们的应用程序的类加载器。

要使其正常工作,请将您的 commonLibraryRef 更改为 privateLibraryRef。这将有效地将库内容添加到应用程序的类路径中。

--乔

关于java - 如何在 EAR 中的 jar 和共享库之间的 Websphere Liberty Profile 中获取类加载器可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40118311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com