精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Web應用中并發控制的實現

開發 前端
Web應用已由原來的網站、電子商務發展成商業應用系統的一種架構-B/S架構,它已成為一個世界性的研究熱點。但由于Internet網絡協議固有的局限性以及Web應用中頻繁的用戶交互增加了在Internet上實現長事務的困難,從而,Web應用中的并發控制始終沒能得到很好的解決。本文從Hibernate的樂觀鎖和悲觀鎖的實現原理出發,給出了實現悲觀鎖的基本思路和實現時的注意事項,在其它架構中得以推廣和應用。

引言

B/S構架的應用越來越普及,但由于它有別于C/S構架的特殊性,并發控制始終沒能得到很好的解決,如售票系統經常會出現同一張火車票出售多次的現象。典型的案例如下:

例如若有兩個客戶端,A客戶先讀取了賬戶余額2000元,之后B客戶也讀取了賬戶余額2000元的數據,A客戶提取了500元,對數據庫作了變更,此時數據庫中的余額為1500元,B客戶也要提取1300元,根據其所取得的資料,2000-1300將為700余額,若此時再對數據庫進行變更,最后的余額700元就會不正確,應當是200元,問題的出現是由于兩個客戶對同一條數據進行并發訪問造成的。

Web應用中并發控制的特殊性

上述問題在C/S構架中可以通過長事務來實現,但Web應用是基于Internet網絡環境的,其中的并發控制有其內在的特殊性:

1. Web所基于的網絡協議HTTP(Hyper Text Transfer Protocol)是一種無連接的協議,數據庫服務器無法保存事務的狀態信息;

2. 用戶可以隨時中止或啟動瀏覽器中當前主頁上的事務。

由于上述特殊性,Web應用中并發控制不能采用嚴格的長事務來實現,但可以長事務的思路來實現,在數據讀取的時候把相應的數據鎖定,在更新階段把鎖放開,然后更新數據。

Web應用中并發控制的實現

業務邏輯的實現過程中,往往需要保證數據訪問的排他性。如在 金融 系統的日終結算處理中,我們希望針對某個cut-off時間點的數據進行處理,而不希望在結算進行過程中(可能是幾秒種,也可能是幾個小時),數據再發生變化。此時,我們就需要通過一些機制來保證這些數據在某個操作過程中不會被外界修改,這樣的機制,就是所謂的“鎖”,即給選定的目標數據上鎖,使其無法被其他程序修改。有兩種鎖機制:即通常所說的“樂觀鎖(Optimistic Locking)” 和“悲觀鎖(Pessimistic Locking)”。

1.樂觀鎖(Optimistic Locking)

樂觀鎖(optimistic locking)則樂觀的認為資料的存取很少發生同時存取的問題,因而不作數據庫層次上的鎖定,為了維護正確的數據,樂觀鎖定使用應用程序上的邏輯實現版本控制來解決。

并發控制時,數據不一致的情況一旦發生,有幾個解決的 方法 ,一種是先更新為主,一種是后更新的為主,比較復雜的就是檢查發生變動的數據來實現,或是檢查所有屬性來實現樂觀鎖定。

Hibernate通過版本號檢查來實現后更新為主,這也是Hibernate所推薦的方式,在數據庫中加入一個VERSON欄記錄,在讀取數據時連同版本號一同讀取,并在更新數據時遞增版本號,然后比對版本號與數據庫中的版本號,如果大于數據庫中的版本號則予以更新,否則就回報錯誤。

以Hibernate實現版本號控制鎖定的話,我們的對象中增加一個version屬性,例如:

public class MyAccount {
  private int version;
  ....
  public void setVersion(int version) {
    this.version = version;
  }
  public int getVersion() {
    return version;
  }
  ....
}

而在映像文件中,我們使用optimistic-lock屬性設定version控制,屬性欄之后增加一個標簽,例如:

optimistic-lock="version"

