所以这就是我要做的事情并坚持:
我有一个带有@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文件标签引用了一个不存在的jar!当Eclipse部署其他WebApp项目时,它会在WEB-INF / lib下创建JAR,实际的persistence.xml会引用该路径下的jar!但是,在运行JUnit测试用例时,我找不到任何此类JAR。
那么我如何在test.persistence.xml中引用此JAR或共享项目中的类,而不会使测试用程本身过度依赖于部署结构或任何特定的硬编码路径!这个测试用例最终会被提交到存储库,因此任何开发人员都必须能够运行它。
非常感谢任何正确方向的指针!
答案 0 :(得分:3)
IMO最简单,更好的方法是使用Arquillian。 控制包装,容器的生命周期等等要容易得多 TomEE还提供了一个很好的集成(适配器)和Arquillian,你可以使用。
查看文档页面http://tomee.apache.org/documentation.html 有一个arquillian部分。
你也可以查看TomEE示例页面,在那里你可以找到大量的小样本,包括arquillian。
希望它有所帮助 让路易