我们有一个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的其余部分只指向我们尝试启动服务器的行,并且没有提供有用的信息。
有两点需要注意:
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。
知道我们可能做错了什么?
答案 0 :(得分:0)
上次我手工使用嵌入式玻璃鱼时,我设置了org.glassfish.ejb.embedded.glassfish.installation.root
属性,而不是instance
。试试这个。
作为旁注:我强烈建议尝试使用Arquillian,因为它在选择目标容器时为您提供了灵活性,因为您的测试是可移植的。而且你不再需要摆弄这个笨拙的引导代码了。此外,我不是嵌入式容器的忠实粉丝,因为它们常常会给类加载器带来麻烦。