隨着中間件在大型應用系統中的日益普及,目前各類中間件充斥着市場,它們在銀行、電信、金融等大規模關鍵事務領域中的整合各種異構平臺、保證交易完整性等方面表現出了超強的能力。BEA Tuxedo就是其中一款著名的交易中間件,本文以一個經典的例子(大寫字母轉換),主要介紹Tuxedo的工作原理及開發方法,以及Tuxedo應用程序的管理方法。
工作原理
Tuxedo是BEA公司的交易中間件產品,1984年由貝爾實驗室開發成功,1992年易主Novell公司,1996年由BEA公司收購,經過十多年的不斷更新和完善,Tuxedo已經發展成爲交易中間件領域事實上的標準。
Tuxedo可以有效地整合企業異構C/S系統,實現大規模的關鍵業務處理和分佈式事務管理,從而爲企業提供一個可靠的、高性能的、易維護的三層分佈式計算機環境。圖1展示了一個基本Tuxedo系統的組成和工作原理。
工作原理
Tuxedo是BEA公司的交易中間件產品,1984年由貝爾實驗室開發成功,1992年易主Novell公司,1996年由BEA公司收購,經過十多年的不斷更新和完善,Tuxedo已經發展成爲交易中間件領域事實上的標準。
Tuxedo可以有效地整合企業異構C/S系統,實現大規模的關鍵業務處理和分佈式事務管理,從而爲企業提供一個可靠的、高性能的、易維護的三層分佈式計算機環境。圖1展示了一個基本Tuxedo系統的組成和工作原理。
圖一
① Client向System/T發出查詢請求,以找到Server消息隊列的地址;
② Client根據找到的入口地址將請求發送到Server的消息隊列中;
③ Server處理請求,並將結果返回給Client的消息隊列。
System/T是Tuxedo系統的核心,它實現了Tuxedo的所有功能和特徵,如C/S數據流管理、服務請求的負載均衡、全局事務管理以保證交易的完整性、同步/異步服務請求、兩階段提交以確保消息的發送等。System/T提供了一個類似公告欄的服務,用以發佈C/S計算機環境中所有服務器、服務和客戶機的信息,供其它分佈式計算的參與者使用。下面筆者將通過一個大寫字母轉換的簡單例子,講述Tuxedo應用程序工作的基本原理和開發方法。
應用介紹
Simpapp是Tuxedo系統自帶的一個例子,它由服務器和客戶端程序兩部分組成。服務器simpserv實現了一個TOUPPER服務,它從客戶程序接收一個字符串,將它轉換成大寫後,傳回客戶端。整個工作流程可以用圖2表示。
圖二
客戶機首先收集要轉換成大寫的字符串,然後連接到System/T並將字符串放入緩衝區,接着調用服務器上的TOUPPER服務,最後從服務器響應緩衝區中取出數據並退出System/T。
1.Simpapp的服務程序 |
下面是服務程序simpserv.c的源代碼:
#include <stdio.h> #include "atmi.h" / Tuxedo ATMI函數庫的頭文件 / TOUPPER(TPSVCINFO rqst){ int i; for(i=0;i<rqst->len-1;i++) rqst->data[i]=toupper(rqst->data[i]); / 將rqst->data緩衝區內容轉換成大寫 / tpreturn(TPSUCCESS,0,rqst->data,0L,0); / 將rqst->data作爲響應緩衝區返回 / } |
可能你已經注意到了,該程序沒有提供main方法。事實上,Tuxedo不要求程序員編寫main方法,以便讓他們把精力集中在業務邏輯的編寫上,在編譯時,Tuxedo系統會爲它自動創建。
TPSVCINFO是Tuxedo記錄服務調用信息的一個結構體,data域是保存請求數據的緩衝區,len域記錄了data域的長度。
2.Simpapp的客戶程序 |
客戶程序Simpcl.c是服務調用的發起者,它從命令行接收參數,通過tpinit()調用連接到System/T,通過tpalloc()調用分配一個字符串類型的緩衝區,通過tpcall()調用請求TOUPPER服務,最後通過tpterm()調用退出System/T,下面是它的源代碼:
#include <stdio.h> #include "atmi.h" int main(int argc, char argv[]){ char buf; long len; if(argc != 2) { (void) fprintf(stderr, "Usage: simpcl string/n"); exit(1); } if (tpinit((TPINIT ) NULL) == -1) { (void) fprintf(stderr, "Tpinit failed/n"); exit(1); } len = strlen(argv[1]); if((buf = (char ) tpalloc("STRING", NULL, len+1)) == NULL) { (void) fprintf(stderr,"Error allocating send buffer/n"); tpterm(); exit(1); } (void) strcpy(buf, argv[1]); if(tpcall("TOUPPER", buf, 0, &&buf, &&len, 0)==-1){ (void) fprintf(stderr, "Can't send request to service TOUPPER/n"); tpfree(buf); tpterm(); exit(3); } (void) fprintf(stdout, "Returned string is: %s/n", rcvbuf); tpfree(buf); tpterm(); return(0); } |
3.Simpapp的配置文件 |
除了客戶和服務程序以外,Tuxedo還需要一個配置文件來對應用進行描述。配置文件由多個段組成,每個段定義由一個星號開始。下面是NT平臺下simpapp的配置文件ubbsimple的內容,其中帶下劃線的部分需要根據機器的資源配置作適當修改。
RESOURCES IPCKEY 123456 MASTER NODE1 MODEL SHM MACHINES JQ LMID=NODE1 TUXDIR="G:/ProgramFiles/BEA Systems/Tuxedo" APPDIR="G:/simpapp" TUXCONFIG="G:/simpapp/tuxconfig" GROUPS GROUP1 LMID=NODE1 GRPNO=1 SERVERS simpserv SRVGRP=GROUP1 SRVID=1 CLOPT="-A" SERVICES TOUPPER |
TUXDIR指的是Tuxedo的安裝路徑,APPDIR指的是simpapp應用程序所在的目錄,TUXCONFIG指的是simpapp的二進制配置文件,一般爲%APPDIR%/tuxconfig。
4.Simpapp的編譯和運行 |
由於Buildclient和Buildserver沒有編譯能力,要編譯Tuxedo應用程序時,還必須安裝第三方的C語言編譯器,在NT平臺下推薦使用VC。步驟如下:
⑴設置環境變量
SET PATH=%PATH%; G:/Program Files/BEA Systems/Tuxedo/Bin SET TUXDIR=G:/Program Files/BEA Systems/Tuxedo TUXCONFIG=G:/simpapp/tuxconfig |
⑵生成二進制配置文件
tmloadcf -y ubbsimple |
⑶編譯客戶程序
buildclient -o simpcl.exe -f simpcl.c |
⑷編譯服務程序
buildserver -o simpserv.exe -f simpserv.c -s TOUPPER |
⑸啓動服務程序
tmboot -y |
⑹運行客戶程序
simpcl "hello, JQ" |
⑺關閉應用程序
tmshutdown -y |
5.管理Simpapp |
通過tmadmin命令可以方便地管理服務程序。