<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大鳥的學習樂園
    路漫漫其修遠兮,吾將上下而求索
    posts - 26,comments - 27,trackbacks - 0

    Transaction不管在J2EE還是.NET領域中都是相當重要的一個組成部分。盡管很多與Transaction相關的概念在兩個不同的平臺中都是相通的,但是它們在Transaction的實現方面卻有著很多的不同。想對.NET下的Transaction有更深入了解的朋友,可以參考idior兄寫的Transaction in ADO.net 2.0。在以下的篇幅里面,我就J2EE中與Transaction相關的幾個概念做些講述。

            1.什么是Transaction?所謂Transaction是指一系列不可分割的改動數據庫的操作。在這個解釋中,有三個關鍵詞:一系列,不可分割以及改動。僅僅是一個改動數據庫的操作是沒有Transaction可言,只有“一系列”操作(一組SQL語句)才可能組成Transaction;“不可分割”就意味著一致性和完整性,要么這一系列操作全部commit,要么就全部rollback;如果一系列的操作只包含enquiry操作,那么這些操作也不是Transaction。 

            2.在J2EE中,Transaction主要有幾大類,具體有幾種?在J2EE中,Transaction主要有Bean-Managed Transaction和Container-Managed Transaction兩大類。其中在Bean-Managed Transaction中還會分為JDBC Transaction和JTA Transaction兩種。

            3.什么是JDBC Transaction?它有怎樣的特點?JDBC Transaction是指由Database本身去管理的事務。其最大的特點就是通過顯示調用Connection接口的commit和rollback方法來完成事務的提交和回滾。事務結束的邊界是commit或者rollback方法的調用,而開始的邊界則不是那么明顯了,它會開始于組成當前事務的所有statement中的第一個被執行的時候。具體代碼如下:

    class CreditDAoImpl implements CreditDAO {

        Connection conn = getConnection();

        public void transfer(Currency amount, Account fromAccount, Account toAccount) throws CreditException {

            try {

                 conn.setAutoCommit(false);

                 depositToAccount(conn, toAccount, amount);

                 withdrawFromAccount(conn, fromAccount, amount);     

                 conn.commit();

            } catch (Exception e) {

                try {

                     conn.rollback();

                     throw new CreditException(e.getMessage());

                } catch (SQLException e1) {

                     throw new CreditException(e.getMessage());

                }                       

            } 

        }

    }

            4.什么是JTA Transaction?它有怎樣的特點呢?JTA Transaction是指由J2EE Transaction manager去管理的事務。其最大的特點是調用UserTransaction接口的begin,commit和rollback方法來完成事務范圍的界定,事務的提交和回滾。JTA Transaction可以實現同一事務對應不同的數據庫,但是它仍然無法實現事務的嵌套。具體的代碼如下[1]:

    public void withdrawCash(double amount) {

       UserTransaction ut = context.getUserTransaction();

       try {

          ut.begin();

          updateChecking(amount);

          machineBalance -= amount;

          insertMachine(machineBalance);

          ut.commit();

       } catch (Exception ex) {

           try {

              ut.rollback();

           } catch (SystemException syex) {

               throw new EJBException

                  ("Rollback failed: " + syex.getMessage());

           }

           throw new EJBException 

              ("Transaction failed: " + ex.getMessage());

        }

    }

            5.什么是Container-Managed Transaction?它又有怎樣的特點呢?Container-Managed Transaction,顧名思義,就是由Container負責管理的Transaction,當然這樣Transaction是出現在EJB的范疇中。Container-Managed Transaction最大的特點是不需要顯式界定事務的邊界,也不需要顯式的提交或者回滾事務,這一切都由Container來替我們完成。我們需要做的就是設定在一個Bean中,哪些方法是跟事務相關的,同時設定它們的Transaction Attribute既可。

            Transaction的Scope是相當重要的,特別是在一個Bean的方法中調用另外一個Bean的方法。為了便于說明問題,我們把這兩個方法分別稱為methodA和methodB。當methodA調用methodB的時候,methodB在事務的層面上對調用者methodA有怎樣的限制(methodB中是否存在事務)以及methodA如何在事務的層面上實現對methodB的調用(是否需要重新創建一個新的事務來處理methodB的調用)都需要通過Transaction Attribute來設定的。具體的Transaction Attribute有以下六種:Required,RequiresNew,Mandatory,NotSupported,Supports和Never。有關Transaction Attribute的介紹,可以參閱J2EE Tutorial中關于Container-Managed Transaction的介紹

            [1] 代碼來自SUN的J2EE Tutorial中關于Bean-Managed Transaction的介紹

    posted on 2008-11-26 19:09 大鳥 閱讀(160) 評論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 久久亚洲免费视频| 岛国大片免费在线观看| 亚洲一级特黄大片在线观看| 亚洲GV天堂GV无码男同| 最近免费中文字幕4| 亚洲乱码在线观看| 午夜时刻免费入口| 亚洲aⅴ无码专区在线观看| 日本免费无遮挡吸乳视频电影| 涩涩色中文综合亚洲| 成人免费视频软件网站| 日韩欧美亚洲中文乱码| 亚洲第一页日韩专区| 国产精品免费视频观看拍拍| 亚洲午夜久久久影院| 全免费a级毛片免费看| 亚洲成a人片在线网站| 成人毛片18女人毛片免费96 | 国产精品美女午夜爽爽爽免费| 亚洲人成日本在线观看| 永久黄网站色视频免费观看| 美女黄色毛片免费看| 伊人久久大香线蕉亚洲 | 亚洲美女免费视频| 在线观看日本亚洲一区| 国产做床爱无遮挡免费视频| 国产V片在线播放免费无码| 久久香蕉国产线看观看亚洲片| 国产精品免费观看| 美女一级毛片免费观看| 国产AV无码专区亚洲AV男同| 亚洲bt加勒比一区二区| 麻豆视频免费播放| 色妞www精品视频免费看| 亚洲AV中文无码字幕色三| 男女做羞羞的事视频免费观看无遮挡| 99亚洲精品卡2卡三卡4卡2卡| 国产亚洲一区二区三区在线观看| 1000部无遮挡拍拍拍免费视频观看 | 亚洲一区二区三区无码影院| 日韩插啊免费视频在线观看 |