【问题标题】:Unable to do integration testing of CDI on Embedded EJBContainer无法在 Embedded EJBContainer 上进行 CDI 集成测试
【发布时间】: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


    【解决方案1】:

    上次我手动使用嵌入式 glassfish 时,我设置的是 org.glassfish.ejb.embedded.glassfish.installation.root 属性,而不是 instance。试试这个。

    附带说明:我强烈建议您尝试 Arquillian,因为它在选择目标容器时为您提供了灵活性,因为您的测试是可移植的。而且您不再需要摆弄这个笨拙的引导代码。另外我不是嵌入式容器的忠实粉丝,因为它们经常让类加载器头疼。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2022-07-04
      • 2015-09-20
      • 2015-10-12
      • 1970-01-01
      • 2016-11-09
      • 2013-11-02
      相关资源
      最近更新 更多