【JAVA事務】JAVA的事務處理總結

一:什麼是JAVA事務?

    通常的觀念認爲,事務僅與數據庫相關.

事務必須服從ISO/IEC所指定的ACID原則.ACID是原子性(Atomicity),一致性(Consistency),隔離性(Isolation)和持久性(Durabillty)的縮寫.

事物的原子性:表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效.

一致性:表示當事務執行失敗時,所有被該事務影響的數據都應該恢復到事務執行之前的狀態.

隔離性:表示在事務執行過程中對數據的修改,在事務沒有提交之前對其他事務是不可見的

持久性:表示已經提交的數據在事務執行失敗時,數據的狀態都應該正確.

通俗的理解:事務是一組原子操作單元,從數據庫角度說,就是一組SQL指令,要麼全部執行成功,若因爲某個原因其中一條指令執行錯誤,則撤銷先前執行過的所有命令.更簡單的說,就是要麼全部執行成功,要麼全部撤銷不執行.

既然事務的概念是從數據庫而來,那麼JAVA的事務是什麼?之間有什麼聯繫呢?

實際上,一個JAVA應用系統,如果要操作數據庫,則通過JDBC來實現,增加,刪除,修改都是通過相應方法間接來實現的,事務控制也相應專一到了JAVA的程序代碼上,所以說,數據庫操作的事務也習慣上就成爲JAVA事務了.

二:爲什麼需要事務?

    事務是爲解決數據安全操作提出的,事務控制實際上就是控制數據的安全訪問.舉一個簡單的例子,比如銀行轉賬業務,賬戶A要將自己賬戶上的1000元轉到B賬戶下面,A賬戶餘額首先要減去1000,然後B賬戶要增加1000,加入在中間網絡出現了問題,A賬戶減去1000元已經結束,B因爲網絡中斷而操作失敗,那麼整個業務失敗.如果沒有事務,那麼客戶將損失1000塊,所以必須做出控制,要求A賬戶轉賬業務撤銷.這才能保證業務的正確性,完成這個操作就需要事務來控制.將A賬戶資金減少和B賬戶資金增加放到一個事物裏面,要麼全部成功,要麼撤銷全部操作.這樣,就保證了數據的安全性.

三:JAVA事務的類型

    JAVA的事務類型有三種.JDBC事務.JTA(JAVA Transaction Api)事務,容器事務

1.jdbc事務:是Connection對象控制的.JDBC Connection接口提供了兩種事務模式:自動提交和手動提交,JAVA.SQL.Conection提供了以下控制事務的方法

public void setAutoConmmit(boolean)

public boolean getAutoCommit()

public void commit();

public void roolback();

使用JDBC事務界定時,你可以將多個SQL語句結合到一個事物當中.JDBC事務的一個缺點就是事務的範圍侷限於一個數據庫連接.

2.JTA事務

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

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

如果計劃用JTA界定事務,那麼就需要一個實現.JAVAX.sql.XADataSource;javax.sql.XAResource接口的JDBC驅動程序.一個實現了這些接口的驅動程序將可以參與JTA事務.一個XADataSource對象就是一個XAConnection對象的工廠.XAConnections是參與JTA事務的JDBC鏈接

將需要用應用服務器的管理工具設置 XADataSource 。從應用服務器和 JDBC 驅動程序的文檔中可以瞭解到相關的指導。

J2EE 應用程序用 JNDI 查詢數據源。一旦應用程序找到了數據源對象,它就調用 javax.sql.DataSource.getConnection() 以獲得到數據庫的連接。

XA 連接與非 XA 連接不同。一定要記住 XA 連接參與了 JTA 事務。這意味着 XA 連接不支持 JDBC 的自動提交功能。同時,應用程序一定不要對 XA 連接調用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。相反,應用程序應該使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() 。

3.容器事務

    容器事務主要是J2EE應用服務器提供的,容器事務大多是基於JTA完成,這是一個基於JNDI的,相當複雜的API實現.相對編碼實現事務管理,我們可以通過EJB容易提供的容器事務管理機制CMT完成同一個功能.這項功能由J2EE應用服務器提供.

四:三種事務差異

1.JDBC事務控制的侷限性在一個數據庫連接內,但是使用簡單.

2,JTA事務的功能強大,事務可以跨越多個數據庫或者多個DAO.使用也比較複雜.

3.容器事務,主要指的是J2EE應用服務器提供的事務管理.侷限於EJB的應用使用

五:總結

    事務控制是構建J2EE應用不可缺少的一部分.合理選擇應用何種事務對整個應用系統來說至關重要,一般來說,在單個JDBC鏈接的情況下可以選擇JDBC事務,在跨多個鏈接或者數據庫的情況下,需要選擇使用JTA事務,如果用到了EJB則可以考慮使用EJB容器的事務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章