Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa Arquillian:我是否需要domain.xml和Arquillian.xml来使用Derby DB进行最小的Glassfish嵌入式测试?_Jpa_Junit_Glassfish_Derby - Fatal编程技术网

Jpa Arquillian:我是否需要domain.xml和Arquillian.xml来使用Derby DB进行最小的Glassfish嵌入式测试?

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

在互联网上,我经常发现关于这个话题的最新但相反的信息…,因此我想问一个关于最低要求的问题

我的目标是对简单EJB 3.1应用程序进行一个非常简单的集成测试:

  • 带有EclipseLink的简单JPA2.0功能
  • Arquillian和JUnit用于测试
  • 马文
  • Derby DB(在./target中的内存或文件中),JTA持久性上下文
  • 阿奎利安的镶嵌玻璃鱼
所以我只想做一个简单的JPA测试。我在Arquillian中运行Glassfish,但是当我做JPA时,我的应用程序总是无法处理Derby DB(告诉我没有表等),但是DDL文件看起来很正常。 我尝试在persistence.xml中提供模式名、用户等,但没有任何帮助。有时,一个come accross帖子会告诉我如何在minimal domain.xml中对嵌入的Glassfish进行更改,以匹配persistence.xml或修改arquillian.xml

我的问题是:对于这种最小的方法,我真的需要src/test/glassfish/domains/domain1/domain.xml或arquillian.xml吗

我很确定,不久前我用嵌入式Glassfish做到了这一点,但使用Hibernate4作为JPA提供程序。我再也不能访问该项目了,因此除了我明确没有添加domain.xml等内容外,我无法区分两者之间的区别。 像()这样的帖子确实让我困惑

重要的是,我使用的不是托管服务器,而是嵌入式服务器

谢谢大家,干杯, 蒂莫

这是我的一个版本,请看我下面的评论

<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在集成测试后消失。