事務

          一:事務的概念
              事務必須服從ISO/IEC所制定的ACID原則。ACID是原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持久性(durability)的縮寫 

              事務的原子性:表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效。
              一致性表示當事務執行失敗時,所有被該事務影響的數據都應該恢復到事務執行前的狀態。
               隔離性表示在事務執行過程中對數據的修改,在事務提交之前對其他事務不可見。
               持久性表示已提交的數據在事務執行失敗時,數據的狀態都應該正確。 
           

          二:事務的場景
              1.與銀行相關的業務,重要的數據,與錢相關的內容不能出任何錯。
              2.系統內部認為重要的數據,都需要事務的支持,防止重要數據的不一致。
              3.具體的業務場景:銀行業務,支付業務,交易業務等。

          三:事務的實現方式
              首先說一下事務的類型,主要包含一下三種:JDBC事務,JTA事務,容器事務
              1、JDBC事務 
          JDBC 事務是用 Connection 對象控制的。JDBC Connection 接口( java.sql.Connection )提供了兩種事務模式:自動提交和手工提交。 java.sql.Connection 提供了以下控制事務的方法: 

          public void setAutoCommit(boolean) 
          public boolean getAutoCommit() 
          public void commit() 
          public void rollback() 

          使用 JDBC 事務界定時,您可以將多個 SQL 語句結合到一個事務中。JDBC 事務的一個缺點是事務的范圍局限于一個數據庫連接。一個 JDBC 事務不能跨越多個數據庫。 

          2、JTA(Java Transaction API)事務 

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

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

          如果計劃用 JTA 界定事務,那么就需要有一個實現 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驅動程序。一個實現了這些接口的驅動程序將可以參與 JTA 事務。一個 XADataSource 對象就是一個 XAConnection 對象的工廠。 XAConnection s 是參與 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實現。相對編碼實現JTA事務管理,我們可以通過EJB容器提供的容器事務管理機制(CMT)完成同一個功能,這項功能由J2EE應用服務器提供。這使得我們可以簡單的指定將哪個方法加入事務,一旦指定,容器將負責事務管理任務。這是我們土建的解決方式,因為通過這種方式我們可以將事務代碼排除在邏輯編碼之外,同時將所有困難交給J2EE容器去解決。使用EJB CMT的另外一個好處就是程序員無需關心JTA API的編碼,不過,理論上我們必須使用EJB。 

          四、三種事務差異 

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

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

          3、容器事務,主要指的是J2EE應用服務器提供的事務管理,局限于EJB應用使用。 


          五:詳解事務
          1.首先看一下目前使用最多的spring事務,目前spring配置分為聲明式事務和編程式事務。
            1)編程式事務
                  主要是實現接口PlatformTransactionManager
                  
               
                  實現了事務管理的接口有非常多,這里主要講DataSourceTransactionManager和數據庫jdbc相關的事務處理方式

          posted on 2012-06-11 15:46 陳睿 閱讀(205) 評論(0)  編輯  收藏 所屬分類: 高級

          導航

          <2012年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 云阳县| 邢台县| 车致| 阿鲁科尔沁旗| 万宁市| 厦门市| 桦川县| 周口市| 车险| 卢龙县| 乌兰察布市| 奉节县| 西宁市| 泽库县| 嘉义市| 吉木乃县| 乾安县| 忻州市| 托克逊县| 和政县| 家居| 东丽区| 镇宁| 昆明市| 商水县| 清水河县| 长治县| 水城县| 靖江市| 理塘县| 喀喇沁旗| 郴州市| 民乐县| 横峰县| 天峻县| 凤台县| 德钦县| 康马县| 丹凤县| 嘉峪关市| 宽甸|