3

我有一个 java-ee Web 应用程序,它使用一个持久性单元,该单元被打包为一个 jar 依赖项(实体类、EJB 存储库、persistence.xml)。

为了让 Web 应用程序运行一些验收测试,我需要覆盖打包的 persistence.xml 中的一个属性。具体来说,我需要通过设置以下属性来禁用默认的活动 eclipselink共享对象缓存。

<property name="eclipselink.cache.shared.default" value="false"/>

这是必要的,因为验收测试直接使用 dbunit 准备/清理数据库。这些修改将使 eclipselink 缓存处于陈旧状态(因为持久性单元不参与这些修改)。

java-ee(或 glassfish 特定)中是否有一种方法可以覆盖位于 jar 中的 persistence.xml 中的属性(从运行我的测试时部署的 web 应用程序 war 文件开始)?

可能还有其他方法,例如构建特定于测试部署的 jar 依赖项,但这条路线对我来说似乎很复杂,因为只覆盖了我的 persistence.xml 中的一个属性。

4

1 回答 1

5

您可以将属性映射传递给 Persistence.createEntityManagerFactory()。为此,您必须自己管理持久性上下文(将无法注入它)。

另一种选择是将属性设置为 Java 系统属性 (-D=),这不会覆盖persistence.xml 中的现有属性,但如果该属性不在persistence.xml 中,则可以使用。

另一种选择是将 SessionCustomizer 或 SessionTuner 放入您的 persistence.xml 以允许您自己的代码在运行时修改配置。

于 2013-07-11T12:59:00.387 回答