2014-01-22 45 views
6

我目前正在開發一個SOA項目。如何在SOA架構中使用事務和回滾

我開發了一些處理鏈,也就是一個Web服務,一個ESB在Java中內鏈的Web服務。

由於每個網絡服務鏈可以拋出不同的異常,我想過使用交易能夠回滾網絡服務的行爲。

但是,我不知道這是甚至可能在SOA環境中每個服務都不同時。我搜索了它,發現了一些關於AtomicTransactions的信息,但我不確定它可以用來解決我的問題。

最後,我的問題是它實際上可以回滾服務?如果是這樣,我該如何設置它?

在此先感謝。

+1

我一直在研究這個問題,發現人們使用佐賀模式。這不是一個完整的答案,所以把它置於評論。 http://arnon.me/soa-patterns/saga/ – ReVolly

+0

只是一個問題,但你看過JTA? – Namphibian

+0

我沒有使用過JTA,但可以在分佈式環境中使用它嗎?我認爲必須採取不同的方式來解決問題,因爲這些問題有所不同。你有任何可以幫助我在SOA中設置事務的鏈接,還是純JTA?有沒有特別的註釋? – qbisson

回答

9

使用服務之間的交易是不是一個很好的做法,你正在爲不一定是值得信賴的部件舉着資源,再加上服務流程通常是長時間運行的(我更「transactional-integration anti-pattern寫道:」這件事。

正如在評論中提到人,我發現「saga pattern」是一種更好的方式來處理這些長期運行的交互

+1

謝謝。我搜索了「saga模式,如果我理解正確,這意味着我必須補償服務所做的操作。服務是否需要一種方法來取消服務方法?例如,執行add()方法時,當拋出一個異常時,它是否必須在服務上調用aremove()方法?還是有其他方法可以實現這一點?有關信息,我們的項目使用編排組件來調用不同的服務 – qbisson

+2

如果您正在編排你可以從外部調用對服務的反向操作,另一種方法是讓外部協調器協調事件並讓服務知道它失敗,然後每個服務都可以在內部盡最大努力處理失敗。回滾或以某種其他方式進行補償。如果租約未續約和/或未成功完成交易,服務也可以保持承諾並獨立回滾 –

+0

謝謝。我們將嘗試在我們的項目中實現這一點。我會嘗試更深入地調查佐賀模式。 – qbisson

0

我覺得整個的想法不好的最好。 SOA和交易一直是一個巨大的頭痛。 倡導一組服務的逆向行爲也可能失敗!那麼你會怎麼做?

我知道一個很著名的媒體公司,在英國,有一個專門的海外團隊,按摩數據,由於整個網絡服務,其中,博格爾斯頭腦編排故障。

最後,OEM BPM引擎作爲協作型我覺得可能是依賴於工作概念的股的能力。但是,這個話題一直令人驚訝,仍然是一個問題。

+0

我不明白爲什麼你會認爲在SOA架構中進行事務會很糟糕。我真的認爲應該有辦法做到這一點,也許在協議中添加跨服務交易的概念,而不必自己實現它。現在,我知道這不是一件容易的事,因爲仍然會有其他問題,但是如何保持應用程序的完整性? – qbisson

+0

嗨。其實我不認爲他們是壞的。我只是說,做一個補償不是一個好主意。此外,只是發現我的答覆實際上是錯誤的。從我最後一次參加SOA項目開始,OASIS的交易標準就是用Oracle Weblogic 11實現的,例如:http://docs.oasis-open.org/ws-tx/wstx-wsat-1.2 -spec-CS-01/wstx-WSAT-1.2規格-CS-01.html – Beezer