【问题标题】:Add persistence.xml from EJB dependency in arquillian test在 arquillian 测试中从 EJB 依赖项添加 persistence.xml
【发布时间】:2014-01-15 19:09:07
【问题描述】:
我有一个 web maven 应用程序,它具有 数据库 EJB jar 作为依赖项。
数据库 EJB 是一个拥有所有 JPA 实体和 persistence.xml 文件的 EJB,因此它负责所有数据库操作。
我刚刚阅读了http://arquillian.org/guides/testing_java_persistence/,它解释了如何使用 arquillian 测试持久性。
本教程认为persistence.xml文件在webapp路径下,所以添加了META-INF/persistence.xml作为资源。
所以我想知道,从我的 web 应用程序运行 arquillian 测试时,如何添加数据库的 persistence.xml?这可能吗?
【问题讨论】:
标签:
testing
jpa
ejb
jboss-arquillian
【解决方案1】:
也许答案来的有点晚,但无论如何我希望它对你仍然有价值:
您有两个选择,要么从文件中读取存档(可能生成我的 mvn 包),要么使用 ShrinkWrap 自己创建存档:
选项 (1),从带有 @Deployment 注释的某处调用:
/** maven did it for us .. we just have to read the file */
private static Archive<?> getArchiveFromFile() {
JavaArchive artifact = ShrinkWrap.create(ZipImporter.class, ARCHIVE_NAME).importFrom(ARCHIVE_FILE)
.as(JavaArchive.class);
return artifact;
}
选项(2),我发现不时检查文件很有用,因此可以选择将其写入文件系统:
/** doing it the hard way ... guess you won't like it as EVERY class plus related stuff needs to be specified */
private static Archive<?> getArchiveManually() {
// creating archive manually
JavaArchive artifact = ShrinkWrap.create(JavaArchive.class, ARCHIVE_NAME)
.addPackage(FooServiceBean.class.getPackage()).addPackage(Foo.class.getPackage())
.addPackage(FooService.class.getPackage()).addAsResource("META-INF/persistence.xml")
.addAsResource("META-INF/beans.xml");
// so we might write it for further inspection
if (WRITE_ARCHIVE) {
artifact.as(ZipExporter.class).exportTo(new File("D:/abc/xyz/tmp/" + ARCHIVE_NAME), true);
}
return artifact;
}
所以你的答案包含在第二个选项中;-)