全域性事務、區域性事務的優點和缺點
關於事務管理,Java EE的開發者面對兩種選擇:全域性事務或區域性事務
術語
全域性事務:Global Transactions
區域性事務:Local Transactions
JTA:Java Transaction API
CMT:Container Managed Transaction
宣告式事務管理:Declarative Transaction Management
程式設計式事務管理:Programmatic Transaction Management1、全域性事務
全域性事務由應用伺服器通過JTA進行管理。以前,使用全域性事務比較流行的方法是採用EJB CMT,CMT
1.1、全域性事務的優點:
(1)全域性事務支援多個事務性資源間的相互工作(如:關係型資料庫和訊息佇列)。
1.2、全域性事務的缺點:
(1
(2)通常情況下,JTA UserTransaction需要從JNDI獲取。這意味著,如果我們使用JTA,就需要同時使用JTA和JNDI。
(3)通常JTA只能在應用伺服器環境下使用,因此使用JTA會限制程式碼的複用性。
2、區域性事務
區域性事務是資源特有的(resource-specific),最常見的例子是與JDBC連線相關聯的事務。使用區域性事務,應用伺服器不參與事務管理並且不能保證訪問多個資源的正確性。值得注意的是:大多數應用程式使用單個的事務性資源。
2.1、區域性事務的優點:
(1)易用
2.2、區域性事務的缺點:
(1
(2)區域性事務趨向於程式設計模型,程式設計模型具有侵入性。
Spring可以使應用程式開發者在任何環境下使用統一的程式設計模型。應用程式開發者只需要編寫一次程式碼,就可以使用不同環境下的不同事務管理策略。Spring既支援宣告式事務管理,也支援程式設計式事務管理。
我們推薦使用宣告式事務管理。採用程式設計式事務管理,開發者需要使用Spring提供的事務抽象(它可以在任何基礎的事務架構上執行)。採用宣告式事務管理,開發者僅需要編寫少量甚至不需要編寫與事務管理相關的程式碼,因此它不依賴於Spring的事務API。