2013-07-11 55 views
2

我有一個java-ee web應用程序,該應用程序使用持久性單元打包爲jar依賴項(實體類,EJB存儲庫,持久性)。 XML)。可以覆蓋位於jar依賴項中的persistence.xml中的屬性

爲了讓Web應用程序運行一些驗收測試,我需要重載打包的persistence.xml中的一個屬性。具體而言,我需要通過設置以下屬性來禁用默認活動eclipselink shared object cache

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

這是必要的,因爲驗收測試是直接使用dbunit準備/清理數據庫。這些修改會將eclipselink緩存置於陳舊狀態(因爲持久性單元不參與這些修改)。如何覆蓋位於jar中的persistence.xml(從運行我的測試時部署的Web應用程序war文件開始)中的java-ee(或特定於glassfish)的方法嗎?

可能還有其他方法,例如構建特定於測試部署的JAR依賴項,但是這條路線對我來說似乎很複雜,因爲它只覆蓋了我的persistence.xml中的一個屬性。

+0

您只是在詢問有關屬性,對(至少您標記了一個答案,指的是屬性的解決方案只是正確的)?爲了提高可搜索性,編輯標題會很好,但是我不想在沒有您的反饋的情況下執行此操作... –

+0

@KarlRichter我編輯了標題/問題。如果還有空間讓它更精確,請隨時編輯它。謝謝! –

回答

1

您可以將屬性映射傳遞給Persistence.createEntityManagerFactory()。要做到這一點,你必須自己管理你的持久化上下文(將不能注入它)。

另一個選項是將該屬性設置爲Java系統屬性(-D =),但這不會覆蓋persistence.xml中的現有屬性,但是如果該屬性不在persistence.xml中,將會工作。

另一種方法是將SessionCustomizer或SessionTuner放入persistence.xml中,以允許您自己的代碼在運行時修改配置。