2017-08-09 69 views
0

我正在使用eclipseLink JPA,並且我在兩個不同的服務器中部署的兩個不同的EJB應用程序使用相同的數據庫。如果其他應用程序正在對同一對象進行某些修改,則會由於JPA高速緩存而導致併發問題。有什麼辦法可以管理這個併發問題。對數據庫操作使用本機查詢不是一種選擇。我正在使用oracle db和glassfish服務器。有沒有可用的解決方案。由於緩存數據導致的eclipselink jpa中的併發問題

+0

你有什麼問題?是交易鎖嗎?或由於緩存導致對象狀態不一致? –

+0

我在一個應用程序中顯示了一條記錄作爲列表,並且我從第二個應用程序更新了相同的記錄,因此在列表中顯示的是相同的舊值。 –

回答

1

讓我解釋一下爲什麼你的問題:

爲對象想象一下,你有數據緩存。因此,第一個應用程序將使用該緩存的數據,並且不需要此應用程序去數據庫(因爲它已經在內存中有值)。如果您將對相同的entityManager執行另一個修改查詢,它可以升級該緩存的數據。它絕不會知道其他應用程序更改了數據的狀態。

因此,隔離級別無助於第一個應用程序的讀取查詢,因爲它已具有緩存值。而據entityManager知道的只是該同一位經理的操作。無法知道另一個entityManager在不同的應用程序上。

解決方法是不緩存。或者,您可以將外部緩存配置爲您可以從兩個應用程序中逐出的二級緩存(例如,像hazelcast緩存)。

+0

你如何設置隔離級別來進行序列化,它是否有助於緩存中的數據不一致。 –

+0

@VickyRathee我編輯了答案,因爲它變得更清楚你面臨的問題。 –