1. 程式人生 > >全域性事務、區域性事務的優點和缺點

全域性事務、區域性事務的優點和缺點

關於事務管理,Java EE的開發者面對兩種選擇:全域性事務或區域性事務

術語

全域性事務:Global Transactions

區域性事務:Local Transactions

JTAJava Transaction API

CMTContainer Managed Transaction

宣告式事務管理:Declarative Transaction Management

程式設計式事務管理:Programmatic Transaction Management

1、全域性事務

全域性事務由應用伺服器通過JTA進行管理。以前,使用全域性事務比較流行的方法是採用EJB CMTCMT

是宣告式事務管理的一種形式(區別於程式設計式事務管理)。儘管使用EJB本身就需要使用JNDI EJB CMT不需要事務相關的JNDI lookupsEJB CMT不需要編寫大量的Java程式碼來控制事務。使用CMT最大的不足之處是它被束縛在JTA和應用伺服器上。CMT只有當在EJB中實現業務邏輯時才可以發揮作用,或者至少處於事務性EJB Façade中。由於EJB存在諸多的不足並且目前存在其他可選的宣告式事務管理的解決方案,所以不太建議使用EJB方式。

1.1、全域性事務的優點:

1)全域性事務支援多個事務性資源間的相互工作(如:關係型資料庫和訊息佇列)。

1.2、全域性事務的缺點:

1

)採用全域性事務需要使用JTA,而JTA是一個笨重的API

2)通常情況下,JTA UserTransaction需要從JNDI獲取。這意味著,如果我們使用JTA,就需要同時使用JTAJNDI

3)通常JTA只能在應用伺服器環境下使用,因此使用JTA會限制程式碼的複用性。

2、區域性事務

區域性事務是資源特有的(resource-specific),最常見的例子是與JDBC連線相關聯的事務。使用區域性事務,應用伺服器不參與事務管理並且不能保證訪問多個資源的正確性。值得注意的是:大多數應用程式使用單個的事務性資源。

2.1、區域性事務的優點:

1)易用

2.2、區域性事務的缺點:

1

)區域性事務不支援多個事務性資源間的相互工作,比如:使用JDBC連線來管理事務的程式碼不能在全域性JTA事務上執行。

2)區域性事務趨向於程式設計模型,程式設計模型具有侵入性。

Spring可以使應用程式開發者在任何環境下使用統一的程式設計模型。應用程式開發者只需要編寫一次程式碼,就可以使用不同環境下的不同事務管理策略。Spring既支援宣告式事務管理,也支援程式設計式事務管理。

我們推薦使用宣告式事務管理。採用程式設計式事務管理,開發者需要使用Spring提供的事務抽象(它可以在任何基礎的事務架構上執行)。採用宣告式事務管理,開發者僅需要編寫少量甚至不需要編寫與事務管理相關的程式碼,因此它不依賴於Spring的事務API