1

所以这就是我正在尝试做的事情并坚持:

我有一个带有 @Entity (EJB 3.1) 类的共享 Eclipse Java 项目,该项目被其他几个 Eclipse WebApp 项目使用。这个项目本身没有persistence.xml!使用该项目的其他 WebApp 项目在 WebContent/META-INF 下声明自己的 persistence.xml,并使用 jar-file 标签在其 persistence.xml 中引用该项目的 JAR。当然,共享项目的 JAR 作为部署依赖添加到这些 WebApp 项目中,放在 WEB-INF/lib 下。

现在我正在创建 JUnit4 测试用例来测试这些 WebApp 项目中的无状态会话 bean。我正在使用 Apache TomEE 1.5.0 Plus,在测试用例中,我使用 @Before 方法使用 EJBContainer.createEJBContainer() 方法以嵌入式模式启动 OpenEJB 容器。为了使其正常工作,我创建了一个备用 test.persistence.xml(它使用与 HSQL 内存数据库不同的数据源并使用正向映射创建表)。我已将它放在 src 文件夹的 META-INF 中,并在 @Before 方法中,我将“openejb.altdd.prefix”设置为“test”,以便读取备用 test.persistence.xml。所有这些设置都有效。

问题是,OpenJPA 2.2.0 一启动,它就会抱怨共享项目中没有持久类!这是因为,test.persistence.xml 中的 jar-file 标签引用了一个不存在的 jar!当 Eclipse 部署其他 WebApp 项目时,它会在 WEB-INF/lib 下创建 JAR,而实际的 persistence.xml 指的是该路径下的 jar!但是,在运行 JUnit 测试用例时,我没有找到任何这样的 JAR。

那么如何在 test.persistence.xml 中引用这个 JAR 或共享项目中的类,而不会使测试用例本身过度依赖部署结构或任何特定的硬编码路径!该测试用例最终将提交到存储库,因此必须使任何检出它的开发人员都可以简单地运行它。

任何指向正确方向的指针将不胜感激!

4

1 回答 1

3

IMO 最简单和更好的方法是使用 Arquillian。控制包装、容器的生命周期等要容易得多。TomEE 还提供了与 Arquillian 的出色集成(适配器),您可以使用它。

检查文档页面http://tomee.apache.org/documentation.html 有一个 arquillian 部分。

您还可以查看 TomEE 示例页面,您可以在其中找到大量小样本,包括 arquillian。

希望它可以帮助让 - 路易斯

于 2012-12-06T09:32:24.587 回答