2009-09-30 37 views
3

我在單位工作被定義爲一個場景跨越:處理事務跨數據庫服務器

Update table T1 in database server S1 
Update table T2 in database server S2 

而且我想上述工作單位都完全或沒有發生(如任何數據庫事務的情況)。我怎樣才能做到這一點?我搜索了很多,發現這個post接近我的期望,但這似乎是非常具體的Hibernate。

我使用Spring,iBatis和Tomcat(6.x)作爲容器。

+0

基於FOSS的解決方案將非常有幫助。 – peakit 2009-09-30 17:24:44

+0

JBoss事務管理器是開源的,可以在不需要整個JBoss容器的情況下使用。 – SteveD 2009-10-01 13:49:13

+0

而且你的數據庫都需要支持XA--並不是每個人都會這樣做,他們的穩定性/功能性水平可能會引起人們的關注。 – SteveD 2009-10-01 13:50:50

回答

6

這實際上取決於您需要的解決方案有多強大。這種事情的最低可靠程度是XA事務。要使用它,您需要一個支持初學者的數據庫和JDBC驅動程序,然後您可以配置Spring使用它(here是概述)。如果XA對你來說不夠健壯(XA有失敗的場景,比如如果在第二階段的提交中出現問題,比如硬件故障),那麼你真正需要做的就是把所有的數據在一個數據庫中,然後有一個單獨的進程傳播它。所以數據可能不一致,但可以恢復。

編輯:我的意思是把整個數據放到一個數據庫中。無論是第一個數據庫還是用於此目的的其他數據庫。這個數據庫本質上將成爲一個隊列,從中提供最終的數據視圖。寫入該數據庫(假設一個體面的數據庫產品)將完成,或完全失敗。然後,一個單獨的線程將輪詢該數據庫並將任何缺失的數據分發給其他數據庫。因此,如果進程失敗,那麼當該線程再次啓動時,它將繼續分發進程。數據可能並不存在於你想要的任何地方,但沒有任何東西會丟失。

+0

「如果XA對您來說不夠健壯,那麼您真正需要做的就是將所有數據放在一個數據庫中,然後有一個單獨的進程將其傳播」 請您介紹一下這一點嗎? 「將所有數據放在一個地方」和「單獨的過程傳播它」是什麼意思? – peakit 2009-10-01 04:23:32

2

你想要一個分佈式事務管理器。我喜歡使用可以在JVM中運行的Atomikos

+0

它是免費且開源的嗎? – peakit 2009-10-01 04:30:14

+0

@peakit,看着他們的網站,他們有一個免費的(實際上需要註冊才能下載)Apache 2.0許可版本,以及更高級的閉源版本。 – Yishai 2009-10-01 13:01:13