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

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

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

    靈魂-放水

    為學(xué)日益,為道日損。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      296 Posts :: 10 Stories :: 274 Comments :: 0 Trackbacks
    ?Transaction不管在J2EE還是.NET領(lǐng)域中都是相當重要的一個組成部分。盡管很多與Transaction相關(guān)的概念在兩個不同的平臺中都是相通的,但是它們在Transaction的實現(xiàn)方面卻有著很多的不同。想對.NET下的Transaction有更深入了解的朋友,可以參考 idior 兄寫Transaction in ADO.net 2.0。在以下的篇幅里面,我就J2EE中與Transaction相關(guān)的幾個概念做些講述。
    ??????? 1.什么是Transaction?所謂Transaction是指一系列不可分割的改動數(shù)據(jù)庫的操作。在這個解釋中,有三個關(guān)鍵詞:一系列不可分割以及改動。僅僅是一個改動數(shù)據(jù)庫的操作是沒有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本身去管理的事務(wù)。其最大的特點就是通過顯示調(diào)用Connection接口的commit和rollback方法來完成事務(wù)的提交和回滾。事務(wù)結(jié)束的邊界是commit或者rollback方法的調(diào)用,而開始的邊界則不是那么明顯了,它會開始于組成當前事務(wù)的所有statement中的第一個被執(zhí)行的時候。具體代碼如下:
    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去管理的事務(wù)。其最大的特點是調(diào)用UserTransaction接口的begin,commit和rollback方法來完成事務(wù)范圍的界定,事務(wù)的提交和回滾。JTA Transaction可以實現(xiàn)同一事務(wù)對應(yīng)不同的數(shù)據(jù)庫,但是它仍然無法實現(xiàn)事務(wù)的嵌套。具體的代碼如下[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負責(zé)管理的Transaction,當然這樣Transaction是出現(xiàn)在EJB的范疇中。Container-Managed Transaction最大的特點是不需要顯式界定事務(wù)的邊界,也不需要顯式的提交或者回滾事務(wù),這一切都由Container來替我們完成。我們需要做的就是設(shè)定在一個Bean中,哪些方法是跟事務(wù)相關(guān)的,同時設(shè)定它們的Transaction Attribute既可。
    ??????? Transaction的Scope是相當重要的,特別是在一個Bean的方法中調(diào)用另外一個Bean的方法。為了便于說明問題,我們把這兩個方法分別稱為methodA和methodB。當methodA調(diào)用methodB的時候,methodB在事務(wù)的層面上對調(diào)用者methodA有怎樣的限制(methodB中是否存在事務(wù))以及methodA如何在事務(wù)的層面上實現(xiàn)對methodB的調(diào)用(是否需要重新創(chuàng)建一個新的事務(wù)來處理methodB的調(diào)用)都需要通過Transaction Attribute來設(shè)定的。具體的Transaction Attribute有以下六種:Required,RequiresNew,Mandatory,NotSupported,Supports和Never。有關(guān)Transaction Attribute的介紹,可以參閱J2EE Tutorial中關(guān)于Container-Managed Transaction的介紹

    ??????? [1] 代碼來自SUN的J2EE Tutorial中關(guān)于Bean-Managed Transaction的介紹

    posted on 2006-10-30 16:23 放水老倌 閱讀(375) 評論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 无码少妇一区二区浪潮免费| 国产精品亚洲va在线观看| 久久精品国产精品亚洲艾草网| 亚洲精品456播放| 亚洲国产精品不卡毛片a在线| 亚洲国产精品成人AV无码久久综合影院| 国产免费拔擦拔擦8x| 免费人成年轻人电影| 亚洲无码日韩精品第一页| 亚洲日韩精品无码专区网站 | 182tv免费视频在线观看| 四虎影视成人永久免费观看视频| 久久久久久成人毛片免费看| 久久99热精品免费观看动漫| 57pao一国产成永久免费| 亚洲高清中文字幕免费| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 91亚洲国产在人线播放午夜| 亚洲精品国产电影午夜| 亚洲日本久久久午夜精品| 亚洲成av人片在www鸭子| 免费一级毛片在线播放视频免费观看永久 | 亚洲香蕉网久久综合影视| 亚洲va久久久噜噜噜久久男同| 亚洲日本一区二区| 亚洲va在线va天堂成人| 真人无码作爱免费视频| 精精国产www视频在线观看免费| 人妻丰满熟妇无码区免费| 成人AV免费网址在线观看| 啊灬啊灬别停啊灬用力啊免费看| 伊人亚洲综合青草青草久热| 亚洲天天做日日做天天欢毛片| 波多野结衣亚洲一级| 美女被艹免费视频| 久久精品电影免费动漫| 曰批全过程免费视频在线观看| 亚洲成av人片天堂网老年人| 亚洲人成电影亚洲人成9999网| www.亚洲成在线| 国产免费黄色无码视频|