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

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

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

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評(píng)論 :: 0 Trackbacks
    容器管理事務(wù)(Container-Managed Transaction, CMT ):容器管理事務(wù)允許組件自動(dòng)征集(enlist )到事務(wù)中,也就是說,EJB 組件從不需要顯式地給出begin 、commit 、abort 語句,EJB 容器會(huì)替開發(fā)者考慮這些內(nèi)容。EJB 容器會(huì)依據(jù)EJB 組件提供者指定的事務(wù)行為來界定相應(yīng)的事務(wù)邊界。在使用容器管理事務(wù)時(shí),EJB 容器會(huì)攔截客戶請(qǐng)求,并自動(dòng)為EJB 組建啟動(dòng)新的事務(wù),也就是說,容器會(huì)通過begin 語句調(diào)用底層事務(wù)系統(tǒng),從而啟動(dòng)事務(wù)。隨后,容器會(huì)將業(yè)務(wù)請(qǐng)求委派給EJB 組件,組件中的業(yè)務(wù)操作將運(yùn)行在這一事務(wù)中。處于事務(wù)中的EJB 組件能夠執(zhí)行任何業(yè)務(wù)邏輯,如寫入數(shù)據(jù)庫、發(fā)送異步信息、調(diào)用其他的EJB 組件等。一旦在處理業(yè)務(wù)過程中出現(xiàn)問題,則EJB 組建需要通知EJB 容器去回滾事務(wù)。當(dāng)EJB 組建完成業(yè)務(wù)處理后,會(huì)將控制權(quán)交回給EJB 容器。隨后,EJB 容器能夠通過commit 或abort 語句調(diào)用底層事務(wù)系統(tǒng)。

    通過使用@TransactionAttribute 注釋或部署描述符,開發(fā)者能夠指定事務(wù)屬性。EJB 容器通過分析事務(wù)屬性便能夠知道如何處理EJB 組件的事務(wù)需求。EJB 事務(wù)屬性的取值有:

    (1 )Required ,如果EJB 組件必須總是運(yùn)行在事務(wù)中,則應(yīng)該使用Required 模式。如果已經(jīng)有事務(wù)在運(yùn)行,則EJB 組件參與其中;如果沒有事務(wù)運(yùn)行,則EJB 容器會(huì)為EJB 組件啟動(dòng)新的事務(wù)。

    Required 是默認(rèn)和最常使用的事務(wù)屬性值。這個(gè)值指定必須在事務(wù)之內(nèi)調(diào)用EJB 方法。如果從非事務(wù)性客戶端調(diào)用方法,那么容器會(huì)在調(diào)用方法之前開始事務(wù),并且在方法返回時(shí)結(jié)束事務(wù)。另一方面,如果調(diào)用者從事務(wù)性上下文調(diào)用方法,那么 方法會(huì)聯(lián)結(jié)已有事務(wù)。在從客戶段傳播事務(wù)的情況下,如果我們的方法表示應(yīng)該回滾事務(wù),那么容器不僅回回滾整個(gè)事務(wù),而且會(huì)向客戶端拋出異常,從而讓客戶端 知道它開始的事務(wù)已經(jīng)被另一個(gè)方法回滾了。

    (2 )Requires_New ,當(dāng)客戶調(diào)用EJB 時(shí),如果總是希望啟動(dòng)新的事務(wù),則應(yīng)該使用RequiresNew 事務(wù)屬性,如果客戶在調(diào)用EJB 組件時(shí)已經(jīng)存在事務(wù),則當(dāng)前事務(wù)會(huì)被掛起,進(jìn)而容器啟動(dòng)新的事務(wù),并將調(diào)用請(qǐng)求委派給EJB 組件。也就是說,如果客戶端已經(jīng)有了事務(wù),那么它暫停該事務(wù),知道方法返回位置,新事務(wù)是成功還是失敗都不會(huì)影響客戶端已有的事務(wù)。EJB 組件執(zhí)行相應(yīng)的業(yè)務(wù)操作,容器會(huì)提交或回滾事務(wù),最終容器將恢復(fù)原有的事務(wù),當(dāng)然,如果客戶在調(diào)用EJB 組件時(shí)不存在事務(wù),則不需要執(zhí)行事務(wù)的掛起或恢復(fù)操作。

    RequiresNew 事務(wù)屬性非常有用。如果EJB 組件需要事務(wù)的ACID 屬性,并且將EJB 組件運(yùn)行在單個(gè)獨(dú)立的工作單元中,從而不會(huì)將其他外部邏輯也包括在當(dāng)前的事務(wù)中,則必須使用RequiredNew事 務(wù)屬性。如果需要事務(wù),但是不希望事務(wù)的回滾影響客戶端,就應(yīng)該使用它。另外,當(dāng)不希望客戶端的回滾影響你的時(shí)候,也應(yīng)該使用這個(gè)值。日志記錄是個(gè)很好的 例子,即使父事務(wù)回滾,你也希望把錯(cuò)誤情況記錄到日志中,另一方面,日志記錄細(xì)小調(diào)試信息的失敗不應(yīng)該導(dǎo)致回滾整個(gè)事務(wù),并且問題應(yīng)該僅限于日志記錄組件 內(nèi)。

    (3 )Supports ,如果某個(gè)EJB 組件使用了Supports 事務(wù)屬性,則只有調(diào)用它的客戶已經(jīng)啟用了事務(wù)時(shí),這一EJB 組件才會(huì)運(yùn)行在事務(wù)中。如果客戶并沒有運(yùn)行在事務(wù)中,則EJB 組建也不會(huì)運(yùn)行在事務(wù)中。Supports 同Required 事務(wù)屬性很相似,但是,Required 要求EJB 組件必須運(yùn)行在事務(wù)中。如果使用Support 事務(wù)屬性,EJB 組建很可嫩沒有運(yùn)行在事務(wù)中。

    (4 )Mandatory ,Mandatory 事務(wù)屬性要求調(diào)用EJB 組件的客戶必須已經(jīng)運(yùn)行在事務(wù)中。如果從非事務(wù)性客戶端調(diào)用使用Mandatory 屬性的EJB 方法,那么客戶將接受到系統(tǒng)拋出的javax.ejb.EJBTransactionRequiredException 異常。EJB 組件使用Mandatory 事務(wù)屬性是非常安全的,它能夠保證EJB 組建運(yùn)行在事務(wù)中。如果客戶沒有運(yùn)行在事務(wù)中,則不能夠調(diào)用到應(yīng)用了Mandatory 事務(wù)屬性的EJB 組件。但是,Mandatory 事務(wù)屬性要求第3 方(及客戶)在調(diào)用EJB 組件前必須啟動(dòng)了事務(wù)。EJB 容器并不會(huì)為Mandatory 事務(wù)屬性自動(dòng)啟動(dòng)新事務(wù),這是同Support 事務(wù)屬性的最主要區(qū)別。

    (5 )NotSupported ,如果EJB 組件使用了NotSupport 事務(wù)屬性,它根本不會(huì)參與到事務(wù)中。如果調(diào)用者使用相關(guān)聯(lián)的事務(wù)調(diào)用方法,容器就會(huì)暫停事務(wù),調(diào)用方法,然后再方法返回時(shí)恢復(fù)事務(wù)。通常,此屬性只用于非實(shí)物性的自動(dòng)確認(rèn)模式中,支持JMS 提供者的MDB 。

    (6 )Never ,如果EJB 組件使用Never 事務(wù)屬性,它就不能夠參與到事務(wù)中,而且,如果調(diào)用它的客戶已經(jīng)處于事務(wù)中,則容器會(huì)將javax.ejb.EJBException 異常拋給客戶。

    事務(wù)效果圖,其中,T1 和T2 是2 個(gè)不同的事務(wù),T1 是客戶請(qǐng)求傳遞的事務(wù),T2 是容器啟動(dòng)的事務(wù),通過下表,能夠理解各種事務(wù)屬性在影響事務(wù)長(zhǎng)度和范圍方面所起的重要作用。

    事務(wù)屬性

    客戶事務(wù)

    EJB 組件事務(wù)

    Required

    T1

    T2

    T1

    RequiresNew

    T1

    T2

    T2

    Supports

    T1

    T1

    Mandatory

    T1

    錯(cuò)誤

    T1

    NotSupported

    T1

    Never

    T1

    錯(cuò)誤

    posted on 2009-07-20 09:37 seal 閱讀(304) 評(píng)論(0)  編輯  收藏 所屬分類: EJB
    主站蜘蛛池模板: 国产男女猛烈无遮档免费视频网站 | 国产一级a毛一级a看免费人娇| 国产精品四虎在线观看免费| 97久久国产亚洲精品超碰热| 福利免费观看午夜体检区| 91亚洲精品麻豆| 成年女人毛片免费播放视频m| 在线观看亚洲AV每日更新无码| 成年美女黄网站18禁免费| 亚洲另类无码一区二区三区| 国产区卡一卡二卡三乱码免费| 美女羞羞视频免费网站| 亚洲精品成a人在线观看| 中文字幕免费观看全部电影| 亚洲AV无码一区二区二三区软件| 99re6在线精品视频免费播放 | 亚洲AV无码专区国产乱码不卡| 国产成人精品免费视频大全五级| 亚洲AV无码成人精品区狼人影院| 亚洲国产小视频精品久久久三级 | 亚洲AV无码一区二区三区电影| 亚洲国产电影av在线网址| 国产中文字幕在线免费观看| 亚洲精品无码久久久久久久 | 亚洲国产a级视频| 99免费在线视频| 亚洲不卡视频在线观看| 国产一级做a爱免费视频| 最新亚洲成av人免费看| 亚洲av午夜精品无码专区| 国产成人精品免费视频大全五级| 韩国免费A级毛片久久| 亚洲欧洲综合在线| 免费一级毛片不卡在线播放| 中文字幕无码日韩专区免费| 亚洲一区无码中文字幕乱码| 亚洲第一区精品观看| 99精品视频在线免费观看| 国产精品亚洲五月天高清| 亚洲成人午夜在线| 成人免费无码精品国产电影|