JTA知識 http://letgo.bokee.com/351051.html
JTA主要用于分布式的多個數(shù)據(jù)源的兩階段提交的事務(wù),而JDBC的Connection提供的單個數(shù)據(jù)源的事務(wù); 后者因為只涉及到一個數(shù)據(jù)源,所以其事務(wù)可以由數(shù)據(jù)庫自己單獨實現(xiàn), 而JTA事務(wù)因為其分布式和多數(shù)據(jù)源的特性, 不可能由任何"一個"數(shù)據(jù)源實現(xiàn)事務(wù), 因此JTA中的事務(wù)是由"事務(wù)管理器"實現(xiàn)的,它會在多個數(shù)據(jù)源之間統(tǒng)籌事務(wù),具體使用的技術(shù)就是所謂的"兩階段提交", 一般JTA事務(wù)都是用于EJB中(因為EJB本身也是分布式的), 所以一般的應(yīng)用服務(wù)器都有自己的事務(wù)管理器用來管理JTA事務(wù),注意這并不表示EJB容器有管理事務(wù)的功能; 事實上也有單獨的事務(wù)管理器比如開源的Tyrex. 如果只用Tomcat做應(yīng)用服務(wù)器的話是不能使用JTA事務(wù)的;
JTA主要用于分布式的多個數(shù)據(jù)源的兩階段提交的事務(wù),而JDBC的Connection提供的單個數(shù)據(jù)源的事務(wù); 后者因為只涉及到一個數(shù)據(jù)源,所以其事務(wù)可以由數(shù)據(jù)庫自己單獨實現(xiàn), 而JTA事務(wù)因為其分布式和多數(shù)據(jù)源的特性, 不可能由任何"一個"數(shù)據(jù)源實現(xiàn)事務(wù), 因此JTA中的事務(wù)是由"事務(wù)管理器"實現(xiàn)的,它會在多個數(shù)據(jù)源之間統(tǒng)籌事務(wù),具體使用的技術(shù)就是所謂的"兩階段提交", 一般JTA事務(wù)都是用于EJB中(因為EJB本身也是分布式的), 所以一般的應(yīng)用服務(wù)器都有自己的事務(wù)管理器用來管理JTA事務(wù),注意這并不表示EJB容器有管理事務(wù)的功能; 事實上也有單獨的事務(wù)管理器比如開源的Tyrex. 如果只用Tomcat做應(yīng)用服務(wù)器的話是不能使用JTA事務(wù)的;
使用 JDBC 事務(wù)界定時,您可以將多個 SQL 語句結(jié)合到一個事務(wù)中。JDBC 事務(wù)的一個缺點是事務(wù)的范圍局限于一個數(shù)據(jù)庫連接。一個 JDBC 事務(wù)不能跨越多個數(shù)據(jù)庫。在下面,我們將看一下如何用 JTA 進行事務(wù)界定。因為 JTA 不像 JDBC 那樣有名,所以我們首先做一個簡介。
JTA 簡介
Java 事務(wù) API(JTA) 及其同門兄弟 Java 事務(wù)服務(wù)(Java Transaction Service JTS)為 J2EE 平臺提供了分布式事務(wù)服務(wù)。一個分布式的事務(wù)涉及一個事務(wù)管理器和一個或者多個資源管理器。一個資源管理器是任何類型的持久性的數(shù)據(jù)存儲。事務(wù)管理器負(fù)責(zé)協(xié)調(diào)所有事務(wù)參與者之間的通信。
JTA 事務(wù)比 JDBC 事務(wù)功能更強。JDBC 事務(wù)局限為一個數(shù)據(jù)庫連接,而 JTA 事務(wù)可以有多個參與者。所有下列 Java 平臺組件都可以參與 JTA 事務(wù):
JDBC 連接
JDO PersistenceManager 對象
JMS 隊列
JMS 主題
企業(yè) JavaBeans
符合 J2EE 連接體系結(jié)構(gòu)(J2EE Connector Architecture)規(guī)范的資源適配器。