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

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中的一个属性。

你只是在询问属性,对吗(至少你标记了一个关于仅属性的解决方案作为正确答案)?为了提高可搜索性,编辑标题会很好,但我不想在没有你的反馈的情况下这样做... - Kalle Richter
@KarlRichter 我已经编辑了标题/问题。如果还有空间可以使其更精确,请随意编辑。谢谢! - lgraf
1个回答

5
您可以将一个属性映射传递给 Persistence.createEntityManagerFactory()。为此,您必须自己管理持久性上下文(无法注入它)。
另一种选择是将该属性设置为 Java 系统属性(-D=),这不会覆盖 persistence.xml 中的现有属性,但如果该属性不在 persistence.xml 中,则可以起作用。
另一种选择是将 SessionCustomizer 或 SessionTuner 放入您的 persistence.xml 中,以允许您自己的代码在运行时修改配置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接