2010-01-29 67 views
1

我正在設計一個嚴重依賴數據庫的應用程序。我需要我的應用程序對數據庫連接的短暫丟失具有恢復能力(例如,網絡停機幾秒鐘)。人們用於這些問題的通常模式是什麼?有沒有什麼我可以在數據庫訪問層上處理,以正常處理與db的網絡連接中的小故障(我正在使用hibernate + oracle jdbc + dbcp池)。數據庫彈性

+0

而不是試圖解決問題,爲什麼不解決問題?如果網絡不穩定,請修復它。或者如果你想創可貼,一個可能的解決方案是讓一個數據庫服務器位於一個不會受到網絡中斷影響的地方。隨着連接的進行,您可以將該數據庫同步到「主」數據庫。 – BryanH 2012-11-27 21:34:26

回答

2

我假設你隱藏了DAO後面的每個數據庫訪問或類似的東西。

現在創建這些DAO的包裝器,嘗試調用它們,並在發生異常時等待一秒鐘並重試。當然,這會在db-outage期間導致應用程序'掛起',但是當數據庫變得可用時它會恢復正常運行。

如果這是不可接受的,您將不得不將接近切片移動到UI層。考慮以下方法。

用戶導致 請求。

將所有請求信息包含在消息中並放入隊列中。

返回給用戶,告訴他他的請求會在短時間內得到處理。

在隊列中註冊的工作人員將處理請求,並在存在數據庫問題時重試。

請注意,您現在處於併發領域。所以你必須處理引用已經被刪除的實體的請求。

上「最終一致性」

既然你使用Hibernate,你必須處理延遲加載閱讀起來。連接中斷會導致會話中斷,因此對於您來說,最好不要使用延遲加載,而是使用分離的對象。