【发布时间】:2013-06-18 08:29:56
【问题描述】:
我们有一个 Maven 多模块项目,其中包含一些 ejb 和 war 模块。其中一个模块用作整个平台的集成测试器。 我们使用嵌入式 EjbContainer 成功测试了 ejb,包括安全性、依赖注入和事务。
现在我们想将 CDI 添加到组合中,这就是出现问题的时候。
问题
根据文档,为了激活 CDI,我们只需将一个空的 beans.xml 添加到我们在其中的 ejb 模块的 META-INF 文件夹中想要激活它。就这么简单,完成后嵌入式服务器无法启动,因此我们无法运行任何集成测试。
抛出的异常是:
java.lang.RuntimeException: javax.ejb.EJBException: Failed to deploy EJB modules - see log for details
...
Caused by: javax.ejb.EJBException: Failed to deploy EJB modules - see log for details
stackTrace 的其余部分只是指向我们尝试启动服务器的那一行,并没有提供任何有用的信息。
需要注意的两点:
- 即使没有任何@Injected bean,启动也会失败。
- CDI 在非嵌入式 glassfish 中运行时运行良好,因此我们的问题仅在测试中。
我们的系统
Maven 项目结构
我的项目
我的项目耳
我的项目域
我的项目-ejb1
我的项目-ejb2
我的项目战争
我的项目测试
环境
- Glassfish 3.1、3.2
- 测试NG
File[] modules = {
new File("/target/classes"),
new File("../myproject-ejb1/target/classes"),
new File("../myproject-ejb2/target/classes")
...};
properties.put(EJBContainer.APP_NAME, "myproject");
properties.put(EJBContainer.MODULES, modules);
properties.put("org.glassfish.ejb.embedded.glassfish.instance.root","./src/main/resources");
EJBContainer container = EJBContainer.createEJBContainer(properties);
到目前为止我们发现了什么
我们在 glassfish 上启用了更精细的日志记录,但我们仍然不知道失败的原因。
我们了解 Arquillian,我们认为这是一种可能性,但我们希望最后一次尝试使用标准 api。
知道我们做错了什么吗?
【问题讨论】:
标签: maven glassfish ejb integration-testing ejb-3.1