在Web浏覽器中監控Rational ClearCase運行狀態
使用 Java 語言和 Web 2.0 技術開發基於 Web 浏覽器的 ClearCase 監控程序
Rational Clearcase 是一套功能全面的軟件配置管理(Software Configuration Management,SCM)解決方案。但是 ClearCase 的系統安裝與運行維護管理非常復雜,很多系統運行相關的功能、狀態監控任務以及 UCM 項目狀態查詢操作都需要通過系統管理員在服務器端執行復雜的基於命令行的 ClearCase 指令。這一過程非常復雜繁瑣,也無法供 ClearCase 普通用戶使用。
本系列文章共有兩篇,以一個實際生產環境中使用的 ClearCase 監控系統的開發為例,向讀者介紹如何使用基於 Java 語言的 Web2.0 和 Web Service 技術來開發一個 Linux 環境下的 ClearCase 監控和 UCM 項目查詢系統。本文是該系列的第一部分,將向您演示如何使用 Java 語言和 Web2.0 技術開發一個基於 Web 浏覽器的 ClearCase 系統運行和狀態監控程序。
本系列文章共有兩篇,以一個實際生產環境中使用的 ClearCase 監控系統的開發為例,向讀者介紹如何使用基於 Java 語言的 Web2.0 和 Web Service 技術來開發一個 Linux 環境下的 ClearCase 監控和 UCM 項目查詢系統。本文是該系列的第一部分,將向您演示如何使用 Java 語言和 Web2.0 技術開發一個基於 Web 浏覽器的 ClearCase 系統運行和狀態監控程序。
Rational ClearCase 系統運行和狀態監控程序應用場景介紹
Rational ClearCase(以下簡稱 ClearCase)是一套建立在服務器 - 客戶機體系結構之上的軟件系統。為了使用 ClearCase 的版本控制服務,終端用戶需要使用各種 ClearCase 客戶端(CCRC,CC Web 和 CC Native Client 等)來訪問服務器主機。這些客戶端只提供了訪問處理 ClearCase 中存儲的源代碼數據所需的各種功能,並沒有提供監控 ClearCase 服務器運行狀態所需功能。這些服務器運行狀態信息只能由 ClearCase 系統的管理員在服務器主機上通過使用 cleartool 或操作系統命令來得到。但是在軟件項目的開發過程和 ClearCase 系統的日常維護中,項目中的各個成員都需要了解某些 ClearCase 主機的運行狀態信息。例如 ClearCase 系統管理員需要監控 ALDB、DB、VOB 等服務的運行狀態,軟件項目的開發者和項目經理可能需要了解 view 服務器運行狀態和系統運行時許可證分配狀態等信息。
在常規的方式下,為了獲得這些服務器主機狀態信息,ClearCase 管理員需要連接到服務器主機並執行相應的命令行語句,或者編寫相應的 shell 命令腳本並執行。而軟件項目的開發者和項目經理等不具有 ClearCase 命令語句使用環境和技能的項目成員則只能求助於系統管理員來獲得所需信息。根據軟件開發團隊的不同地理和行政組織結構,這一過程有可能非常的緩慢低效,同時會給 ClearCase 系統管理員帶來非常大的工作量。
而在使用本文所述的基於 Web 浏覽器的 ClearCase 系統運行和狀態監控程序時,項目團隊中的各個成員只需要打開任意的 Web 浏覽器並輸入本監控程序的 Http 地址即可在浏覽器窗口中獲得所需的各類系統運行信息。這些信息具有良好的組織結構和圖形化的表現形式,便於各類使用者了解。同時可以消除 ClearCase 系統管理員的大量重復性勞動。圖 1 是使用這兩種方式的流程對比。
圖 1. 常規方式和使用 Rational ClearCase 系統狀態監控程序方式的流程對比
圖 2 是一個真實運行的 ClearCase 監控系統的截圖。在本文的以下部分首先會介紹一些在 ClearCase 中經常使用的系統運行和狀態監控指令 , 之後將介紹如何使用 Java 和 Web2.0 技術來開發一個類似圖 2 所示的通過 Web 浏覽器實時遠程執行這些 ClearCase 命令行指令並將運行結果顯示在浏覽器中的狀態監控程序。
圖 2. 真實 Rational ClearCase 監控系統界面
使用服務器端命令行指令進行 ClearCase 系統監控
ClearCase 是一個分布式的應用軟件 , 它的大多數的操作涉及到服務器主機和運行在這些主機上的一些操作系統進程,清單 1 顯示了一個真實運行在 Linux 平台上的 ClearCase 主機中的一些主要進程。
清單 1. ClearCase 的主要進程
[root@ccServer ~]# pstree -la
......
├─albd_server
│├─admin_server -S13:18,tcp
│├─db_server -S13:18,tcp
│├─db_server -S13:18,tcp
│├─db_server -S13:18,tcp
│├─syncmgr_server syncmgr_server -S13:17,tcp
│├─view_server /local/views/IRM_Admin_DODv3_DEV.vws -u
d75f1a85.b14a11dd.869c.00:09:6b:09:9b:5c -S13:18,udp:19,tcp
│├─vob_server /vob_storage/irm/irm_doc.vbs -S13:17,udp
│├─vob_server /vob_storage/irm/irm_pvob.vbs -S13:17,udp
│├─vob_server /vob_storage/irm/irm_src.vbs -S13:17,udp
│└─vobrpc_server /vob_storage/irm/irm_src.vbs -S13:18,tcp
......
在配置了 VOBs 和 Views 本地支持的 ClearCase 主機上,不論是否有 VOB 或者 View 已被創建, albd_server 和 admin_server 兩個服務器進程均會運行。其他的服務進程將根據管理 VOBs 和 Views 的需要而啟動長駐在主機上,各個進程的主要功能如下:
albd_server:當啟動 ClearCase 時 albe_Server 首先被啟動 , 它在需要的時候啟動和停止其他的 ClearCase 服務。當停止 ClearCase 時 albd_Server 服務停止所有在主機上的其他的服務,然後退出。
admin_server:完成各種 ClearCase 管理支持功能。
view_server:一個常駐進程,管理著 View 服務器上指定的活動 View。
vob_server:對於每個 VOB,一個常駐的 vob_server 的進程運行在 VOB 的服務器上。它操縱存儲在 VOB’s 存儲池中的數據並響應客戶端進程的請求。
db_server:管理 VOB 數據庫事務並響應客戶端程序發送的請求。
vobrpc_server:操作並響應來自網絡的 view_server 進程的請求。
為了確認服務器中 ClearCase 服務是否在正常運行,可以使用命令 : ps -ef | grep albd_server 檢查 albd_server 進程的運行狀態 , 以下為一個正常運行的輸出結果 :
清單 2. 檢查 albd_server 進程運行狀態
[root@ccServer ~]# ps -ef | grep albd_server
root 3199 1 0 Apr16 ? 00:00:53 /opt/rational/ClearCase/etc/albd_server
root 28718 27822 0 17:46 pts/2 00:00:00 /usr/bin/ksh -c ps -ef | grep albd_server
root 28721 28718 0 17:46 pts/2 00:00:00 grep albd_serve
為了確認 VOB 服務是否正常運行 , 可以使用命令 : ps -ef | grep vob_server 檢查 vob_server 進程的運行狀態 , 以下為一個正常運行的輸出結果 :
清單 3. 檢查 vob_server 進程運行狀態
[root@ccServer ~]# ps -ef | grep vob_server
ccadmin 4996 3199 0 Apr16 ? 00:00:00 vob_server /vob_storage/irm/irm_pvob.vbs -S12:16,udp
ccadmin 6377 3199 0 Apr16 ? 00:00:25 vob_server /vob_storage/irm/irm_src.vbs -S12:16,udp
ccadmin 6405 3199 0 Apr16 ? 00:00:01 vob_server /vob_storage/irm/irm_doc.vbs -S12:16,udp
root 28728 27822 0 17:46 pts/2 00:00:00 /usr/bin/ksh -c ps -ef | grep vob_server
root 28732 28728 0 17:46 pts/2 00:00:00 grep vob_server
ClearCase 中還內置了一個稱為 cleartool(/usr/atria/bin/cleartool) 的命令行工具 , 它包含有很多的子命令可以用來進行系統監控 , 以下是其中常用的一些 :
/usr/atria/bin/cleartool -version : 顯示 ClearCase 系統的版本信息。
/usr/atria/bin/cleartool hostinfo -l : 顯示 ClearCase 主機信息 ( 包括注冊表 , 許可證服務器 , 操作系統等信息 )。
/usr/atria/bin/cleartool lsclients -host `hostname` -type license : 顯示連接該主機的所有客戶端信息。
/usr/atria/bin/cleartool lsvob -long : 顯示該主機中的所有 VOB 的詳細信息。
/usr/atria/bin/cleartool lsview -long : 顯示該主機中的所有 View 的詳細信息。
/usr/atria/bin/cleartool getlog albd : 顯示該主機中的 ClearCase 主服務的日志信息。
除了 cleartool 外 ,ClearCase 中還包含其他的一些服務器端命令行工具 , 例如 clearlicense(/opt/rational/ClearCase/bin/clearlicense) 命令可以用來顯示 ClearCase 主機中的許可證信息和實時使用狀況。
使用 Java 和 Web 2.0 技術開發 ClearCase 狀態監控程序
本文所述 ClearCase 狀態監控程序是一個運行在 ClearCase 服務器主機中的輕量級的 Web 程序 , 它有一個使用 JSP+Servlet 編寫的 Web 用戶界面和一個用來執行 ClearCase 狀態監控指令的操作系統進程調用組件。用戶在 Web 用戶界面中調用 javascript 方法來運行監控指令。通過 Web2.0 技術 ,javascript 方法被直接映射為操作系統進程調用組件中的 Java 方法 , 這些 Java 方法使用操作系統進程執行上文已經介紹過的 ClearCase 服務器端命令 , 並直接將命令執行結果返回 Web 用戶界面中。圖 3 是本文所述 ClearCase 狀態監控程序的基本結構。
圖 3. Rational ClearCase 狀態監控系統基本結構圖
本監控程序邏輯上由操作系統進程調用組件,Web 用戶界面程序和 JSP/Servlet 容器三部分組成 , 以下是各個部分的功能和使用技術介紹 :
操作系統進程調用組件 :
監控系統中執行的所有系統命令行指令都會通過操作系統進程調用組件來執行 , 該組件由 Java 語言編寫 . 由位於 com.cn.ibm.csdl.ecm.build.nerveCell.util.nativeCommand 包中的以下四個類組成:
NativeCommand 類:通過調用 java.lang.Runtime.getRuntime().exec(String cmdarray[]) 來產生一個操作系統進程對象 java.lang.Process, 並在這個進程對象中執行操作系統命令行指令並將指令執行結果以 CommandExeResult 對象的形式返回給調用者。
CommandExeResult 類:操作系統進程命令執行結果的 Java 對象表示,包含命令運行返回數據,異常數據,return code 和命令執行結果狀態等信息。
OS 類:儲存供不同操作系統使用的進程調用所需信息。
RemoteCommandUtil 類:組件工具類,提供方法將 CommandExeResult 對象中的信息轉換為可以在 HTML 中顯示的字符串形式的數據。
詳細代碼請參考本文附件中的 eclipse 項目工程。
Web 用戶界面程序 :
Web 用戶界面程序是狀態監控系統的用戶操作界面 , 使用 JSP+Servlet 編寫 , 它的主要功能是執行 Web 頁面中定義的 ClearCase 狀態監控 javascript 方法 , 這些 javascript 方法調用會被轉化為服務器端相對應的 Java 方法調用。當 Java 方法執行完畢後 , 方法的返回結果會通過 javascript 回調函數顯示在 Web 頁面上。Web 用戶界面程序中使用 DWR 來耦合浏覽器端的 javascript 代碼和服務器端的 Java 代碼。這一方法極大的減少了程序開發的難度和所需時間。
DWR 是一套開源的 Web2.0 類庫 , 它包含服務器端 Java 庫、一個 DWR Servlet 和一套 JavaScript 庫。對於需要發布到浏覽器中的每個 Java 類,DWR 首先會使用部署在 Web 應用程序中的 DWR Servlet 動態地生成包含在 Web 頁面中的 javaScript( 這些 javaScript 包含存根函數,代表 Java 類上的對應方法並在後台執行 XMLHttpRequest 操作 )。之後 DWR 會把浏覽器端的 javascript 用戶請求轉化成對服務器端的 Java 對象的方法調用 , 並把方法的返回值放置在 Servlet 響應中發送回浏覽器客戶端。
DWR 的配置十分簡單 , 首先需要在 Web 程序的 web.xml 中定義如下的 servlet 和 servlet mapping 配置 :
清單 4. 在 web.xml 中配置 DWR servlet
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<description>Direct Web Remoter Servlet</description>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
之後需要在 DWR 的配置文件 dwr.xml( 該文件和 web.xml 相同 , 位於 WEB-INF 目錄中 ) 中定義需要轉化的 Java 類和相對應的 javascript 對象名稱 , 以下 dwr.xml 示例文件中將一個名為 com.cn.ibm.csdl.ecm.build.nerveCell.util.nativeCommand.RemoteCommandUtil 的 Java 類映射為一個名稱為 RemoteCommandUtil 的 javascript 對象。
清單 5. 在 dwr.xml 中配置 Java 和 javascript 映射
<dwr>
<allow>
<create creator="none" javascript="RemoteCommandUtil">
<param name="class" value="com.cn.ibm.csdl.ecm.build.nerveCell.util.
nativeCommand.RemoteCommandUtil"/>
</create>
</allow>
</dwr>
當 DWR 的服務器端配置完成後 , 就可以在 Web 頁面中通過 javascript 來直接調用服務器端的 Java 方法。以下的代碼示例通過 javascript 對象 RemoteCommandUtil 調用了服務器端的 Java 對象的 executeSingleRemoteCommand(String commond) 方法 , 並將返回結果傳遞到了 javascript 回調函數 displayGeneratedDate() 中。
清單 6. 調用 DWR javascript
<script type='text/javascript'
src='<%=request.getContextPath()%>/dwr/engine.js'></script>
<script type='text/javascript'
src='<%=request.getContextPath()%>/dwr/util.js'></script>
<script type='text/javascript'
src='<%=request.getContextPath()%>/dwr/interface/RemoteCommandUtil.js'>
</script>
<script type="text/javascript">
function displayGeneratedDate(str){
alert(str);
}
RemoteCommandUtil.executeSingleRemoteCommand("date",displayGeneratedDate);
</script>
如圖 4 所示,本文所述的 Web 用戶界面程序中使用 DWR 將操作系統進程調用組件中的 Java 類 RemoteCommandUtil 綁定在 javascript 對象 RemoteCommandUtil 上。通過在 Jsp 頁面中執行 javascript 方法來遠程運行 ClearCase 服務器端狀態監控指令。
圖 4. Web 用戶界面程序 javascript /Java 方法調用映射
DWR.png
以下的代碼片斷通過 javascript 對象 RemoteCommandUtil 直接執行了遠程主機中的操作系統命令“ ps -ef | grep albd_server ”,並將命令執行結果實時的返回給 javascript 回調函數 displayClearCaseALBDSERVERStatus(str)。displayClearCaseALBDSERVERStatus 函數會使用適當的 javascript 方法將這一執行結果顯示在 Jsp 頁面中。
清單 7. 調用 ClearCase 監控指令
<script type="text/javascript">
function displayClearCaseALBDSERVERStatus(str){
//javascript program logic to display albd_service status on web page
}
RemoteCommandUtil.executeSingleRemoteCommandForHTML(
"<%=monitorServerName%>","ps -ef | grep albd_server",displayClearCaseALBDSERVERStatus);
</script>
通過使用這一方法,我們可以在 Web 用戶界面程序的 Jsp 中運行任意的 ClearCase 狀態監控指令並實時將結果顯示在頁面中。
JSP/Servlet 容器 :
監控系統的 Web 用戶界面程序使用 JSP+javascript+DWR 編寫 , 為此需要提供一個 JSP/Servlet 容器來做為它的運行環境。本系統使用 Jetty 做為這一環境。Jetty 以 jar 包的形式發布它的系統操作 API, 通過調用這些 API, 開發人員可以輕易的將 Jetty 容器實例化成一個 Java 對象,從而可以簡便的為一些獨立運行(stand-alone)的 Java 程序提供輕量級的 JSP/Servlet 支持。清單 8 中的 Java 代碼示例 , 在地址 http://hostname:9990/ccmonitor 上提供了對目錄”./ccmonitorWebApp”中的 web 程序的 JSP/Servlet 服務支持,(ccmonitorWebApp 目錄中儲存了本文所示的 Web 用戶界面程序)。
清單 8. 使用 Jetty 為 Web 用戶界面程序提供 JSP/Servlet 服務支持
public void StartServer(){
int server_HTTP_Port=Integer.parseInt("9990");
org.mortbay.jetty.Server server =
new org.mortbay.jetty.Server(server_HTTP_Port);
String webappPath = "./ccmonitorWebApp";
String contextPath = "/ccmonitor";
org.mortbay.jetty.webapp.WebAppContext webapp =
new org.mortbay.jetty.webapp.WebAppContext(webappPath, contextPath);
org.mortbay.jetty.handler.HandlerList hl =
new org.mortbay.jetty.handler.HandlerList();
hl.setHandlers(new org.mortbay.jetty.Handler[]{webapp});
server.setHandler(hl);
try {
server.start();
} catch (Exception e) {
e.printStackTrace();
}
}
當執行了方法 StartServer() 後 , 我們就可以在浏覽器中通過訪問地址 http://hostname:9990/ccmonitor 來使用本文所開發的 ClearCase 系統運行和狀態監控程序,這一系統使用的 Jsp 和 javascript 請參考本文附件中的 eclipse 項目工程。
結束語
本文介紹了如何使用 Java 和 Web2.0 技術來開發一個 ClearCase 系統運行和狀態監控程序。通過使用該監控程序 , 可以極大的減少 ClearCase 系統管理員的日常維護工作量。同時本文所介紹的方法也可以為 ClearCase 系統的管理維護和應用方式提供一個新的思路。
來源:
http://www.ibm.com/developerworks/cn/rational/r-cn-webserviceclearcase1/