Dav*_* G. 1 java ear classloader java-ee websphere-liberty
我正在尝试在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.
Run Code Online (Sandbox Code Playgroud)
这些是来自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>
Run Code Online (Sandbox Code Playgroud)
似乎EAR类可以访问共享库类加载器及其类,但共享库类无法在EAR中找到它们.
任何人都可以提供任何关于如何使这个工作的线索?
谢谢!
小智 6
这不起作用,因为常见的库使用自己的类加载器,而不是引用它们的应用程序.
要使其工作,请将commonLibraryRef更改为privateLibraryRef.这将有效地将库内容添加到应用程序的类路径中.
--joe