1

我正在开发使用库 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 运行时使用要加载的所有外部库来构建项目?资源和类加载器我错过了什么?

4

0 回答 0