一、 課程目標 通過本課程學習,你可以掌握如下知識: |
#include #include "atmi.h" /* TUXEDO 頭文件*/ #if defined(__STDC__) || defined(__cplusplus) main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { char *sendbuf, *rcvbuf; long sendlen, rcvlen; int ret; if(argc != 2) { (void) fprintf(stderr, "Usage: simpcl string "); exit(1); } /* 作為tuxedo客戶端連入tuxedo System */ if (tpinit((TPINIT *) NULL) == -1) { (void) fprintf(stderr, "Tpinit failed "); exit(1); } sendlen = strlen(argv[1]); /* 使用tpalloc申請string類型buffer作為請求和應答buffer */ if((sendbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) { (void) fprintf(stderr,"Error allocating send buffer "); tpterm(); exit(1); } if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) { (void) fprintf(stderr,"Error allocating receive buffer "); tpfree(sendbuf); tpterm(); exit(1); } (void) strcpy(sendbuf, argv[1]); /* 同步調用TOUPPER服務 */ ret = tpcall("TOUPPER", (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0); if(ret == -1) { (void) fprintf(stderr, "Can't send request to service TOUPPER "); (void) fprintf(stderr, "Tperrno = %d ", tperrno); tpfree(sendbuf); tpfree(rcvbuf); tpterm(); exit(1); } (void) fprintf(stdout, "Returned string is: %s ", rcvbuf); /* 使用tpfree釋放申請的請求和應答buffer空間 */ tpfree(sendbuf); tpfree(rcvbuf); /* 使用tpterm離開tuxedo System */ tpterm(); return(0); } |
(2)客戶端編譯
客戶端代碼使用buildclient編譯,如下圖:
buildclient參數說明:
-o:指明客戶端程序的可執行(輸出目標)文件名稱
-f:指明客戶端源程序文件名稱
六、 服務端代碼簡析及編譯
(1)服務端simpserv.c代碼分析
#include #include #include #include #if defined(__STDC__) || defined(__cplusplus) tpsvrinit(int argc, char *argv[]) #else tpsvrinit(argc, argv) int argc; char **argv; #endif { /* 如果沒有argc、argv一些編譯系統會有警告信息. */ argc = argc; argv = argv; /* userlog 把tuxedo消息寫入日志文件中 */ userlog("Welcome to the simple server"); return(0); } #ifdef __cplusplus extern "C" #endif void #if defined(__STDC__) || defined(__cplusplus) TOUPPER(TPSVCINFO *rqst) /*tuxedo服務名字TOUPPER*/ #else TOUPPER(rqst) TPSVCINFO *rqst; #endif { int i; for(i = 0; i < rqst->len-1; i++) rqst->data[i] = toupper(rqst->data[i]); /* 設置返回客戶端buffer */ tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0); } |
(2)服務端simpserv.c編譯方法
服務端代碼使用buildserver編譯,如下圖:
buildserver參數說明:
-o:指明服務端程序的可執行(輸出目標)文件名稱
-f:指明服務端源程序文件名稱
-s:提供系統啟動時的tuxedo系統服務的名稱
七、 編輯ubbconfig配置文件并編譯
#ident "@(#) apps/simpapp/ubbsimple : 1.1 #Skeleton UBBCONFIG file for the TUXEDO Simple Application. #Replace the *RESOURCES IPCKEY 262101 #IPCKEY必須是在32768 與 262143 之間 #Example: #IPCKEY 123456 DOMAINID simpapp MASTER simple MAXACCESSERS 10 MAXSERVERS 5 MAXSERVICES10 MODEL SHM LDBAL N *MACHINES DEFAULT: APPDIR="c: uxedowsy" TUXCONFIG="c: uxedowsy uxconfig" TUXDIR="c: uxedo" "WSY" LMID=simple *GROUPS GROUP1 LMID=simpleGRPNO=1OPENINFO=NONE *SERVERS DEFAULT: CLOPT="-A" simpserv SRVGRP=GROUP1 SRVID=1 *SERVICES TOUPPER |
(2)使用tmloadcf編譯ubbconfig文件,生成二進制的TUXCONFIG環境所指定的文件
八、 啟動simpapp應用程序
使用tmboot啟動tuxedo應用程序,如下圖:
九、 執行simpapp應用程序
執行simpcl命令可以將客戶端發送到服務端的小寫字符轉換為大寫并返回給客戶端,如圖:
十、 運行tmadmin管理程序
系統管理員可以使用tuxedo提供的tmadmin命令對tuxedo應用進行管理、動態配置,下面例舉了常用的psr和psc命令。具體的參考tmadmin命令手冊。
(1)printserver(可簡寫為psr):輸出server的相關信息等
(2)printservice(可簡寫為psc)輸出services的相關信息等
(3)quit:退出tmadmin命令控制界面
十一、 關閉simpapp應用程序
運行tmshutdown命令停止tuxedo應用服務程序,如圖:

作者簡介 | |
吳紹永是(dev2dev ID: wsywin) BEA dev2dev中文網站--在線技術論壇Tuxedo欄目版主,資深Tuxedo專家 |