設定好版本控制之后,在上例中如果B客戶試圖更新數據,將會引發StableObjectStateException例外,我們可以捕捉這個例外,在處理中重新讀取數據庫中的數據,同時將B客戶目前的數據與數據庫中的數據讀出來,讓B客戶有機會比對不一致的數據,以決定要變更的部份,或者您可以設計程式自動讀取新的資料,并重復扣款業務流程,直到數據可以更新為止,這一切可以在后臺執行,而不用讓您的客戶知道。在其它架構中也可通過這種思路來實現樂觀鎖,但版本控制和沖突的檢測要在自己程序的程序中實現和維護。

#p#

2.悲觀鎖(Pessimistic Locking)

雖然樂觀鎖能夠提高系統的性能,但它是對發生沖突的訪問進行事后的補救,應用在用戶輸入數據量很少的場合比較適合,但如果在 企業 ERP,用戶與系統交互涉及大量數據在頁面表單上錄入,如果事后提交失敗后才提示用戶要重新錄入是很不現實的,所以有必要進行事前控制,這就要采用悲觀鎖。

在多個客戶端可能讀取同一筆數據或同時更新一筆數據的情況下,防止同一個數據被修改而造成混亂,最簡單的手段就是在讀取時對數據進行鎖定,其它客戶端不能對同一筆數據進行更新的讀取動作。

悲觀鎖定(Pessimistic Locking)一如其名稱所示,悲觀的認定每次資料存取時,其它的客戶端也會存取同一筆數據,因此對該筆數據進行事先鎖定,直到自己操作完成后解除鎖定。

悲觀鎖定通常透過系統或數據庫本身的功能來實現,依賴系統或數據庫本身提供的鎖定機制,Hibernate即是如此,我們可以利用Query或Criteria的setLockMode()方法來設定要鎖定的表或列(row)及其鎖定模式,鎖定模式有以下的幾個:

LockMode.WRITE:在insert或update時進行鎖定,Hibernate會在save()方法時自動獲得鎖定。

LockMode.UPGRADE:利用SELECT … FOR UPDATE進行鎖定。

LockMode.UPGRADE_NOWAIT:利用SELECT … FOR UPDATE NOWAIT進行鎖定,在Oracle環境下使用。

LockMode.READ:在讀取記錄時Hibernate會自動獲得鎖定。

LockMode.NONE:沒有鎖定。

也可以在使用Session的load()或是lock()時指定鎖定模式以進行鎖定。

如果數據庫不支持所指定的鎖定模式,Hibernate會選擇一個合適的鎖定替換,而不是丟出一個例外。

3.其它構架中悲觀鎖的實現

Hibernate的悲觀鎖,也是基于數據庫的鎖機制實現。下面的代碼實現了對“用戶”查詢記錄的加鎖:

String sqlStr = "from userInfo as user where user.userId=’admin’";
Query query = session.createQuery(sqlStr);
query.setLockMode("user",LockMode.UPGRADE); //加鎖
List userList = query.list();//執行查詢,獲取數據

query.setLockMode對查詢語句中,特定別名所對應的記錄進行加鎖(我們為userInfo類指定了一個別名“user”),這里也就是對返回的所有user記錄進行加鎖:

select tuser0_.id as id, tuser0_.userId as userId, tuser0_.group_id as group_id, 
tuser0_.user_type as user_type, tuser0_.sex as sex from t_user tuser0_ where
(tuser0_.userId =’admin’ ) for update

通過上述轉換后的sql語句可知,Hibernate的加鎖其實是利用了數據庫的for update語句,在讀取階段對某條記錄的鎖定,而在更新階段提交,釋放鎖。

其實其它架構也可以采取該思路,不過,數據庫的for update語句的鎖定和釋放一定要在數據的同一個連接中,如果讀取階段和更新階段不是統一連接,即讀取之后斷開了與數據庫的連接,則for update語句的鎖定立即失效,為此,如果其它架構中要采取這種方式則要做相應的調整。

首先,由于Web應用是無狀態的,也就是說數據庫的for update語句的鎖定和釋放不一定是數據的同一個連接,為此,采用痕跡跟蹤法,在讀取數據時生成唯一的序列號(serialId),建立與數據連接的映射,并放置一個map數據結構中;在更新時,通過該serialId在連接池中重新獲取該連接,用該連接去更新數據。

