是否基於UserTransaction接口完成BMT的編程?換句話說,如果我想使用BMT,是否有任何情況需要比UserTransaction接口提供的更多的服務。BMT編程 - UserTransaction
爲什麼這個問題?如果我使用事務管理器的不同實現(比如Bitronix TM或Atomikos)而不使用容器提供的默認值,那麼僅僅將新TM插入UserTransaction對象就足夠了?
-Thanks
是否基於UserTransaction接口完成BMT的編程?換句話說,如果我想使用BMT,是否有任何情況需要比UserTransaction接口提供的更多的服務。BMT編程 - UserTransaction
爲什麼這個問題?如果我使用事務管理器的不同實現(比如Bitronix TM或Atomikos)而不使用容器提供的默認值,那麼僅僅將新TM插入UserTransaction對象就足夠了?
-Thanks
這實際上僅限於應用服務器本身允許的內容;即它是否明確支持替換事務管理器。
真正藝術事務管理是容器經由與Synchronization對象包裝它們,並通過任一Transaction或與當前事務註冊它們註冊事務資源(數據源的連接,JMS會話,JPA EntityManagers等)與所述事務管理
容器實現Synchronization
對象,TransactionManager實現了Transaction
和TransactionSynchronizationRegistry
對象。兩者之間的協調是什麼讓您在交易運行時進行實際管理。
BMT和CMT是告訴容器啓動/停止交易的替代方法。在某些方面,術語「Bean-Managed」是錯誤的,因爲每個兼容的應用程序服務器中的UserTransaction
將由容器實現,因此它仍然是執行工作的容器。 「容器管理」也有點誤導,因爲它仍然是決定何時開始/停止事務的bean開發人員,它只是以聲明方式與編程方式完成。對這些功能的最準確的描述是編程管理的事務和聲明式管理的事務。在所有情況下,它仍然是與容器交談的bean,容器和事務管理器正在做所有的工作。
儘管如此,你仍然可以改變事務管理器,OpenEJB和TomEE支持它,但它不會以你嘗試的方式工作。檢查你的供應商,看看這是否可能。
也許並不完全回答你的問題,但如果使用BMT你也允許使用本地資源事務管理。在這種情況下,你不會使用(注入的)UserTransaction接口。
請注意,如果沒有正在進行的事務通過所述UserTransaction接口啓動,則這只是合法的。
感謝您的回答。你能用一個簡單的例子來說明嗎?你的意思是說,在使用資源本地TM時,不需要UserTransaction?如果我沒有弄錯,我想在這種情況下可以使用UserTransaction,雖然我們不會使用符合JTA的交易。如果我錯了,請糾正我。 – Bala 2012-01-02 15:12:48
UserTransaction符合JTA,如果我沒有按照定義弄錯。可以肯定的是,資源本地TM在JDBC連接上就像'connection.setAutocommit(false)'一樣。 – 2012-01-02 15:57:43
感謝您的回覆。你能不能解釋一下_「但是它不會以你嘗試的方式工作。」在我的例子中,我並沒有更換容器中的TM,但我在單元測試階段只使用了第三方TM當沒有容器涉及時。我只想知道是否可以使用UserTransaction接口的服務完全實現BMT,或者我們是否需要針對任何特殊情況提供其他服務? (就像例如Dexter已經解釋的那樣,在資源本地TM中沒有UserTransaction的情況下可以使用BMT)。 – Bala 2012-01-03 09:35:38