无法在嵌入式EJBContainer上进行CDI集成测试

时间:2013-06-18 08:29:56

标签: maven glassfish ejb integration-testing ejb-3.1

我们有一个Maven多模块项目,包含一些ejb和war模块。其中一个模块用作整个平台的集成测试器。 我们已经使用嵌入式EjbContainer成功测试了ejbs,包括安全性,依赖注入和事务。

现在我们想要将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项目结构

的myproject
MyProject的耳
MyProject的域
MyProject的,EJB1
MyProject的-EJB2
MyProject的战争
myproject-test

环境
  - Glassfish 3.1,3.2
  - TestNG

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。

知道我们可能做错了什么?

1 个答案:

答案 0 :(得分:0)

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

作为旁注:我强烈建议尝试使用Arquillian,因为它在选择目标容器时为您提供了灵活性,因为您的测试是可移植的。而且你不再需要摆弄这个笨拙的引导代码了。此外,我不是嵌入式容器的忠实粉丝,因为它们常常会给类加载器带来麻烦。