我正在尝试将一些现有的网络服务部署到Apache TomEE 8上。我有三个Web应用(EAR文件)需要部署。当我尝试独立部署每一个时,它们都能正常工作,类加载器能够为每个特定的应用加载所需的类。
但是,当我试图同时部署这三个应用时,只有一个应用能够正常运行,而其余两个则抛出内部服务器错误。查看服务器日志时,我看到的是java.lang.ClassNotFoundException:com.example.classname
针对其余两个应用,然而,当我导航到TomEE-8/webapps/app1/WEB-INF/classes/
目录下时,我确实能看到异常中提到的那个类。
所以我的问题是,如何为每个应用隔离类加载器,并同时部署这三个EAR文件?作为Tomcat和TomEE的新手,我正艰难地寻找解决方法。
以下是TomEE的部署目录结构:
- 对于app1 - TomEE/webapps/app1/WEB-INF/classes/com/example/app1class1.class
- 对于app2 - TomEE/webapps/app2/WEB-INF/classes/com/example/app2class1.class
- 对于app3 - TomEE/webapps/app3/WEB-INF/classes/com/example/app3class1.class
我有一个公共库common.jar
,类加载器应该使用它来加载类,我已经将其放置在TomEE/lib
目录下。其余的配置都是按照安装时的默认设置。
部署时,我将app1.ear、app2.ear和app3.ear文件放在webapps目录下,然后启动服务器。
我原以为所有三个Web服务都能运行起来,但实际上只有第一个部署的应用(假设是按部署顺序)能正常运行,其余两个则抛出了java.lang.ClassNotFoundException
。能否有人帮助我解决这个问题?我一直在尝试查找相关问题,但没有找到任何线索。
编辑1:
之前的Liberty服务器配置如下:
<applicationManager autoExpand="true"/>
<library id="commonlib"><fileset dir="path/to/common.jar"/></library>
<application location="path/to/app1.ear" id="app1.ear"
name="app1.ear" type="ear"><classloader commonLibraryRef="commonlib"/></application>
<application location="path/to/app2.ear" id="app2.ear"
name="app2.ear" type="ear"><classloader commonLibraryRef="commonlib"/></application>
<application location="path/to/app3.ear" id="app3.ear"
name="app3.ear" type="ear"><classloader commonLibraryRef="commonlib"/></application>