【问题标题】:Hudson + JUnit + embedded GlassFish, how to provide domain configuration?Hudson + JUnit + 嵌入式 GlassFish,如何提供域配置?
【发布时间】:2010-09-15 13:29:22
【问题描述】:

我正在使用 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 文件。对吧?

两个问题:

  1. 为什么它可以在我的开发盒上与 NetBeans 一起使用? NetBeans 在后台有什么魔力?
  2. 我应该如何提供文件? Hudson-box 上的嵌入式 GlassFish 期待它在哪里?

Hudson 使用相同的 Ant 构建脚本(由 NetBeans 创建)。

我已经阅读了this post 关于 instanceRoot 和 EmbeddedFileSystemBuilder 的内容,但我对此的了解还不够。每个 TestCase 都需要这个吗(Emb. GF 为每个被测 bean 启动/停止)?这是 EJBContainer.createEJBContainer() 的一部分吗?同样,为什么在 NetBeans 上运行测试时不需要这样做?

更新 按照 Peter 的建议,我可以确认:在新签出的代码副本上运行 ant 时,具有与配置 hudson 相同的属性,测试将被执行!

【问题讨论】:

    标签: junit hudson glassfish-embedded


    【解决方案1】:

    10-1 这是一个类路径问题,因为 IDE 倾向于根据您是正常运行还是单元测试来交换路径。

    尝试从您的 SCM 中新签出的版本在命令行上运行测试。您可能会遇到相同的错误。在本地机器上调试比在远程机器上容易得多。

    当它在命令行上可靠地构建(在一个单独的目录中)时,是时候转移到 hudson 了。

    【讨论】:

    • 感谢您的建议!当我运行 'ant test' 时,测试实际上工作并被执行。还有其他想法吗?
    • @Hank:你是从命令行在 Hudson 服务器上运行的吗?如果是,则可能是权限问题。使用与 Hudson 相同的凭据运行测试?
    • @2nd Peter:你这个男人!谢谢大佬,原来如此。 ${GLASSFISH_HOME}/glassfish/domains/domain1/config 对 hudson 用户不可读。现在一切都好!
    猜你喜欢
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多