我正在开发使用库 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")
返回空值。
看起来 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 还包含 META-INF/MANIFEST.MF,其值为“Class-Path: ”。默认。
我已经尝试在清单文件中使用 CLASS-PATH,但没有运气。
谁能帮助我,如何在 EJB 运行时使用要加载的所有外部库来构建项目?资源和类加载器我错过了什么?