自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ClearQuest V7.1從樂觀鎖定到悲觀鎖定

開發(fā) 項目管理
本文介紹ClearQuest V7.1中的樂觀鎖定和悲觀鎖定。ClearQuest是一個在項目管理中常用的工具,項目參與者不僅可以通過它實時更新項目,同時也可以了解項目其他成員的進(jìn)度和相關(guān)情況。

隨著IT科技的不斷普及,越來越多公司引入項目管理工具,這使得項目管理更具有實時性,并更加透明化。ClearQuest是一個在項目管理中常用的工具,項目參與者不僅可以通過它實時更新項目,同時也可以了解項目其他成員的進(jìn)度和相關(guān)情況。

當(dāng)多人次同時對同一記錄編輯時,顯然需要軟件擁有一種處理機(jī)制來避免由于這樣的操作所帶來信息沖突和不便。在這種情況下,ClearQuest應(yīng)對不同的客戶需求,提供了兩種解決機(jī)制,稱之為"樂觀鎖定"和"悲觀鎖定"。

1. 背景介紹

在ClearQuest v7.1以前的版本中,只有一種鎖定機(jī)制"樂觀鎖定"。它使用戶很方便地更新數(shù)據(jù),不需要做任何設(shè)置更改,也不需要在乎其他人對該記錄的操作,只要該用戶直接編輯,便可順利的完成整個數(shù)據(jù)更新步驟。從而使用戶避免了復(fù)雜的加鎖解鎖操作。這種情況下,在一條數(shù)據(jù)被"Apply"后,同時更新該記錄的其他用戶只允許編輯,而不能"Commit"。

然而在使用的過程中,越來越多的用戶發(fā)現(xiàn)這種處理機(jī)制帶來了很多的不方便,常常做了很多更改后才發(fā)現(xiàn)不能"Apply",而不得不重新來做。如何使用戶在編輯時就知道,該記錄已經(jīng)被鎖定,從而避免做無用功呢?在ClearQuest v7.1中,一種新的鎖定機(jī)制被引用"悲觀鎖定"。如果用戶A希望某條記錄只能由自己編輯,其他人在這期間想要更新該記錄時,可以得到提示表明該記錄已被用戶A 鎖定,便可使用"悲觀鎖定"。該機(jī)制需要用戶做一些簡單的設(shè)置才能生效。下圖說明了"悲觀鎖定"的工作方式。

接下來,本文會著重介紹ClearQuest v7.1中這種新的鎖定機(jī)制"悲觀鎖定"。

2. 悲觀鎖定簡介

概括的說,悲觀鎖定避免了在樂觀鎖定時,用戶同時編輯記錄的沖突,讓每條記錄有順序的被更新。

2.1 悲觀鎖定的特點

◆悲觀鎖定適用Feature level 7的數(shù)據(jù)庫

◆使用Hook腳本對其設(shè)置

◆在執(zhí)行"Apply","Revert"或是超時后,鎖定記錄被自動解鎖

◆超級用戶可以強(qiáng)制性解除鎖定,每個用戶也可以解除自己的鎖定

◆可以使用"Lock_by"域來查詢被鎖記錄

2.2 設(shè)置悲觀鎖定

ClearQuest v7.1中不能直接通過客戶端使用悲觀鎖定,必須通過一定的配置來實現(xiàn)該功能。下面以一個常用的操作為例子,介紹一下如何進(jìn)行設(shè)置。

假設(shè)兩個用戶Alice,Bob同時更改記錄SAMPL00000001,Alice對該記錄做了鎖定設(shè)置,當(dāng)Bob此時想要編輯該記錄時,被提示該記錄被鎖定,通知管理員解鎖。

第一步,在ClearQuest Designer中新建一個類型為Base的行為Lock,對該行為新建一個初始化行為(Action_Initialization)腳本LockRecord,編寫腳本:"$entity->LockRecord(0)",這里我們選用perl腳本作為編輯腳本。

第二步,用類似的方法再建一個UnLockRecord行為,選擇此行為的類型為RECORD_SCRIPT_ALIAS,新建記錄腳本UnLockRecord,并與UnLockRecord行為關(guān)聯(lián)。

