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

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

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

    隨筆-109  評(píng)論-187  文章-25  trackbacks-0
    ?

    JTA(Java Transaction API)是一種高層的,與實(shí)現(xiàn)無(wú)關(guān)的,與協(xié)議無(wú)關(guān)的API,應(yīng)用程序和應(yīng)用服務(wù)器可以使用JTA來(lái)訪問(wèn)事務(wù)。


    JTA是Java Transaction API,是java為處理事務(wù)而引入的API,這個(gè)事務(wù),包括分布式事務(wù)。Java內(nèi)部的JDBC也提供了事務(wù)支持,但那只面向單數(shù)據(jù)源的本地事務(wù)管理。若想做分布式事務(wù)管理,必須求助于JTA。



    ???? ?? Transaction不管在J2EE還是.NET領(lǐng)域中都是相當(dāng)重要的一個(gè)組成部分。盡管很多與Transaction相關(guān)的概念在兩個(gè)不同的平臺(tái)中都是相通的,但是它們?cè)赥ransaction的實(shí)現(xiàn)方面卻有著很多的不同。想對(duì).NET下的Transaction有更深入了解的朋友,可以參考 idior 兄寫 Transaction in ADO.net 2.0 。在以下的篇幅里面,我就J2EE中與Transaction相關(guān)的幾個(gè)概念做些講述。
    ??????? 1.什么是Transaction?所謂Transaction是指一系列不可分割的改動(dòng)數(shù)據(jù)庫(kù)的操作。在這個(gè)解釋中,有三個(gè)關(guān)鍵詞:一系列,不可分割以及改動(dòng)。僅僅是一個(gè)改動(dòng)數(shù)據(jù)庫(kù)的操作是沒(méi)有Transaction可言,只有“一系列”操作(一組SQL語(yǔ)句)才可能組成Transaction;“不可分割”就意味著一致性和完整性,要么這一系列操作全部commit,要么就全部rollback;如果一系列的操作只包含enquiry操作,那么這些操作也不是Transaction。?
    ????????2.在J2EE中,Transaction主要有幾大類,具體有幾種?在J2EE中,Transaction主要有Bean-Managed Transaction和Container-Managed Transaction兩大類。其中在Bean-Managed Transaction中還會(huì)分為JDBC Transaction和JTA Transaction兩種。
    ????????3.什么是JDBC Transaction?它有怎樣的特點(diǎn)?JDBC Transaction是指由Database本身去管理的事務(wù)。其最大的特點(diǎn)就是通過(guò)顯示調(diào)用Connection接口的commit和rollback方法來(lái)完成事務(wù)的提交和回滾。事務(wù)結(jié)束的邊界是commit或者rollback方法的調(diào)用,而開(kāi)始的邊界則不是那么明顯了,它會(huì)開(kāi)始于組成當(dāng)前事務(wù)的所有statement中的第一個(gè)被執(zhí)行的時(shí)候。具體代碼如下:

    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?它有怎樣的特點(diǎn)呢?JTA Transaction是指由J2EE Transaction manager去管理的事務(wù)。其最大的特點(diǎn)是調(diào)用UserTransaction接口的begin,commit和rollback方法來(lái)完成事務(wù)范圍的界定,事務(wù)的提交和回滾。JTA Transaction可以實(shí)現(xiàn)同一事務(wù)對(duì)應(yīng)不同的數(shù)據(jù)庫(kù),但是它仍然無(wú)法實(shí)現(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?它又有怎樣的特點(diǎn)呢?Container-Managed Transaction,顧名思義,就是由Container負(fù)責(zé)管理的Transaction,當(dāng)然這樣Transaction是出現(xiàn)在EJB的范疇中。Container-Managed Transaction最大的特點(diǎn)是不需要顯式界定事務(wù)的邊界,也不需要顯式的提交或者回滾事務(wù),這一切都由Container來(lái)替我們完成。我們需要做的就是設(shè)定在一個(gè)Bean中,哪些方法是跟事務(wù)相關(guān)的,同時(shí)設(shè)定它們的Transaction Attribute既可。
    ??????? Transaction的Scope是相當(dāng)重要的,特別是在一個(gè)Bean的方法中調(diào)用另外一個(gè)Bean的方法。為了便于說(shuō)明問(wèn)題,我們把這兩個(gè)方法分別稱為methodA和methodB。當(dāng)methodA調(diào)用methodB的時(shí)候,methodB在事務(wù)的層面上對(duì)調(diào)用者methodA有怎樣的限制(methodB中是否存在事務(wù))以及methodA如何在事務(wù)的層面上實(shí)現(xiàn)對(duì)methodB的調(diào)用(是否需要重新創(chuàng)建一個(gè)新的事務(wù)來(lái)處理methodB的調(diào)用)都需要通過(guò)Transaction Attribute來(lái)設(shè)定的。具體的Transaction Attribute有以下六種:Required,RequiresNew,Mandatory,NotSupported,Supports和Never。有關(guān)Transaction Attribute的介紹,可以參閱J2EE Tutorial中關(guān)于Container-Managed Transaction的介紹。

    posted on 2006-04-13 09:02 小小程序程序員混口飯吃 閱讀(508) 評(píng)論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 好吊妞视频免费视频| 国产激情久久久久影院老熟女免费| 色播亚洲视频在线观看| 久久夜色精品国产亚洲AV动态图| 国产亚洲精品国看不卡| 亚洲人成无码久久电影网站| 亚洲人成电影网站国产精品| 国产亚洲精aa成人网站| 亚洲情XO亚洲色XO无码| 国产成人亚洲精品青草天美| 亚洲国产一区二区a毛片| 亚洲最新永久在线观看| 亚洲欧洲视频在线观看| 亚洲影视自拍揄拍愉拍| 亚洲精品无码你懂的| 久久亚洲精品11p| 鲁啊鲁在线视频免费播放| yellow免费网站| 99re热免费精品视频观看| 成在人线av无码免费高潮水 | 亚洲小说区图片区| 久久精品国产亚洲AV麻豆不卡| 亚洲AV永久无码区成人网站| 亚洲欧洲在线观看| 亚洲精品人成网在线播放影院| 亚洲日韩国产二区无码| 麻豆安全免费网址入口| 国产猛男猛女超爽免费视频| 最近免费中文字幕大全高清大全1| 国产高清免费视频| 日本无吗免费一二区| 中文字幕日韩亚洲| 亚洲成AV人片一区二区密柚| 亚洲第一页中文字幕| 亚洲国产精品无码观看久久| 国产精品永久免费| jjizz全部免费看片| 国产免费爽爽视频免费可以看| 中文字幕不卡亚洲 | 亚洲成a人片在线观看中文动漫| 亚洲无砖砖区免费|