2011-08-05 77 views
9

我們遇到了一個適用於多線程的場景。如何在多線程之間共享一個事務

在主線程中,執行一些邏輯並更新數據庫,在某一點上,它將調用另一個服務來更新數據庫,該數據庫在另一個線程中運行。

我們希望兩個線程共享相同的事務,這意味着任一線程中的操作都失敗,那麼另一個線程中的操作也將被回滾。

但工作了好幾天,我發現有些帖子說JTA不支持多線程。 目前我們使用Bitronix作爲JTA提供者,有沒有人知道Bitronix是否支持一個事務中的多線程?或者還有其他的JTA提供者支持這個(獨立的JTA提供者而不是J2EE容器)嗎?

回答

9

「多個線程可能同時與同一個全局事務相關聯。」 - JTA spec v1.1,第3.2節,第13頁。

JBossTS將處理這個問題。除了檢查交易行爲之外,難度並不是真正的交易經理。您還需要正確處理與資源管理器(即數據庫)的連接。如果你在線程之間共享一個連接,那麼串行運行並不一定會有任何加速,因爲這是一個潛在的瓶頸,除非驅動程序支持有效的多路複用。另一方面,如果您使用多個連接,則需要確保驅動程序將合理地實現isSameRM以避免2PC,並且如果線程需要查看對方對db的未提交更改,還允許事務分支鎖共享(緊密耦合)。所以除了一個好的交易管理器外,你還需要一個好的連接管理器,例如JCA實現和一個好的數據庫驅動程序。祝你好運,找到那些。

+1

感謝Uncredited!我檢查了JTA規範。我確實發現了這些詞。當我在BTM論壇提問時,他們說BTM不支持這個功能。一些人建議Jboss TS或Atomics,以及我沒有嘗試過這兩種。 – Scarlett

+0

@scarlet您是否找到解決方案? Plz分享你的發現。 –

+1

直到現在我還不知道,我改變只使用一個線程。你呢? – Scarlett

相關問題