如果系統是采用dao讀取數據,實體bean去更新數據,則只要在更新數據之前斷開讀取數據時的連接,則可以通過其它途徑更新數據,如下代碼所示:

public void update (AbstractEntityData data, String[] selTeamName ,String serialId) 
throws Exception {
   dao.closeConnect(serialId);
bo.update(data);
}

其中,dao.closeConnect(serialId)是斷開數據連接,bo.update(data)是通過EJB更新數據庫

4.序列號(serialId)的創建和維護

由于不同用戶可能同時建立連接或同一用戶先后建立連接,故創建序列號可以在讀取數據時通過sessionId和時間戳組合而成。而在操作的過程中,為了保持序列號不會丟失和唯一性,它不能放在session或application中,而是放在頁面的request對象里,通過它向其它頁面傳遞。

5.關聯表的鎖定

其實,Hibernate的悲觀鎖方式只能對單個表的記錄進行鎖定,但現實中,存在關聯更新的情況,即在更新主表的時候有可能會更新到與之相關的子表,與此同時,其它用戶也可能通過其它主表更新相應的子表同一條記錄。

有兩種方式處理,一是在讀取數據通過sql語句關聯子表相應記錄,因為for update對所有關聯表中符合條件的記錄都會加鎖;二是為子表找一個入口表,在更新子表的同時,必須更新子表的入口表。

6.例外操作的處理

采用這種方式,有一些例外情況必須小心處理,一是頁面的關閉,如果調用相應的方法,如onbeforeunload()等,釋放對應的數據庫連接;二是用戶非正常關機退出系統,必須有數據庫周期清除無用的連接,如間隔二十分鐘等,來釋放讀取時對數據的鎖定,否則,該數據會長時間被鎖定,直至應用服務器重啟。

結論

軟件系統的并發控制一般是通過加鎖來實現,同樣,Web應用也是采用樂觀鎖和悲觀鎖來實現,樂觀鎖是一種事后補救措施,是通過程序的邏輯控制版本來實現的,而悲觀鎖是事前的一種預防措施,它利用數據庫的鎖機制來實現,Hibernate對它做了一層封裝,使應用更加方便,為了讓其它架構都能適用,本文還原了Hibernate的實現原理,提出一般的實現思路和注意實現。

【編輯推薦】

  1. AJAX和XmlHttpRequest下的Web開發
  2. Java和PHP在Web開發方面的比較
  3. JSF進行Web開發的三大優勢
責任編輯:楊鵬飛 來源: 中國論文聯盟
相關推薦

2021-04-07 06:00:18

JavaScript 前端并發控制

2010-11-17 19:40:32

PacketShapeBlue Coat

2017-11-06 17:16:55

Linux設備驅動并發控制

2021-01-12 10:22:45

JavaScript并發控制前端

2010-06-08 12:54:16

UML技術

2011-12-30 16:30:39

Java

2011-05-18 16:02:08

XML

2009-02-03 10:19:45

2009-04-01 14:33:33

2010-06-13 13:13:12

UML建模

2009-07-29 17:44:02

ibmdwJava

2021-07-19 09:25:19

數據庫MySQL技術

2017-08-21 10:56:55

MySQL并發控制

2021-07-28 08:32:58

Go并發Select

2011-12-29 15:35:39

Web

2009-06-30 15:32:00

入侵檢測Java Web

2011-11-21 18:19:20

Web iMC

2021-08-28 10:06:29

VueJavascript應用

2010-11-08 10:57:05

SQL Server的

2022-11-29 19:44:47

WebOpenResty防火墻
點贊
收藏

51CTO技術棧公眾號

