我正在开发使用库Overthere 2.3.1的客户端。本地机器客户端工作完美。但是当我尝试调用包含在EJB 3.0中的相同代码时,我有一个例外,即没有加载所有必需的类。
我查看了源代码,发现该类包含具有硬编码类名的协议注释扫描程序(https://github.com/hierynomus/scannit):
Scannit scannit = new Scannit(Configuration.config()
.scan("com.xebialabs")
.with(new AbstractScanner[] { new TypeAnnotationScanner() }));
命令
Thread.currentThread().getContextClassLoader().getResources("com/xebialabs")
返回null。
看起来EJB在一个单独的类加载器中运行,该类加载器无法访问所有jar。
EJB通过以下结构打包到EAR:
EAR
--META-INF
----sda-dd.xml
----SAP_MANIFEST.MF
----MANIFEST.MF
----application-j2ee-engine.xml
--ejb.jar
--extlibs.jars
MANIFEST.MF文件不包含CLASS-PATH中对外部库的任何引用。 EAR项目已成功部署到应用程序服务器。
EJB.jar还包含值为“Class-Path:”的META-INF / MANIFEST.MF。默认情况下。
我已经尝试过在清单文件中使用CLASS-PATH,但没有运气。
有没有人可以帮助我,如何构建项目,在EJB运行时加载所有外部库?我错过了什么资源和类加载器?