事務管理之JTA事務

什麼是JTA?

JTA全稱Java Transaction API ,即Java事務API,英文解釋:

Java Transaction API (JTA) specifies standard Java interfaces between a transaction manager and the parties involved in a distributed transaction system: the resource manager, the application server, and the transactional applications.

JTA是一種高層的,與實現無關的,與協議無關的API,應用程序和應用服務器可以使用JTA來訪問事務。

JTA允許應用程序執行分佈式事務處理--在兩個或多個網絡計算機資源上訪問並且更新數據,這些數據可以分佈在多個數據庫上。JDBC驅動程序的JTA支持極大地增強了數據訪問能力。

JTA的主要接口:

位於javax.transaction包中

a、UserTransaction接口:讓應用程序得以控制事務的開始、掛起、提交、回滾等。由Java客戶端程序或EJB調用。
b、TransactionManager 接口:用於應用服務器管理事務狀態
c、Transaction接口:用於執行相關事務操作
d、XAResource接口:用於在分佈式事務環境下,協調事務管理器和資源管理器的工作
e、Xid接口:爲事務標識符的Java映射

注:前3個接口位於Java EE版的類庫 javaee.jar 中,Java SE中沒有提供!UserTransaction是編程常用的接口。JTA只提供了接口,沒有具體的實現。

JTA需要滿足的條件:

如果使用 JTA 界定事務,那麼就需要有一個實現 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驅動程序。一個實現了這些接口的驅動程序纔可以參與 JTA 事務。

一個 XADataSource 對象就是一個 XAConnection 對象的工廠。 XAConnection 是參與 JTA 事務的 JDBC 連接。要使用JTA事務,必須使用XADataSource來產生數據庫連接,產生的連接爲一個XA連接。

XA連接(javax.sql.XAConnection)和非XA(java.sql.Connection)連接的區別在於:

XA可以參與JTA的事務,而且不支持像JDBC那樣的自動提交

同時,應用程序一定不要對 XA 連接調用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。相反,應用程序應該使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() 。

注意: Oracle, Sybase, DB2, SQL Server等大型數據庫才支持XA, 支持分佈事務。 MySQL屬於Non-XA。

JTA編程的基本步驟
a、首先配置JTA ,建立相應的數據源
b、建立事務:通過創建UserTransaction類的實例來開始一個事務。代碼如下:
  Context ctx = new InitialContext(p) ;
   UserTransaction trans = (UserTransaction) ctx.lookup("javax. Transaction.UserTransaction")
c、開始事務:代碼爲 trans.begin() ;
d、找出數據源:從Weblogic Server上找到數據源,代碼如下:
 DataSource ds = (DataSource) ctx.lookup(“mysqldb") ;
e、建立數據庫連接:Connection mycon = ds.getConnection() ;
f、執行SQL操作:stmt.executeUpdate(sqlS);
g、完成事務:trans.commit(); / trans.rollback();
h、關閉連接:mycon.close() ;

發佈了12 篇原創文章 · 獲贊 13 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章