我正在使用 NetBeans 和 GlassFish 3.0.1 创建 EJB3 应用程序。我编写了一些单元测试,它们通过 JUnit 运行并使用嵌入式 GlassFish。每当我在我的开发机器上(所以从 NetBeans 中)运行这些测试时,一切都很好。
现在我想让 Hudson 做这些测试。目前,它因资源查找失败而失败(在本例中为 JPA 持久性单元的数据源):
[junit] SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
[junit] java.lang.RuntimeException: javax.naming.NamingException: Lookup failed for 'mvs_devel' in SerialContext
在搜索并尝试了解这一点后,我认为这与嵌入式 GlassFish 没有配置资源有关。换句话说,它缺少一个 domain.xml 文件。正确的?
两个问题:
- 为什么它可以在我的开发盒上与 NetBeans 一起使用?NetBeans 在后台有什么魔力?
- 我应该如何提供文件?Hudson-box 上的嵌入式 GlassFish 期望它在哪里?
Hudson 使用相同的 Ant 构建脚本(由 NetBeans 创建)。
我已经阅读了有关 instanceRoot 和 EmbeddedFileSystemBuilder 的这篇文章,但我对此还不够了解。每个 TestCase 都需要这个吗(Emb. GF 为每个被测 bean 启动/停止)?这是 EJBContainer.createEJBContainer() 的一部分吗?同样,为什么在 NetBeans 上运行测试时不需要这样做?
更新 按照 Peter 的建议,我可以确认:在新签出的代码副本上运行 ant 时,具有与配置 hudson 相同的属性,测试将被执行!