我有一个 web maven 应用程序,它有数据库 EJB jar 作为依赖项。
数据库 EJB 是包含所有 JPA 实体和持久性.xml文件的文件,因此它负责所有数据库操作。
我刚刚阅读了 http://arquillian.org/guides/testing_java_persistence/,它解释了如何使用arquillian测试持久性。
本教程认为持久性.xml文件位于 Web 应用路径中,因此它将 META-INF/持久性.xml 添加为资源。
所以我想知道,从我的 web 应用程序运行 arquillian 测试时.xml如何添加数据库的持久性?这可能吗?
也许答案来得有点晚,但无论如何,我希望它对你仍然有价值:
您有两种选择,要么从文件中读取存档(可能生成了我的 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;
}
所以你的答案包含在第二个选项中;-)