2011-02-18 106 views
1

在web應用程序中使用的休眠+彈簧+ AS400數據庫:(多數據源),使用休眠+彈簧鏡像數據

有3個數據源(每個區域一個),DS爲澳大利亞,DS爲英國和DS爲美國。所有數據源中的模式都是相同的。

現在需要將數據持久保存到數據源中,規則是主要區域(由最終用戶使用UI選擇)應始終用作主數據源以保存數據。另外,如果主要地區不是美國(比如用戶選擇的英國地區),那麼數據應該同時存在於英國數據源和美國數據源。

我知道一個簡單的手動方法來打開所有會話工廠並手動管理所有內容。 http://www.java-forums.org/database/867-hibernate-multiple-databases.html

什麼是其他替代品可用和最好的方式來實現呢?

回答

0

是否需要ACID?如果不是,我的第一個想法是添加一個@PostPersist,它將實體添加到JMS主題,該主題由3個客戶端讀取,每個客戶端代表一個數據庫。然後,每個客戶端將驗證實體是否已經在其數據庫中更新(例如,通過檢查樂觀鎖列)。

使用這種方法,您可能會遇到數據一致性問題,您需要針對每個客戶端的每個故障採取相應措施。另一方面,你會避免延遲(這就是爲什麼你有3個數據源的原因)。

但實際上,有:-)

+0

不幸的是,我不能介紹JMS,但有僅在spring + hibernate上工作,並可能支持某些數據庫驅動程序(如果可以確保將數據寫入多個數據源)。分佈式事務是一個更大的野獸。此設置的主要目的是將美國數據源作爲所有持續數據跨越地區的超集。 (如果美國數據源存在問題,那麼繁榮!!但是現在假設美國數據源具有高可用性並且支持故障轉移以具有這樣的問題) – sachink 2011-02-18 17:36:13

0

系統級(i系列)方法有幾個可能的解決方案將讓您的澳大利亞和英國的數據源,以美國網站的遠程日誌,並有美國網站應用日記更改其本地DB2。請注意,DB2/400上的SQL源始終是日誌記錄的(以提供承諾控制功能),因此您只需啓用遠程日誌記錄即可。有關此功能的概述,請根據您的操作系統版本轉至http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Fcl%2Fapyjrnchg.htm或類似內容。

來開發自己的程序的另一種適用日記變化是使用包裝的複製解決方案之一 - IBM DataReplicator,Vision Solutions公司ODS/ODM等