BEA Tuxedo中間件應用初探

  隨着中間件在大型應用系統中的日益普及,目前各類中間件充斥着市場,它們在銀行、電信、金融等大規模關鍵事務領域中的整合各種異構平臺、保證交易完整性等方面表現出了超強的能力。BEA Tuxedo就是其中一款著名的交易中間件,本文以一個經典的例子(大寫字母轉換),主要介紹Tuxedo的工作原理及開發方法,以及Tuxedo應用程序的管理方法。

工作原理
Tuxedo是BEA公司的交易中間件產品,1984年由貝爾實驗室開發成功,1992年易主Novell公司,1996年由BEA公司收購,經過十多年的不斷更新和完善,Tuxedo已經發展成爲交易中間件領域事實上的標準。

Tuxedo可以有效地整合企業異構C/S系統,實現大規模的關鍵業務處理和分佈式事務管理,從而爲企業提供一個可靠的、高性能的、易維護的三層分佈式計算機環境。圖1展示了一個基本Tuxedo系統的組成和工作原理。

一個基本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命令可以方便地管理服務程序。  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章