JPA與

2010-08-09 55 views
3

我目前正在對使用JPA(Toplink的,目前),其持久性的項目多臺服務器。目前,我們正在運行單個應用程序服務器,但爲了實現冗餘,我們希望添加一個負載平衡器和另一個應用程序服務器(並且可能隨着其增長而增加)。JPA與

首先,我運行到JPA的緩存問題。由於兩個進程將更新同一個數據庫,因此JPA高速緩存會返回緩存的值,而不會返回數據庫。我看到如何關閉它,並且數據庫本身實現了一定程度的緩存。是完全關閉緩存的方式去這裏?我看到了讓JPA始終以查詢級別從數據庫獲取數據的方法,但在多服務器環境中,似乎總是希望這種情況發生。

隨着這個具體問題,我感興趣的人在那裏誰已經實施了與多個應用程序服務器和實現(和你有什麼建議)期間出現了什麼問題JPA解決方案。

非常感謝。

+0

你指的是什麼緩存?來自TopLink的東西(JPA 1.0沒有標準化L2緩存)?你能澄清嗎? – 2010-08-10 09:01:27

+0

我在這裏談論會話緩存(http://weblogs.java.net/blog/guruwons/archive/2006/09/understanding_t.html)。 – MikeTheReader 2010-08-10 14:19:57

+0

爲什麼在發佈您的問題時沒有提供該鏈接?添加上下文或鏈接通常不會造成傷害,特別是當問題是關於提供程序特定功能而不是JPA時。 – 2010-08-10 20:00:07

回答

6

當你發現,你可以禁用共享緩存,見http://wiki.eclipse.org/EclipseLink/Examples/JPA/Cachinghttp://wiki.eclipse.org/EclipseLink/FAQ/How_to_disable_the_shared_cache%3F

也有根據您的數據和要求的EclipseLink其他可用選項。

選項的列表包括:

  1. 禁用共享緩存

  2. 啓用緩存協調(見http://www.eclipse.org/eclipselink/api/2.1/org/eclipse/persistence/config/PersistenceUnitProperties.html#COORDINATION_PROTOCOL

  3. 設置高速緩存無效超時(見http://www.eclipse.org/eclipselink/api/2.1/org/eclipse/persistence/annotations/Cache.html#expiry%28%29

  4. 啓用樂觀鎖定,這將確保任何飛蝨e對象無法更新,當發生過期數據更新時,它將失敗,並且EclipseLink將自動使緩存中的對象失效。

  5. 調查的EclipseLink和Oracle的連貫性和Oracle TopLink整合,提供分佈式緩存。

還參見http://en.wikibooks.org/wiki/Java_Persistence/Caching#Caching_in_a_Cluster

沒有完美的解決方案,通常使用的溶液取決於數據/類,通常的應用程序具有一組只讀類,讀爲主類和寫大多是班級。就我個人而言,我會啓用高速緩存爲1天超時的只讀,啓用高速緩存與緩存協調的讀取爲主,並禁用大部分寫緩存。