腳本UnLockRecord:

  1. sub Defect_UnlockRecord {  
  2.     my($result);  
  3.     my($param) = @_;  
  4.     # record type name is Defect     
  5.     $result = "";  
  6.     my $locked_by = $entity->GetLockOwner();  
  7.     if ($locked_by ne "") {  
  8.         my $do_unlock = $session->IsUserSuperUser();  
  9.         if (! $do_unlock) {  
  10.             # If the current user holds the lock, let them unlock it.  
  11.             my $username = $session->GetUserLoginName();  
  12.             if ($username =~ /^$locked_by$/i) {  
  13.                 $do_unlock = 1;  
  14.             }  
  15.         }  
  16.         if (! $do_unlock) {  
  17.             # Additional options to "authorize" unlocking:  
  18.             # 1) allow if user is a member of an "unlock" group  
  19.             #    get user's groups, check if member  
  20.             # 2) allow for privileged users, e.g. Security Administrator  
  21.             #    check session for the chosen privilege  
  22.             # 3) many other possibilities  
  23.             #  
  24.             # if ( user-should-be-allowed-to-unlock-the-record ) {  
  25.             #     $do_unlock = 1;  
  26.             # }  
  27.         }  
  28.         if ($do_unlock) {  
  29.             $entity->UnlockRecord();  
  30.         }  
  31.         else {  
  32.             $result = "You are not allowed to unlock this record.";  
  33.         }  
  34.     }  
  35.     return $result;  

現(xiàn)在升級你的數(shù)據(jù)庫,至此我們便完成了鎖定設(shè)置。

接下來,在ClearQuest客戶端中建立一個對鎖定記錄的查詢,這里使用域"Lock_by"作為filter,選擇覺得可能的Owner。值得提一下的是,這個域在v7.1之前作filter是無效的,而在v7.1中加入悲觀鎖定功能后,通過它可以看到哪些記錄被鎖了,誰鎖了等等這些信息。

2.3 驗證

下面檢驗一下剛才的設(shè)置。

第一步,使用ClearQuest Administrator創(chuàng)建兩個用戶Alice,Bob,見下圖。

第二步,分別使用Alice和Bob兩個帳號登錄ClearQuest客戶端。先讓我們檢查一下Unlock Action是不是在Action Dropdown list中以及新建的域Lock_by能否在客戶端顯現(xiàn)。

第三步,假設(shè)Alice正在對記錄SAMPL00000001編輯,Bob試圖修改該記錄,發(fā)現(xiàn)此記錄被鎖,于是告知管理員希望他解除鎖定。

第四步,在進(jìn)行解鎖之前,我們利用剛才建的查詢,查看一下,現(xiàn)在被鎖定的記錄,返回結(jié)果當(dāng)前只有一條記錄被鎖,即SAMPL00000001。

第五步,我們有Apply,Revert和Unlock三種方式解除記錄鎖定,先看看這三種方式有什么不同。

Apply -- Bob在此動作后編輯SAMPL00000001,會發(fā)現(xiàn)自己仍然不能進(jìn)行操作,這是因為此時兩人所屬的數(shù)據(jù)庫并不同步,Bob如果想要繼續(xù)編輯記錄,需要重新連接數(shù)據(jù)庫.

Revert -- 大家應(yīng)該已經(jīng)猜到了,這個時候Bob可以成功編輯SAMPL00000001

Unlock -- 這是通過hook腳本來解除鎖定,所以Bob也可以編輯SAMP SAMPL00000001

對于前兩種操作,作為用戶的Alice都可以幫助Bob解除記錄鎖,但是如果想要使用Unlock動作,我們必須通知高級管理員,普通用戶并沒有權(quán)限執(zhí)行該動作。

第六步,這里我們用上面設(shè)置的Unlock行為來解鎖。使用Admin用戶登錄ClearQuest客戶端,點擊"Unlock"?;仡^再來看看,Bob現(xiàn)在能不能編輯SAMPL00000001??梢钥吹?,現(xiàn)在Bob可以成功編輯SAMPL00000001了。

3. 補充

實際上,鎖定一條或多條記錄,除了上面講到的建立一個Base的行為Lock以外,也可以類似與Unlock行為一樣,建立一個類型為RECORD_SCRIPT_ALIAS的Lock行為,這樣做可以方便用戶自己決定是否鎖定記錄。

感興趣的朋友還可以通過findrecordlocks.pl 進(jìn)一步找到當(dāng)前被鎖記錄的一些相關(guān)信息,該腳本在ClearQuest V7.1的安裝目錄下  \IBM\RationalSDLC\ClearQuest\,運行:

  1. cqperl findrecordlocks.pl  [-dbset < dbset_name>]  
  2.                            [-database < user_database>]  
  3.                            < clearquest_login> 
  4.                            < clearquest_password> 
  5.                            { < record_type_list> | -all }  
  6.                            [-unlock]  
  7.                            [-scan < interval>]  
  8.                            [-timeout < interval>]  
  9.                            [-times < times>]  
  10.                            [-loglevel < error|info|verbose>]  

以上面的記錄SAMPL00000001為例,Alice鎖住了記錄SAMPL00000001,運行:

cqperl "F:\Program Files\IBM\RationalSDLC\ClearQuest\findrecordlocks.pl"-dbset ss admin "" Defect,看看結(jié)果是不是如實際操作的一樣。

4. 附錄

類型為RECORD_SCRIPT_ALIAS的Lock行為的perl腳本

  1. sub Defect_LockRecord {  
  2.     my($result);  
  3.     my($param) = @_;  
  4.     # record type name is Defect  
  5.     if (ref ($param) eq "CQEventObject") {  
  6.         # add your CQEventObject parameter handling code here  
  7.     } elsif (ref (\$param) eq "SCALAR") {  
  8.         # add your scalar parameter handling code here  
  9.         # The Web clients support scalar paramter type only,  
  10.         # so the hook code added in the above section, needs to be duplicated here  
  11.     } else {  
  12.         # add your handling code for other type parameters here, for example:  
  13.         # die("Unknown parameter type");  
  14. }  
  15. $entity->LockRecord(0);  
  16.     return $result;  

5.結(jié)束語

本文介紹了ClearQuest V7.1中的記錄鎖定機(jī)制,重點讓大家了解了兩種鎖定機(jī)制及如何使用"悲觀鎖定。"

【編輯推薦】

  1. SQL Server樂觀鎖定和悲觀鎖定實例
  2. 解析敏捷測試的十大“神話”
  3. 專家解析如何有效的簡化你的軟件開發(fā)
  4. 用TeamDefine“真實地”模擬需求定義
  5. 演進(jìn)式架構(gòu)設(shè)計在敏捷開發(fā)中的使用
責(zé)任編輯:yangsai 來源: IT168
相關(guān)推薦

2009-11-23 20:35:12

ibmdwRational

2010-08-27 11:39:19

DB2鎖定新特性

2024-01-05 16:43:30

數(shù)據(jù)庫線程

2024-05-17 09:33:22

樂觀鎖CASversion

2011-08-18 13:44:42

Oracle悲觀鎖樂觀鎖

2024-09-03 15:14:42

2025-04-23 08:45:00

悲觀鎖樂觀鎖并發(fā)控制機(jī)制

2012-03-02 09:02:17

云計算云鎖定

2010-05-19 13:29:59

2010-09-17 16:03:17

鎖定SQL表

2019-02-18 15:45:24

CPU頻率溫度

2012-04-10 15:04:38

紅帽

2019-07-10 11:25:32

網(wǎng)絡(luò)開發(fā)物聯(lián)網(wǎng)

2011-07-20 15:42:18

iPhone 劃動條

2022-05-06 21:46:11

云鎖定云計算

2009-08-13 13:31:13

鎖定對象C# Monitor類

2012-12-24 14:06:43

2013-07-31 10:06:31

云廠商鎖定廠商鎖定云部署

2023-02-23 10:32:52

樂觀鎖

2023-05-07 13:41:22

OBS攝像頭USB
點贊
收藏

51CTO技術(shù)棧公眾號