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

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

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

    posts - 495,  comments - 11,  trackbacks - 0

    ?????? 在現(xiàn)在的B/S體系結(jié)構(gòu)的軟件開(kāi)發(fā)中,對(duì)于數(shù)據(jù)庫(kù)事務(wù)處理中最常使用的方式是每個(gè)用戶請(qǐng)求一個(gè)事務(wù)。也就是說(shuō),當(dāng)服務(wù)器端接收到一個(gè)用戶請(qǐng)求后,會(huì)開(kāi)始一個(gè)新的事務(wù),直到對(duì)用戶請(qǐng)求的所有處理都進(jìn)行完畢并且完成了響應(yīng)用戶請(qǐng)求的所有輸出之后才會(huì)關(guān)閉這個(gè)事務(wù)。

    ?????? 對(duì)于使用Hibernate實(shí)現(xiàn)持久化功能的系統(tǒng)來(lái)說(shuō),事務(wù)的處理是這樣的:服務(wù)器端在接收到用戶的請(qǐng)求后,會(huì)創(chuàng)建一個(gè)新的Hibernate Session對(duì)象,然后通過(guò)該Session對(duì)象開(kāi)始一個(gè)新的事務(wù)并且之后所有對(duì)數(shù)據(jù)庫(kù)的操作都通過(guò)該Session對(duì)象來(lái)進(jìn)行。最后,完成將響應(yīng)頁(yè)面發(fā)送到客戶端的工作后再提交事務(wù)并且關(guān)閉Session。

    ?????? Session的對(duì)象是輕型的,非線程安全的,所以在每次用戶請(qǐng)求時(shí)創(chuàng)建,請(qǐng)求處理完畢后丟棄。

    ?????? 那么,該如何實(shí)現(xiàn)這種方式的事務(wù)處理呢?處理的難點(diǎn)在于如何在業(yè)務(wù)處理之前創(chuàng)建Session并開(kāi)始事務(wù)以及在業(yè)務(wù)處理之后提交事務(wù)并關(guān)閉Session。對(duì)于現(xiàn)在的Web應(yīng)用來(lái)說(shuō),通常情況下是通過(guò)ServletFilter來(lái)完成事務(wù)處理的操作。這樣,就可以輕松地實(shí)現(xiàn)在用戶請(qǐng)求到達(dá)服務(wù)器端的時(shí)候創(chuàng)建Session并開(kāi)始事務(wù),而服務(wù)器端響應(yīng)處理結(jié)束之前提交事務(wù)并關(guān)閉Session。

    ?????? 另外一個(gè)問(wèn)題是,在ServletFilter中創(chuàng)建的Session是如何傳遞給業(yè)務(wù)處理方法中的呢?處理的方法是通過(guò)一個(gè)ThreadLocal變量來(lái)把創(chuàng)建的Session對(duì)象綁定到處理用戶請(qǐng)求的線程上去,這樣就可以使任何的業(yè)務(wù)處理方法可以輕松得到Session對(duì)象。

    ?????? Hibernate中事務(wù)處理的具體方法可以參照前面的網(wǎng)絡(luò)博客的實(shí)例。

    ?????? 但是這種事務(wù)處理的方式還是會(huì)遇到一些問(wèn)題,其中最突出的就是更新沖突的問(wèn)題。例如,某個(gè)操作人員進(jìn)入了用戶信息的修改頁(yè)面,在經(jīng)過(guò)一段時(shí)間的對(duì)用戶信息的修改后,進(jìn)行提交操作,而與此同時(shí)可能會(huì)有另外一個(gè)操作人員也進(jìn)行了相同的操作,這樣在處理提交的時(shí)候就會(huì)產(chǎn)生沖突。

    ?????? 產(chǎn)生這個(gè)沖突的原因在于在開(kāi)發(fā)中需要使用多個(gè)數(shù)據(jù)庫(kù)事務(wù)來(lái)實(shí)現(xiàn)一個(gè)應(yīng)用事務(wù)。也就是說(shuō),在應(yīng)用程序?qū)?,?yīng)該將讀取用戶信息、顯示修改頁(yè)面以及用戶提交工作來(lái)作為一個(gè)事務(wù)進(jìn)行處理,在處理的過(guò)程中應(yīng)該避免其他操作人員進(jìn)行類似的操作。

    ?????? 回想前面的介紹,我們對(duì)于數(shù)據(jù)庫(kù)事務(wù)所采取的策略是每個(gè)用戶請(qǐng)求一個(gè)事務(wù),而上面的業(yè)務(wù)處理則至少需要兩個(gè)請(qǐng)求才能完成。這樣,兩者之間就存在著一定的矛盾,這也就導(dǎo)致了不可重復(fù)讀取和兩次更新問(wèn)題的發(fā)生。

    ?????? 為了解決并發(fā)中數(shù)據(jù)訪問(wèn)的問(wèn)題,通常會(huì)采用鎖的機(jī)制來(lái)實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)的排他性,從而避免兩次更新問(wèn)題的發(fā)生。

    posted on 2009-07-19 21:07 jadmin 閱讀(73) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一级成人生活片免费看| 亚洲精品国产suv一区88| 99久久免费国产特黄| 国产成人亚洲精品91专区手机| 国产亚洲欧美在线观看| 亚洲Av无码国产情品久久| 污污污视频在线免费观看| 亚洲无人区一区二区三区| 国产一级淫片a免费播放口| 色噜噜综合亚洲av中文无码| 8x网站免费入口在线观看| 亚洲精品欧洲精品| 国产在线a免费观看| 亚洲AV永久无码精品放毛片| 成人亚洲网站www在线观看| 国产精品美女久久久免费| 亚洲AV无码久久精品色欲| 91视频免费网址| 国产亚洲sss在线播放| 日韩成人免费视频播放| 一级毛片完整版免费播放一区| 亚洲国产另类久久久精品小说| 精品无码人妻一区二区免费蜜桃| 亚洲精品视频免费看| 欧洲精品免费一区二区三区 | 日韩免费无砖专区2020狼| 日韩免费高清一级毛片| 亚洲精品无码AV人在线播放 | 中文字幕无码一区二区免费| 久久久久久亚洲Av无码精品专口| AA免费观看的1000部电影| 免费观看亚洲人成网站| 亚洲精品高清国产一线久久| 我们的2018在线观看免费高清| 国产亚洲欧美在线观看| 亚洲AV美女一区二区三区| 岛国大片免费在线观看| 青柠影视在线观看免费| 亚洲精品无码不卡在线播放| 国产亚洲av片在线观看18女人| 思思re热免费精品视频66|