欧美大片在线影院| 91久久精品日日躁夜夜躁欧美| 91在线精品视频| 精品处破女学生| 国产乱码精品一区二区亚洲| 6080日韩午夜伦伦午夜伦| 欧美午夜性视频| avtt在线播放| 成人手机电影网| 国产999视频| 九九热精品在线观看| 国产精品一区二区av交换| 欧美男生操女生| 成人av一级片| 性xxxfreexxxx性欧美| 久久先锋资源网| 亚洲综合大片69999| 日本成年人网址| 精品国产乱码一区二区三| 亚洲一区二区动漫| 色青青草原桃花久久综合 | aaaaa级少妇高潮大片免费看| 国产精品亚洲成在人线| 亚洲va韩国va欧美va精品| 性高潮久久久久久久久| 天堂中文在线视频| 欧美日本一区| 亚洲性av在线| 91视频啊啊啊| 日韩在线观看一区二区三区| 亚洲欧美另类图片小说| 欧美日韩另类丝袜其他| 亚洲va天堂va欧美ⅴa在线| 日本视频一区二区三区| 国内伊人久久久久久网站视频| 蜜桃av.com| 欧美亚洲高清| 亚洲欧洲在线观看| 国产又黄又粗又猛又爽的视频 | 日韩伦理av| 国产精品美女一区二区在线观看| 欧美日本韩国一区二区三区| 四虎永久在线观看| 丁香亚洲综合激情啪啪综合| 亚洲xxx自由成熟| 国产精品久久久久久久成人午夜| 日本伊人精品一区二区三区观看方式 | 欧美图区在线视频| 妓院一钑片免看黄大片| 悠悠资源网亚洲青| 91免费观看视频| 国产欧美日韩在线播放| 免费观看黄色一级视频| 国产黄色成人av| 午夜免费久久久久| 久久香蕉精品视频| 欧美午夜a级限制福利片| 久久亚洲欧美日韩精品专区| 永久免费看片视频教学| 亚洲情侣在线| 欧美日韩国产999| 免看一级a毛片一片成人不卡| 综合视频在线| 欧美激情精品久久久久久免费印度| 91嫩草丨国产丨精品| 韩国精品福利一区二区三区| 欧美成人三级在线| 视频免费在线观看| 久久精品色综合| 亚洲久久久久久久久久| 中文字幕 欧美日韩| 日本午夜免费一区二区| 91精品国产欧美一区二区| 男人天堂1024| 日本欧美日韩| 欧美日韩国产综合视频在线观看| 人人爽人人爽av| 欧美成人精品一级| 亚洲精品国产精品久久清纯直播 | 狠狠热免费视频| 成人影院在线免费观看| 亚洲在线视频网站| 国产主播自拍av| 成人一区福利| 欧美日韩国产欧美日美国产精品| 中文字幕55页| 网曝91综合精品门事件在线| 在线播放国产一区二区三区| 国产精品嫩草69影院| 极品国产人妖chinesets亚洲人妖 激情亚洲另类图片区小说区 | 国产精品久久久久久久久免费桃花 | 婷婷综合伊人| 久久久久久久久国产精品| 久久久久无码精品国产sm果冻| aa亚洲一区一区三区| 欧美v日韩v国产v| 91精品人妻一区二区三区蜜桃欧美| 日韩精品1区| 久久久久久久久久久久久久久久久久av| 五月婷婷中文字幕| 老司机免费视频一区二区| a级国产乱理论片在线观看99| 日韩av免费观影| 亚洲品质自拍视频| 国产福利视频在线播放| 青草伊人久久| 伊人久久男人天堂| 日本少妇xxxx动漫| 看片网站欧美日韩| 久久99精品久久久久久久久久| 欧洲日本在线| 色香色香欲天天天影视综合网| 亚洲在线观看网站| 日本精品久久| 精品无人区乱码1区2区3区在线| www.com.av| 久久亚洲色图| 国产精品igao视频| 亚洲精品成人电影| 国产精品久久久久aaaa樱花| 草草久久久无码国产专区| 国产精品久一| 日韩美女视频在线| 精品人伦一区二区| 亚洲视频播放| 岛国视频一区| 特级毛片在线| 91麻豆精品国产91久久久| 女尊高h男高潮呻吟| 欧美粗暴jizz性欧美20| 成人黄色av网| 18免费在线视频| 日本久久一区二区三区| 亚洲av无码一区二区三区观看| 亚洲手机视频| 国产精品v欧美精品∨日韩| 欧美激情免费| 欧美乱妇15p| 国产成人在线网址| 蜜桃视频在线观看一区| 视频一区视频二区视频| 欧美国产大片| 亚洲人成啪啪网站| 亚洲国产精品无码久久久| 2022国产精品视频| 日韩在线综合网| 日本一道高清一区二区三区| 午夜免费日韩视频| 天天干,夜夜爽| 午夜欧美一区二区三区在线播放| 涩视频在线观看| 一区二区视频欧美| 国产日韩在线一区二区三区| 波多野结依一区| 日本韩国欧美在线| 91中文字幕永久在线| 性色一区二区三区| 欧美一区视久久| 日韩免费小视频| 色偷偷av亚洲男人的天堂| 国产一区二区波多野结衣| 成人午夜免费电影| 激情五月六月婷婷| 国产成人福利av| 8050国产精品久久久久久| 青青免费在线视频| 欧美视频在线一区| 亚洲精品卡一卡二| 国产成人精品免费在线| 日韩中字在线观看| 色综合综合网| 国产伦精品免费视频| www红色一片_亚洲成a人片在线观看_| 欧美视频在线观看 亚洲欧| 亚洲狠狠婷婷综合久久久久图片| 蜜桃伊人久久| 国产伦精品一区二区三区照片| 丰满诱人av在线播放| 亚洲免费电影一区| 五月天中文字幕| 91在线观看高清| 日本激情视频在线| 欧美一区91| 久久精品99| 欧美亚洲人成在线| 国内免费精品永久在线视频| 黄色软件在线| 日韩欧美一二三| 69国产精品视频免费观看| 日韩一区在线看| 菠萝菠萝蜜网站| 久久99蜜桃精品| 久久国产亚洲精品无码| 日韩啪啪电影网| 久久精品国产第一区二区三区最新章节 | 97中文在线观看| 欧美最新精品| 欧美黑人巨大xxx极品| 邻居大乳一区二区三区| 欧美一级高清片| 日韩国产成人在线| 亚洲综合av网| 久久久久人妻一区精品色| kk眼镜猥琐国模调教系列一区二区 | 51视频国产精品一区二区| av网页在线| 亚洲精品久久7777777| 国产精品一区二区av白丝下载| 欧美日韩国产专区| 五月天丁香激情| 久久99精品久久久久| 日韩五码在线观看| 欧美va天堂| 性刺激综合网| 国产亚洲欧美日韩在线观看一区二区| 成人免费看片网址| 欧美啪啪网站| 国产不卡av在线免费观看| 福利网站在线观看| 精品综合久久久久久97| 日本电影全部在线观看网站视频| 亚洲女人天堂成人av在线| 蜜桃91麻豆精品一二三区| 欧美美女视频在线观看| 久久久久久久久久一级| 欧美性xxxx在线播放| 国语对白一区二区| 亚洲乱码国产乱码精品精的特点 | 一区二区三区少妇| 国产福利一区二区三区在线视频| 三级a三级三级三级a十八发禁止| 欧美亚洲三级| 国产免费毛卡片| 日韩亚洲精品在线| 91精品国产91久久久久麻豆 主演| **女人18毛片一区二区| 亚洲一区二区精品在线| 凹凸成人精品亚洲精品密奴| 欧美在线3区| 国产日韩欧美一区二区三区| 欧美一区二区福利| 免费成人av| 欧美日韩在线观看一区二区三区| 亚洲裸色大胆大尺寸艺术写真| 国产精品夜夜夜一区二区三区尤| 动漫3d精品一区二区三区乱码| 99re视频在线| 成人偷拍自拍| 好吊妞www.84com只有这里才有精品 | 91精品欧美一区二区三区综合在| 亚洲一级在线播放| 欧美精品自拍偷拍| 国产免费一区二区三区最新不卡| 7777精品伊人久久久大香线蕉超级流畅 | 日韩欧美国产麻豆| 成人精品在线播放| 亚洲精品国产精品国自产在线 | 国产亚洲精品aa午夜观看| 亚洲av无码一区二区二三区| 久久久久国产精品麻豆ai换脸| 美女被到爽高潮视频| 欧美韩国日本不卡| 日韩av毛片在线观看| 亚洲视频在线一区观看| 久久亚洲av午夜福利精品一区| 偷偷要91色婷婷| 天天爽夜夜爽人人爽| 欧美日韩亚洲综合在线| 国产99对白在线播放| 精品成人免费观看| 国产中文在线| 久久中文字幕在线| 激情国产在线| 国产精品女人久久久久久| 久久久精品一区二区毛片免费看| 99re国产视频| 伊人久久大香线蕉| 亚洲人成人77777线观看| 欧美在线网址| 国产又黄又大又粗视频| 久久精品国产999大香线蕉| 国产又黄又嫩又滑又白| 久久这里只有精品6| 永久免费未视频| 亚洲国产精品久久艾草纯爱| 亚洲成人av网址| 日韩欧美精品在线视频| 你懂的视频在线| 久久综合电影一区| 二区三区不卡| av资源站久久亚洲| 欧美日一区二区| 国产无限制自拍| 麻豆精品一区二区综合av| 亚洲一级Av无码毛片久久精品| 国产日韩欧美综合在线| 久久久国产精品人人片| 在线观看亚洲a| 欧美一级视频免费| 日韩在线国产精品| 毛片在线网站| 亚洲综合在线做性| 精品毛片免费观看| 国产不卡一区二区视频| 国产一区二区三区在线观看免费视频 | 久久一本综合| 欧美性久久久久| 国产传媒欧美日韩成人| 蜜桃av免费观看| 欧美日韩一二三四五区| 午夜精品久久久久久久99热黄桃| 永久免费毛片在线播放不卡| 国产乱码精品一区二三赶尸艳谈| 91精品视频大全| 成人午夜av| 日韩有码免费视频| 99久久免费国产| 久久精品www| 91精品国产欧美日韩| 日韩专区在线| 国产成人短视频| 天海翼亚洲一区二区三区| 轻点好疼好大好爽视频| 欧美a级片网站| 午夜免费看视频| 国产麻豆欧美日韩一区| 先锋影音av在线| 日韩欧美亚洲成人| 日本免费一区视频| 欧美日韩xxx| 国产中文欧美日韩在线| 亚洲一区二区高清视频| 美女脱光内衣内裤视频久久影院| 亚洲第一成人网站| 欧美视频在线视频| 污视频软件在线观看| 久久久久久久久亚洲| 奇米一区二区| www.avtt| www.欧美日韩| 色婷婷在线观看视频| 日韩国产精品一区| 激情aⅴ欧美一区二区欲海潮| 久久精彩视频| 久久看片网站| 久久久久久久久福利| 欧美性淫爽ww久久久久无| yiren22综合网成人| 国产精品美女无圣光视频| 成人高清电影网站| 在线观看亚洲色图| 日韩美女视频一区| 精品久久久久成人码免费动漫| 久久影院在线观看| www.成人网| 欧美三级在线观看视频| 久久久亚洲精品一区二区三区| 国产精品suv一区| 国产一区二区日韩| 一区在线不卡| 欧美黄网在线观看| av欧美精品.com| 91在线视频免费播放| 色偷偷综合社区| 91精品一区| 日韩在线观看a| 国产日韩精品一区二区三区在线| 中文字幕资源网| 久久97久久97精品免视看| 久久久免费毛片| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 91cn在线观看| 国产精品日韩一区二区免费视频| 亚洲欧美日韩精品一区二区| 国产调教在线观看| 欧美一级爆毛片| 少妇在线看www| 亚洲一区二区三区加勒比 | 麻豆精品国产传媒av| 欧美日韩在线视频观看| 97在线观看免费观看高清 | 99久久夜色精品国产亚洲96| 国产精品19p| 日本高清视频一区二区| www久久日com| 欧美一级爽aaaaa大片| 国产麻豆成人精品| 国产超碰人人爽人人做人人爱| 日韩天堂在线视频| 狼人天天伊人久久| 国产免费又粗又猛又爽| 亚洲成人免费av| 免费人成在线观看播放视频| 国新精品乱码一区二区三区18| 日韩成人精品在线| 精品无码免费视频| 中文字幕国产精品| 亚州国产精品| 波多野结衣办公室双飞| 欧美日韩亚洲综合|