Jpa Arquillian:我是否需要domain.xml和Arquillian.xml来使用Derby DB进行最小的Glassfish嵌入式测试?
在互联网上,我经常发现关于这个话题的最新但相反的信息…,因此我想问一个关于最低要求的问题 我的目标是对简单EJB 3.1应用程序进行一个非常简单的集成测试:Jpa Arquillian:我是否需要domain.xml和Arquillian.xml来使用Derby DB进行最小的Glassfish嵌入式测试?,jpa,junit,glassfish,derby,Jpa,Junit,Glassfish,Derby,在互联网上,我经常发现关于这个话题的最新但相反的信息…,因此我想问一个关于最低要求的问题 我的目标是对简单EJB 3.1应用程序进行一个非常简单的集成测试: 带有EclipseLink的简单JPA2.0功能 Arquillian和JUnit用于测试 马文 Derby DB(在./target中的内存或文件中),JTA持久性上下文 阿奎利安的镶嵌玻璃鱼 所以我只想做一个简单的JPA测试。我在Arquillian中运行Glassfish,但是当我做JPA时,我的应用程序总是无法处理Derby D
- 带有EclipseLink的简单JPA2.0功能
- Arquillian和JUnit用于测试
- 马文
- Derby DB(在./target中的内存或文件中),JTA持久性上下文
- 阿奎利安的镶嵌玻璃鱼
<persistence-unit name="localiser-core" transaction-type="JTA">
<jta-data-source>jdbc/__default</jta-data-source>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:derby:memory:test;create=true" />
<property name="javax.persistence.jdbc.user" value="" />
<property name="javax.persistence.jdbc.password" value="" />
<property name="eclipselink.target-database" value="Derby"/>
<property name="eclipselink.ddl-generation.output-mode"
value="database" />
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.application-location" value="target" />
<property name="eclipselink.create-ddl-jdbc-file-name" value="create.sql"/>
<property name="eclipselink.drop-ddl-jdbc-file-name" value="drop.sql"/>
<property name="eclipselink.debug" value="ALL"/>
<property name="eclipselink.weaving" value="static"/>
<property name="eclipselink.logging.level" value="FINEST"/>
<property name="eclipselink.logging.level.sql" value="FINEST"/>
<property name="eclipselink.logging.level.cache" value="FINEST"/>
</properties>
</persistence-unit>
jdbc/_默认值
因为您的连接URL是:jdbc:derby:memory:test;create=true,您告诉Derby的是:连接到文件夹“test”中的数据库,相对于Derby启动位置的当前工作目录,如果该数据库“test”不在当前工作目录中,请从头开始创建它
因此,一种可能性是,您的应用程序每次都有不同的当前工作目录,或者每次运行应用程序时,应用程序中的其他内容正在清除当前工作目录
因此,Derby在该位置找不到以前的数据库,因此它创建了一个新的数据库
解决这个问题的一种方法是使用连接URL为数据库指定一个更明确的位置,例如:jdbc:derby:memory:/users/timo/testdb
然后先创建一次数据库,然后应用程序将在指定位置找到数据库并使用它。这是my persistence.xml的众多修改之一-我尝试了许多不同的文件、不同的数据库名、用户和密码名等。它似乎还可以针对数据库发布SQLs,但似乎根本就没有模式。另外,读取/删除JTA数据源名称也没有帮助:(你好,Bryan,非常感谢你的回复!问题是我尝试了数千个位置,也没有“内存”和文件夹,例如“/tmp/”和“target”(使用Maven)。然而,它似乎创建了一个数据库,但却抱怨缺少它在数据库中没有创建的模式:(当省略模式名时,它似乎是从用户名派生出来的,但它仍然说模式不存在或至少找不到相应的表。顺便说一下,我认为是“内存”是一个保留名称,表示数据库将完全进入RAM而不是HDD?哎呀!我完全忽略了URL的“内存”方面!这意味着数据库不会在程序运行一次之后保持不变。程序的每个实例都将创建一个全新的数据库内存副本,该副本将消失是的,如果你没有明确指定一个模式,默认的模式名就是你的用户名。嗨,Bryan,…这是有趣的一点-上面的Derby配置似乎创建了模式,但没有内容-因此没有包含表、序列等。剩下的是需要的行为,即B在集成测试后消失。