<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)航:
     
    主站蜘蛛池模板: 在线播放免费播放av片| 18以下岁毛片在免费播放| 永久久久免费浮力影院| 亚洲欧美日韩综合俺去了| 青娱乐免费在线视频| 亚洲一卡2卡3卡4卡国产网站 | 亚洲性色精品一区二区在线| 18以下岁毛片在免费播放| 亚洲国产精品久久人人爱| 丁香花免费高清视频完整版| 亚洲乱码在线卡一卡二卡新区| 毛片a级毛片免费观看免下载| 亚洲熟妇自偷自拍另欧美| 国产成人免费A在线视频| 日日摸夜夜添夜夜免费视频| 亚洲国产成人久久一区WWW| ssswww日本免费网站片| 亚洲AV无码不卡在线播放| 18pao国产成视频永久免费| 亚洲videosbestsex日本| 国产精品免费看久久久久| 污视频网站在线观看免费| 亚洲精品字幕在线观看| 亚洲网站免费观看| 亚洲精品欧美综合四区| 亚洲精品无码av天堂| 最新国产乱人伦偷精品免费网站 | 成年大片免费视频| 美女免费精品高清毛片在线视| 国产成人综合亚洲AV第一页 | 亚洲国产日韩在线人成下载| 国产福利免费观看| a级毛片100部免费观看| 亚洲午夜成激人情在线影院| 又爽又高潮的BB视频免费看| 两个人看的www高清免费观看| 亚洲国产中文在线视频| 亚洲高清成人一区二区三区| 日本一卡精品视频免费| 亚洲av日韩综合一区久热| 亚洲第一AAAAA片|