可以覆盖位于jar依赖项中的persistence.xml中的属性

时间:2013-07-11 07:25:05

标签: jpa glassfish eclipselink java-ee-6 persistence.xml

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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