gpt4 book ai didi

jpa - Arquillian : Do I need domain. xml 和 arquillian.xml 用于使用 Derby DB 进行最少的 Glassfish 嵌入式测试?

转载 作者:行者123 更新时间:2023-12-04 14:39:40 25 4
gpt4 key购买 nike

在互联网上我经常找到关于这个主题的最新但相反的信息...,因此我想问一个关于最低要求的问题。

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

  • 使用 EclipseLink 的简单 JPA 2.0 功能
  • 使用 JUnit 进行测试的 Arquillian
  • 专家
  • Derby DB(在内存中或 ./target 中的文件中),JTA 持久性上下文。
  • 在 Arquillian 中嵌入 Glassfish

所以我只想做一个简单的JPA测试。我让我的 Glassfish 在 Arquillian 中运行,但是在执行我的 JPA 操作时,我的应用程序总是无法处理 Derby DB(告诉我没有表等),但 DDL 文件看起来很正常。我试着在我的 persistence.xml 中提供架构名称、用户等,但没有任何帮助。有时我会看到一些帖子告诉我如何更改嵌入式 Glassfish 的最小 domain.xml 以匹配我的 persistence.xml 或调整 arquillian.xml。

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

我很确定前段时间我设法使用嵌入式 Glassfish 做到了这一点,但使用 Hibernate 4 作为 JPA 提供程序。我再也无法访问该项目,因此除了我明确地没有添加 domain.xml 等之外,无法分辨出区别。像 ( other question here) 这样的帖子真的让我很困惑。

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

感谢和欢呼,蒂莫

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

<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>

最佳答案

因为您的连接 URL 是:jdbc:derby:memory:test;create=true,您告诉 Derby 的是:连接到文件夹“test”中的数据库,该文件夹相对于 Derby 启动位置的当前工作目录,如果当前工作目录中不存在该数据库“test”,则从头开始创建它。

因此,一种可能是您的应用程序每次都有不同的当前工作目录,或者您的应用程序中的其他内容可能会在您每次运行应用程序时清除当前工作目录。

因此 Derby 在该位置找不到以前的数据库,因此它创建了一个新的数据库。

解决此问题的一种方法是通过使用连接 URL 为您的数据库指定一个更明确的位置,例如:jdbc:derby:memory:/users/timo/testdb

然后先创建一次数据库,然后您的应用程序将在指定位置找到数据库并使用它。

关于jpa - Arquillian : Do I need domain. xml 和 arquillian.xml 用于使用 Derby DB 进行最少的 Glassfish 嵌入式测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15036259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com