Tuxedo應(yīng)用開發(fā)指南.doc_第1頁
Tuxedo應(yīng)用開發(fā)指南.doc_第2頁
Tuxedo應(yīng)用開發(fā)指南.doc_第3頁
Tuxedo應(yīng)用開發(fā)指南.doc_第4頁
Tuxedo應(yīng)用開發(fā)指南.doc_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余47頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Tuxedo應(yīng)用開發(fā)指南目 錄第一章 開發(fā)BEA Tuxedo應(yīng)用程序. 1.1 開發(fā)前的思考. 1.2 創(chuàng)建BEA Tuxedo的客戶程序. 客戶程序的任務(wù). 1.3 創(chuàng)建的服務(wù)程序. 服務(wù)程序的任務(wù). 1.4 在應(yīng)用程序中使用類型緩沖區(qū). 1.5 在BEA Tuxedo應(yīng)用程序中使用消息范例. 1BEA Tuxedo系統(tǒng)提供多種通信模式. 2. 同步的Request/Response模式. 3異步Request/Response模式. 4使用嵌套調(diào)用. 5使用調(diào)用轉(zhuǎn)發(fā). 6會(huì)話通信. 7主動(dòng)消息通告. 8基于事件的通信. 9基于隊(duì)列的通信. 10使用事務(wù). 第二章 一個(gè)簡單的Tuxedo應(yīng)用程序simpapp. 準(zhǔn)備simpapp的文件和資源. 1復(fù)制simpapp例子的相關(guān)文件. 2檢查并編譯客戶程序. 3檢查并編譯服務(wù)程序. 4編輯并加配置文件. 5啟動(dòng)應(yīng)用程序. 6如何執(zhí)行運(yùn)行時(shí)應(yīng)用程序. 7如何監(jiān)視運(yùn)行時(shí)應(yīng)用程序. 8如何關(guān)閉應(yīng)用程序. 第三章 一個(gè)完整的Tuxedo應(yīng)用程序bankapp. 3.1 熟悉bankapp的文件. 3.2 檢查bankapp的客戶程序. 1bankclt.c文件. 2bankapp中怎樣使用ud(1) 3一個(gè)請(qǐng)求/響應(yīng)客戶:audio.c. 4一個(gè)會(huì)話客戶:auditcon.c. 5一個(gè)監(jiān)視事件的客戶bankmgr.c. 3.3 檢查bankapp的服務(wù)器和服務(wù). 1bankapp的請(qǐng)求/響應(yīng)服務(wù)器. 2bankapp的會(huì)話服務(wù)器. 3bankapp的服務(wù). 4集成到服務(wù)器中的應(yīng)用. 5服務(wù)編碼的可選方法. 6準(zhǔn)備bankapp的文件和資源. 7運(yùn)行bankapp. 第一章 開發(fā)BEA Tuxedo應(yīng)用程序1.1 開發(fā)前的思考在開發(fā)BEA Tuxedo應(yīng)用程序之前,你需要先搞清楚一系列和設(shè)計(jì)開發(fā)相關(guān)的概念,如識(shí)別什么是客戶機(jī),有哪些方法可以從外界收集數(shù)據(jù)并提交服務(wù)器進(jìn)行業(yè)務(wù)處理;識(shí)別什么是服務(wù)器,哪些程序包容了可以處理客戶機(jī)輸入的商業(yè)邏輯;識(shí)別什么是類型緩沖區(qū),客戶程序在向其這程序發(fā)送數(shù)據(jù)前如何分配內(nèi)存區(qū)域;什么是BEA Tuxedo的消息范例等。最后你還要弄明白客戶程序是通過調(diào)用ATMI庫來訪問BEA Tuxedo系統(tǒng)的。1.2 創(chuàng)建BEA Tuxedo的客戶程序創(chuàng)建BEA Tuxedo的客戶程序與在C和C+編程語言中創(chuàng)建其它應(yīng)用程序一樣,BEA Tuxedo提供了一個(gè)其于C語言的編程接口,即應(yīng)用程序事務(wù)監(jiān)控接口ATMI,這套接口很容易使用,以便用于開發(fā)客戶程序和服務(wù)程序。除了C語言接口外,BEA Tuxedo還提供了COBOL接口。客戶程序的任務(wù)客戶程序一般執(zhí)行如下任務(wù): 調(diào)用tpchkauth()決定加入一個(gè)應(yīng)用程序所需的安全級(jí)別。可能出現(xiàn)的響應(yīng)包括:沒有安全級(jí)別,應(yīng)用程序口令,應(yīng)用程序授權(quán),訪問控制列表,連接級(jí)加密,公鑰加密,審計(jì)。這些可以根據(jù)你的需求進(jìn)行選擇; 調(diào)用tpinit()來連接到一個(gè)BEA Tuxedo應(yīng)用程序,所需的安全信息作為tpinit()的參數(shù)傳給了應(yīng)用程序; 執(zhí)行服務(wù)請(qǐng)求; 調(diào)用tpterm()來斷開和BEA Tuxedo應(yīng)用程序的連接。1.3 創(chuàng)建的服務(wù)程序盡管開發(fā)者使用ATMI編程接口來創(chuàng)建BEA Tuxedo客戶程序和服務(wù)程序,但服務(wù)程序不全部由開發(fā)者來編寫,開發(fā)者只需寫一些稱為服務(wù)的商業(yè)函數(shù),然后和BEA Tuxedo的一些二進(jìn)制程序聯(lián)編成一個(gè)可執(zhí)行的服務(wù)程序。BEA Tuxedo服務(wù)程序啟動(dòng)后,它總是保持運(yùn)行狀態(tài),只到接收到一個(gè)shutdown消息為止。一個(gè)典型的BEA Tuxedo服務(wù)程序在shutdown或reboot之前都在執(zhí)行著數(shù)千個(gè)服務(wù)。服務(wù)程序的任務(wù) 在BEA Tuxedo服務(wù)程序啟動(dòng)時(shí),執(zhí)行tpsvrinit()函數(shù),可以在里面打開一些如數(shù)據(jù)庫之類的資源供以后使用; 在BEA Tuxedo服務(wù)程序關(guān)閉時(shí),執(zhí)行tpsvrdown()函數(shù),可以在里面關(guān)閉tpsvrinit()中打開的資料; BEA Tuxedo服務(wù)程序以服務(wù)的形式來響應(yīng)客戶程序的請(qǐng)求,客戶程序不是通過名字來調(diào)用服務(wù)程序的,而是調(diào)用服務(wù),客戶程序不知道處理它請(qǐng)求的服務(wù)程序的位置; 服務(wù)程序調(diào)用tpreturn()函數(shù)來結(jié)束服務(wù)請(qǐng)求,并返回一個(gè)緩沖區(qū),必要時(shí),將它傳給客戶程序;1.4 在應(yīng)用程序中使用類型緩沖區(qū)在Bea Tuxedo系統(tǒng)中的所有通信過程都是通過類型緩沖區(qū)來完成的,Bea Tuxedo系統(tǒng)提供了大量的類型緩沖區(qū)來供開發(fā)者使用。所有類型緩沖區(qū)都必須通過Bea Tuxedo的tpalloc(), tprealloc(), tpfree()這些ATMI來分配回收,它們都有特定的頭部。統(tǒng)一定義的類型緩沖區(qū)可以使它們?cè)诳缭讲煌W(wǎng)絡(luò)、不同協(xié)議、不同CPU構(gòu)架以及不同操作系統(tǒng)之間得到統(tǒng)一的處理,這就使得開發(fā)者在分布式計(jì)算環(huán)境中有效地避開了異構(gòu)網(wǎng)絡(luò)和異構(gòu)計(jì)算機(jī)系統(tǒng)帶來的差異,把精力集中在商業(yè)邏輯的開發(fā)上。1.5 在BEA Tuxedo應(yīng)用程序中使用消息范例1BEA Tuxedo系統(tǒng)提供多種通信模式 同步Request/Response模式; 異步Request/Response模式; 嵌套調(diào)用; 調(diào)用轉(zhuǎn)發(fā); 會(huì)話通信; 主動(dòng)消息通告; 基于事件的通信; 基于隊(duì)列的通信; 使用事務(wù)。2. 同步的Request/Response模式要進(jìn)行同步調(diào)用,Bea Tuxedo客戶程序使用ATMI函數(shù)tpcall()把一個(gè)請(qǐng)求送到服務(wù)程序,它不是通過名字來調(diào)用服務(wù)程序的,而是通過特定的服務(wù)來完成??蛻舫绦蛞鹊椒?wù)程序作出響應(yīng)后才處理后面的工作,也就是說,它在收到服務(wù)程序的響應(yīng)之前一直處于阻塞狀態(tài)。3異步Request/Response模式要進(jìn)行異步調(diào)用,客戶程序必須調(diào)用兩個(gè)ATMI函數(shù):tpacall(3c)函數(shù),用于請(qǐng)求一個(gè)服務(wù);tpgetrply(3c)函數(shù),用于取得服務(wù)程序的響應(yīng)。客戶程序在請(qǐng)求和響應(yīng)之間要完成特定任務(wù)時(shí),可以采用這種模式。4使用嵌套調(diào)用一個(gè)服務(wù)可以充當(dāng)BEA Tuxedo客戶程序,去調(diào)用其它BEA Tuxedo服務(wù),換句話說,你請(qǐng)求的服務(wù)需要調(diào)用其它服務(wù)才能處理請(qǐng)求。BEA Tuxedo客戶程序調(diào)用了服務(wù)X,等待它的響應(yīng),服務(wù)X調(diào)用服務(wù)Y后也處于等待狀態(tài),當(dāng)服務(wù)X得到響應(yīng)后,再給客戶程序一個(gè)響應(yīng),這種機(jī)制的特點(diǎn)是效率高。5使用調(diào)用轉(zhuǎn)發(fā)在嵌套服務(wù)中,最里層嵌套服務(wù)可以直接給客戶程序一個(gè)響應(yīng),沒有必要按照調(diào)用棧逐級(jí)返回,這就使其它嵌套服務(wù)可以處理其它請(qǐng)求,當(dāng)?shù)谝粋€(gè)服務(wù)是一個(gè)分發(fā)代理時(shí),這種模式是非常有用的。在嵌套調(diào)用中,被客戶調(diào)用的服務(wù)X使用tpforward(3c)函數(shù)把請(qǐng)求傳給服務(wù)Y,服務(wù)X沒有tpreturn(3c)函數(shù)??蛻舫绦虿挥霉苷?qǐng)求是由誰來完成的,因此,轉(zhuǎn)發(fā)調(diào)用對(duì)客戶程序是透明的。6會(huì)話通信會(huì)話通信適合于有多個(gè)緩沖區(qū)需要以有狀態(tài)的方式在BEA Tuxedo客戶程序和服務(wù)之間傳遞的場合。恰當(dāng)?shù)厥褂肂EA Tuxedo的會(huì)話,因?yàn)閰⑴c會(huì)話的服務(wù)器在會(huì)話結(jié)束之前是不可用的。要完成會(huì)話通信,你的代碼需要遵循如下步驟: 客戶程序使用tpconnect()啟動(dòng)會(huì)話; 客戶程序和服務(wù)使用tpsend()和tprecv()函數(shù)進(jìn)行數(shù)據(jù)交換,一個(gè)特殊的標(biāo)記指示著當(dāng)前由哪一方來控制著會(huì)話; 當(dāng)服務(wù)程序調(diào)用tpreturn()或tpdiscon()函數(shù)時(shí),會(huì)話正常終止。7主動(dòng)消息通告要處理服務(wù)器的消息通知,客戶程序必須使用tpsetunsol()函數(shù)來創(chuàng)建一個(gè)消息處理器,要發(fā)送主動(dòng)消息,BEA Tuxedo客戶程序或服務(wù)程序可以調(diào)用tpnotify()來把消息傳遞給單個(gè)客戶程序,也可以通過tpbroadcast()函數(shù)來把消息同時(shí)廣播給多個(gè)客戶程序。當(dāng)客戶程序收到主動(dòng)消息后,BEA Tuxedo系統(tǒng)調(diào)用客戶程序的主動(dòng)消息處理器來處理。在一個(gè)基于信號(hào)系統(tǒng)中,客戶程序沒有必要處理所有的主動(dòng)消息,然而,在一個(gè)非信號(hào)系統(tǒng)中,客戶程序必須使用tpchkunsol()函數(shù)來檢查主動(dòng)消息。當(dāng)客戶程序調(diào)用一個(gè)服務(wù)請(qǐng)求時(shí),tpchkunsol()被隱含地調(diào)用。在調(diào)用tpnotify()時(shí),如果你設(shè)置了tpack標(biāo)記位,你將會(huì)收到一個(gè)請(qǐng)求通知。8基于事件的通信在基于事件的通信中,事件可以被發(fā)送到應(yīng)用程序隊(duì)列、LOG文件和系統(tǒng)命令。當(dāng)BEA Tuxedo服務(wù)或客戶程序調(diào)用tppost()函數(shù)時(shí),任何一個(gè)BEA Tuxedo客戶程序都可以使用tpsubscribe()函數(shù)訂閱用戶自定義事件;當(dāng)BEA Tuxedo系統(tǒng)檢測(cè)事件時(shí),客戶程序也可以訂閱系統(tǒng)定義事件。當(dāng)一個(gè)服務(wù)器死了,.SysServerDied事件就會(huì)被發(fā)布,它由BEA Tuxedo系統(tǒng)自動(dòng)完成,不需要應(yīng)用服務(wù)器干預(yù)。9基于隊(duì)列的通信為了實(shí)現(xiàn)了和/Q系統(tǒng)的接口,BEA Tuxedo客戶程序使用兩個(gè)ATMI函數(shù),使用tpenqueue()把消息放入隊(duì)列空間,使用tpdequeue()來把消息從隊(duì)列空間中取走。下面演示了點(diǎn)對(duì)點(diǎn)異步消息機(jī)制。一個(gè)客戶程序使用tpenqueue()函數(shù)將消息傳給服務(wù),響應(yīng)隊(duì)列和失敗隊(duì)列的名字可以作為參數(shù)包含在tpenqueue()調(diào)用中,由于在隊(duì)列中的數(shù)據(jù)是持續(xù)的,因此,所有和排隊(duì)消息相關(guān)的響應(yīng)消息和失敗消息都可以從相應(yīng)的響應(yīng)隊(duì)列和失敗隊(duì)列中取得??蛻舫绦蚩梢允褂萌笔〉呐抨?duì)順利,即按放放順利排隊(duì),先進(jìn)先出;也可以改變排隊(duì)規(guī)則,如把一個(gè)消息放在隊(duì)列開始,或放到另一個(gè)隊(duì)列前面。Tpenqueue()調(diào)用把消息送到TMQUEUE服務(wù)器,并被放入固定存儲(chǔ)體中進(jìn)行排隊(duì),然后給客戶程序發(fā)送一個(gè)通知消息。隊(duì)列管理器給消息分配一個(gè)標(biāo)識(shí)符,使用它可以隨時(shí)將消息踢出隊(duì)列,也可以用于tpenqueue()中,指示將新消息緊挨著標(biāo)識(shí)符標(biāo)識(shí)的消息。在消息出隊(duì)時(shí),要出隊(duì)消息的事務(wù)必須成功地提交??蛻舫绦蚴褂胻pdequeue()來使消息出隊(duì)。 下面演示了消息被轉(zhuǎn)發(fā)到另一個(gè)服務(wù)器。客戶程序發(fā)出一個(gè)消息,要調(diào)用服務(wù)器上的X服務(wù),X服務(wù)接收消息后,處理消息中的指令,然后把響應(yīng)放入隊(duì)列空間,客戶程序再從隊(duì)列空間中取出。排隊(duì)系統(tǒng)對(duì)于服務(wù)來說是透明的,也就是說,不論服務(wù)請(qǐng)求是從隊(duì)列發(fā)出的,還是通過tp(a)call發(fā)出的,服務(wù)都能接受。10使用事務(wù)要使用事務(wù),應(yīng)用程序開發(fā)者需要使用如下ATMI函數(shù): tpbegin(),用于開始一個(gè)事務(wù); tpcommit(),開始一個(gè)二階段提交處理; tpabort(),產(chǎn)即終止事務(wù)。任何放在begin,commit/abord之外的代碼不包含事務(wù)中。在下面的例子中,客戶程序打開了一個(gè)事務(wù),請(qǐng)求了兩個(gè)服務(wù),并且提交了事務(wù)。因?yàn)榉?wù)請(qǐng)求是在事務(wù)開始和提交之間完成的,所以兩個(gè)服務(wù)的行為都被了事務(wù)記錄。第二章 一個(gè)簡單的Tuxedo應(yīng)用程序simpapp本章介紹了BEA Tuxedo的一個(gè)簡單例子,用C語言編寫的simpapp,它包含了一個(gè)客戶程序和一個(gè)服務(wù)器,服務(wù)器只執(zhí)行一個(gè)服務(wù):從客戶程序接收小寫字母,將其轉(zhuǎn)換成大寫后,返回給客戶程序。在使用這個(gè)例子之前,需要在系統(tǒng)中安裝C語言編譯器。準(zhǔn)備simpapp的文件和資源在準(zhǔn)備simpapp例子之前,系統(tǒng)中必須安裝了BEA Tuxedo軟件,而且要設(shè)置環(huán)境變量,NT平臺(tái)下為%TUXDIR%,并把%TUXDIR%in加到PATH中,最后還要確保你的工作目錄要有寫權(quán)限。完成這些工作后,請(qǐng)按如下步驟來準(zhǔn)備simpapp程序: 復(fù)制simpapp所需要的所有文件,它們位于/samples/atmi/simpapp目錄下; 檢查并編譯客戶程序; 檢查并編譯服務(wù)程序; 編輯并加載配置文件; 啟動(dòng)應(yīng)用程序; 執(zhí)行運(yùn)行時(shí)應(yīng)用程序; 監(jiān)視運(yùn)行時(shí)應(yīng)用程序; 關(guān)閉應(yīng)用程序。完成這個(gè)例子后,你應(yīng)該理解客戶程序和服務(wù)器所執(zhí)行的任務(wù),根據(jù)你的環(huán)境編寫一個(gè)配置文件,通過tmadmin檢查應(yīng)用程序的活動(dòng)。同時(shí),你應(yīng)該理解BEA Tuxedo應(yīng)用程序的基本組成部分:客戶程序、服務(wù)器程序、配置文件,通過BEA Tuxedo系統(tǒng)的哪些命令來管理你的應(yīng)用程序。1復(fù)制simpapp例子的相關(guān)文件 創(chuàng)建目錄:mkdir simpdircd simpdir 設(shè)置并導(dǎo)出環(huán)境變量TUXDIR=BEA Tuxedo系統(tǒng)的根目錄,如UNIX系統(tǒng)下可以設(shè)置為:TUXDIR=/usr/tuxedo,NT系統(tǒng)下可以設(shè)置為: TUXDIR=G:Program FilesBEA SystemTuxedoTUXCONFIG=當(dāng)前工作目錄加上/tuxconfig,如UNIX系統(tǒng)下可以設(shè)置為: TUXCONFIG=/usr/me/simpdir/tuxconfig,NT系統(tǒng)下可以設(shè)置為: TUXCONFIG=G:simpdirtuxconfigPATH=:/binLD_LIBRARY_PATH=:/libexport TUXDIR TUXCONFIG PATH LD_LIBRARY_PATHTUXDIR和PATH用于訪問BEA Tuxedo系統(tǒng)的文件和執(zhí)行命令,在Sun Solaris系統(tǒng)中,必須把/usr/5bin放在PATH中的第一個(gè),在RS6000中的AIX上,將LD_LIBRARY_PATH替換成LIBPATH,在HP9000中的HP-UX上,將LD_LIBRARY_PATH替換為SHLIB_PATH。設(shè)置TUXCONFIG的目的是用于加載配置文件。 復(fù)制simpapp文件,cp /samples/atmi/simpapp/* . 查看文件README env simpapp.nt ubbmp wsimpclREADME.as400 setenv.cmd simpcl.c ubbsimpleREADME.nt simpapp.mk simpserv.c ubbws文件說明:simpcl.c客戶程序的源代碼simpserv.c服務(wù)程序的源代碼ubbsimple應(yīng)用程序配置文件的純文本形式2檢查并編譯客戶程序 檢查客戶程序simpcl.c#include #include atmi.h /* TUXEDO的頭文件 */#if defined(_STDC_) | defined(_cplusplus)main(int argc, char *argv)#elsemain(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); /* 作為一個(gè)客戶過程連接到System/T */ if (tpinit(TPINIT *) NULL) = -1) (void) fprintf(stderr, Tpinit failed ); exit(1); sendlen = strlen(argv1); /* 分配一個(gè)供請(qǐng)求響應(yīng)使用的STRING 緩沖區(qū) */ 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, argv1); /* Request the service TOUPPER, waiting for a reply */ ret = tpcall(TOUPPER, (char *)sendbuf, 0, (char *)&rcvbuf, &rcvlen, (long)0); if(ret = -1) (void) fprintf(stderr, Cant 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); /* Free Buffers & Detach from System/T */ tpfree(sendbuf); tpfree(rcvbuf); tpterm(); return(0);說明:語句說明atmi.h調(diào)用ATMI函數(shù)必須的頭文件tpinit()客戶程序調(diào)用它來加入應(yīng)用程序tpalloc()用于分配類型緩沖區(qū)的ATMI函數(shù),STRING是五種BEA Tuxedo緩沖區(qū)數(shù)據(jù)類型之一,sendlen+1表示緩沖區(qū)類型,因?yàn)橐钥兆址Y(jié)尾,所以長度加1tpcall()把消息緩沖區(qū)送到TOUPPER服務(wù),它提供了響應(yīng)緩沖區(qū)的地址,它一直等待著返回消息tpterm()用于退出應(yīng)用程序的ATMI函數(shù),tpfree()釋放分配的緩沖區(qū),是和tpalloc()相對(duì)應(yīng)的函數(shù) 編譯客戶程序-o simpcl -f simpcl.c -o指明輸出目標(biāo)文件名,-f指出源文件名3檢查并編譯服務(wù)程序 檢查服務(wù)程序simpserv.c#include #include #include /* TUXEDO Header File */#include /* TUXEDO Header File */* 當(dāng)服務(wù)器啟動(dòng)時(shí),在處理請(qǐng)求之前,tpsvrinit被執(zhí)行,這個(gè)不是必須的,對(duì)應(yīng)的函數(shù)是shutdown*/#if defined(_STDC_) | defined(_cplusplus)tpsvrinit(int argc, char *argv)#elsetpsvrinit(argc, argv)int argc;char *argv;#endif /* 當(dāng)argc, argv沒有被使用時(shí),一些系統(tǒng)會(huì)發(fā)了警告 */ argc = argc; argv = argv; /* userlog用于將TUXEDO消息寫到日志文件中 */ userlog(Welcome to the simple server); return(0);/* TOUPPER真正處理客戶請(qǐng)求,它接收的參數(shù)是一個(gè)緩沖區(qū)指針 */#ifdef _cplusplusextern C#endifvoid#if defined(_STDC_) | defined(_cplusplus)TOUPPER(TPSVCINFO *rqst)#elseTOUPPER(rqst)TPSVCINFO *rqst;#endif int i; for(i = 0; i len-1; i+) rqst-datai = toupper(rqst-datai); /* 返回轉(zhuǎn)換后的類型緩沖區(qū) */ tpreturn(TPSUCCESS, 0, rqst-data, 0L, 0); 說明:語句說明whole file整個(gè)服務(wù)程序不提供main函數(shù),在build時(shí),由BEA Tuxedo系統(tǒng)提供。tpsvrinit()在服務(wù)器初始化即處理請(qǐng)求之前被調(diào)用。若沒有提供該函數(shù),BEA Tuxedo系統(tǒng)會(huì)提供一個(gè)缺省的,它向USERLOG中寫一條消息,說明服務(wù)器已經(jīng)被啟動(dòng)。userlog(3c)是系統(tǒng)提供的一個(gè)寫日志的方法。TOUPPER()simpserv提供的唯一一個(gè)服務(wù),它接收一個(gè)TPSVCINFO結(jié)構(gòu),它包含了要被轉(zhuǎn)換成大寫的字符串。for loopBEA Tuxedo系統(tǒng)的循環(huán),用于逐一轉(zhuǎn)換。tpreturn() 編譯服務(wù)器?o simpserv ?f simpserv.c ?s TOUPPER?s TOUPPER指明了在服務(wù)器啟動(dòng)時(shí)需要提供的服務(wù)4編輯并加配置文件 怎樣編輯配置文件#ident (#) apps/simpapp/ubbsimple : 1.1.10.1 quot;#Skeleton UBBCONFIG file for the TUXEDO Simple Application.# 將里而的內(nèi)容替換成實(shí)際值.*RESOURCESIPCKEY #Example:#IPCKEY 123456DOMAINID simpappMASTER simpleMAXACCESSERS 10MAXSERVERS 5MAXSERVICES 10MODEL SHM*MACHINESDEFAULT: APPDIR= TUXCONFIG= TUXDIR=#Example:# APPDIR=/home/me/simpapp# TUXCONFIG=/home/me/simpapp/tuxconfig# TUXDIR=/usr/tuxedo# 對(duì)于NT平臺(tái),可以替換成如下值# APPDIR=G:JQEJBsimpapp# TUXCONFIG=G:JQEJBsimpapp uxconfig# TUXDIR=G:Program FilesBEA SystemTuxedo LMID=simple#Example:#JQ LMID=simple*GROUPSGROUP1 LMID=simple GRPNO=1 OPENINFO=NONE*SERVERSDEFAULT: CLOPT=-Asimpserv SRVGRP=GROUP1 SRVID=1*SERVICESTOUPPER 加載配置文件ubbsimpleInitialize TUXCONFIG file: /usr/me/simpdir/tuxconfig y, q ? y502/span5啟動(dòng)應(yīng)用程序 執(zhí)行tmboot啟動(dòng)應(yīng)用程序Boot all admin and server processes? (y/n): yBooting all admin and server processes in/usr/me/simpdir/tuxconfigBooting all admin processes .exec BBL -A:process id=24223 . Started.Booting server processes .exec simpserv -A :process id=24257 . Started.2 processes started.BBL是應(yīng)用程序中監(jiān)視共享內(nèi)存結(jié)構(gòu)的管理進(jìn)程,simpserv是連續(xù)運(yùn)行的simpapp服務(wù)程序,它等待著處理請(qǐng)求。6如何執(zhí)行運(yùn)行時(shí)應(yīng)用程序“hello, world”Returned string is: HELLO, WORLD7如何監(jiān)視運(yùn)行時(shí)應(yīng)用程序 作為管理者,你可以使用tmadmin命令解釋器來檢測(cè)一個(gè)應(yīng)用程序,并作一些動(dòng)態(tài)的改變,要運(yùn)行該命令,你必須設(shè)置TUXCONFIG環(huán)境變量。tmadmin可以解釋超過50個(gè)命令,要看完整的列表,請(qǐng)看tmadmin(1),這里我們使用了兩個(gè)tadmin命令。 輸入如一命令: 顯示:tmadmin - Copyright (c) 1999 BEA Systems, Inc. All rightsreserved. 輸入printserver(psr)命令,顯示: psra.out Name Queue Name Grp Name ID RqDone Load Done Current Service- - - - - - -BBL 531993 simple 0 0 0 ( IDLE )simpserv 00001.00001 GROUP1 1 0 0 ( IDLE ) 輸入printservice(psc)命令,顯示:Service Name Routine Name a.out Name Grp Name ID Machine # Done Status- - - - - - - - -TOUPPER TOUPPER simpserv GROUP1 1 simple - AVAIL8如何關(guān)閉應(yīng)用程序 運(yùn)行tmshutdown命令來關(guān)閉應(yīng)用程序Shutdown all admin and server processes? (y/n): yShutting down all admin and server processes in/usr/me/simpdir/tuxconfigShutting down server processes .Server Id = 1 Group Id = GROUP1 Machine = simple: shutdownsucceeded.Shutting down admin processes .Server Id = 0 Group Id = simple Machine = simple: shutdownsucceeded.2 processes stopped.502/span 檢查ULOG文件ULOG*502/span113837.tuxmach!tmloadcf.10261: CMDTUX_CAT:879: A new file systemhas been created. (size = 32 4096-byte blocks)113842.tuxmach!tmloadcf.10261: CMDTUX_CAT:871: TUXCONFIG file/usr/me/simpdir/tuxconfig has been created113908.tuxmach!BBL.10768: LIBTUX_CAT:262: std main starting113913.tuxmach!simpserv.10925: LIBTUX_CAT:262: std main starting113913.tuxmach!simpserv.10925: Welcome to the simple server114009.tuxmach!simpserv.10925: LIBTUX_CAT:522: Defaulttpsvrdone() function used.114012.tuxmach!BBL.10768: CMDTUX_CAT:26: Exiting system第三章 一個(gè)完整的Tuxedo應(yīng)用程序bankappbankapp是BEA Tuxedo系統(tǒng)提供一個(gè)簡單的銀行應(yīng)用程序,它完成如下功能:打開和關(guān)閉賬號(hào),查詢賬號(hào)余額,存款和取款,賬號(hào)之間轉(zhuǎn)賬。3.1 熟悉bankapp的文件BEA Tuxedo系統(tǒng)提供了一個(gè)演示數(shù)據(jù)庫,bankapp例子中有很多個(gè)地方使用了命令和SQL代碼來訪問它。bankapp由如下文件組成:源文件生成的文件內(nèi)容說明ACCT.ec ACCT.c, ACCT.o,ACCT包括兩個(gè)服務(wù):OPEN_ACCT和CLOSE_ACCT 用于打開和關(guān)閉賬號(hào)ACCTMGR.c ACCTMGR訂閱事件和記錄通告日志的服務(wù)器,包含: WATCHDOG 和 Q_OPENACCT_LOG 服務(wù)AUDITC.cAUDITC包括一個(gè)會(huì)話服務(wù)器處理來自客戶端auditcon的請(qǐng)求BAL.ecBAL.c, BAL.o, BAL包括一組服務(wù):ABAL, TBAL, ABAL_BID, 和TBAL_BID 允許audit客戶獲得銀行或支行賬號(hào)以及余額BALC.ecBALC.c, BALC.o,BALC 包括兩個(gè)服務(wù):ABALC_BID和TBALC_BID。這些服務(wù)和TBAL_BID,ABAL_BID是一樣的。bankmgr.cbankmgr訂閱特定事件客客戶程序cracl.sh-用于創(chuàng)建訪問控制列表ACL以演示ACL安全的shell腳本crqueue.sh-notification.用于創(chuàng)建應(yīng)用程序隊(duì)列以供事件通告使用的shell腳本crusers.sh-創(chuàng)建用戶和組以演示驗(yàn)證安全級(jí)別的shell腳本event.flds-在事件特征中用到的字段表文件FILES -bankapp用到的所有文件列表README-在除NT以外的所有平臺(tái)上安裝指南README.nt-NT平臺(tái)上的安裝指南README2-在bankapp中演示新特性的自述文件README2.nt-在NT平臺(tái)上演示新特性自述文件RUNME.cmd-在NT平臺(tái)上創(chuàng)建、配置、啟動(dòng)、關(guān)閉應(yīng)用程序的交互式腳本RUNME.sh-UNIX平臺(tái)下的腳本文件,功能同上showq.sh!-顯示消息隊(duì)列的狀態(tài)和內(nèi)容的shell腳本TLR.ecTLR.c, TLR.o, TLR包含三個(gè)服務(wù):WITHDRAWAL, DEPOSIT和INQUIRYusrevtf.sh-創(chuàng)建供TMUSREVT服務(wù)器使用的ENVFILE文件XFER.cXFER.o, XFER包括TRANSFER服務(wù)aud.vaud.V, aud.h一個(gè)在audit 客戶和BAL服務(wù)器之間使用的FML view appinit.cappinit.o包含供所有服務(wù)器(除TLR以外)使用的用戶自定義版的tpsvrinit()和tpsvrdown()audit.caudit.o, audit通過ABAL, TBAL, ABAL_BID和TBAL_BID 服務(wù)獲得銀行及支行賬號(hào)和余余額的客戶程序auditcon.cauditconaudit的交互式版本,使用ABAL, TBAL, ABALC_BID和TBALC_BID.服務(wù)bankapp.mk-UNIX下應(yīng)用程序Make文件bankapp.nt-NT平臺(tái)下應(yīng)用程序的Make文件bank.fldsbank.flds.h由服務(wù)器使用,包含銀行數(shù)據(jù)庫和輔助FML字段文件bank.h-bankapp應(yīng)用程序的頭文件bankvar-包括bankapp使用的環(huán)境變量,其它環(huán)境變量在ENVFILE中定義,后者被前者調(diào)用crbank.shcrbank為bankapp在SHM模式下運(yùn)行時(shí)創(chuàng)建數(shù)據(jù)的shell腳本crbankdb.shcrbankdb為一個(gè)服務(wù)器組創(chuàng)建數(shù)據(jù)庫的shell腳本crtlog.shcrtlog, TLOG在master站和non-master站的UDL上創(chuàng)建UDL和TLOG的shell腳本driver.shdriver通過FML緩沖區(qū)驅(qū)動(dòng)應(yīng)用程序的shell腳本envfile.shenvfile, ENVFILE創(chuàng)建供tmloadcf使用的ENVFILE文件的shell腳本gendata.cgendata生成10個(gè)支行,30個(gè)出納員及200個(gè)賬號(hào)的程序gentran.cgentran從DEPOSIT, WITHDRAWAL, TRANSFER和INQUIRY.生成事務(wù)請(qǐng)求的程序populate.shpopulate通過FML緩沖區(qū)向數(shù)據(jù)庫中插入支行、出納員、和賬號(hào)信息的shell腳本ubbmpTUXCONFIG在MP-mode下使用的UBBCONFIG文件ubbshmTUXCONFIG在SHM-mode下使用的UBBCONFIG文件util.cutil.o包含一組由服務(wù)使用的函數(shù),如getstr1()等bankclt.cbankcltbankapp的客戶程序3.2 檢查bankapp的客戶程序1bankclt.c文件 它是一個(gè)基于文本的客戶,提供了:余額查詢、取款、存款、轉(zhuǎn)賬、打開賬號(hào)、關(guān)閉、號(hào)、退出程序等幾大功能。除退出應(yīng)用程序以外,每一個(gè)選項(xiàng)都調(diào)用了一個(gè)執(zhí)行如下功能的例程: 通過get_account(), get_amount(), get_socsec(), get_phone(), get_val()函數(shù)從鍵盤獲得用戶輸入。 將值存入一個(gè)全局的FML緩沖區(qū)(*fbfr),有些函數(shù)需要更多的字段,需要根據(jù)服務(wù)器所需的信息來確定。 通話通過do_tpcall()函數(shù)調(diào)用BEA Tuxedo系統(tǒng)服務(wù),下面列出了一些函數(shù)和服務(wù)。函數(shù)名輸入FML字段輸出 FML字段服務(wù)名稱BALANCE()ACCOUNT_IDSBALANCE INQUIRYWITHDRAWAL()ACCOUNT_ID SAMOUNTSBALANCEWITHDRAWALDEPOSIT() ACCOUNT_ID SAMOUNTSBALANCE DEPOSITTRANSFER() ACCOUNT_ID (0) ACCOUNT_ID (1) SAMOUNTSBALANCE (0) SBALANCE (1)TRANSFEROPEN_ACCT() LAST_NAME FIRST_NAME MID_INIT SSN ADDRESS PHONE ACCT_TYPE BRANCH_ID SAMOUNTACCOUNT_ID SBALANCEOPEN_ACCTCLOSE_ACCT() ACCOUNT_IDSBALANCECLOSE_ACCT 調(diào)用成功完成后,每個(gè)函數(shù)可以從返回的FML緩沖區(qū)中取得需要的數(shù)據(jù)do_tpcall()函數(shù)的代碼如下:static int do_tpcall(char *service)long len;char *server_status;/* 開始一個(gè)全局事務(wù) */if (tpbegin(30, 0) = -1) (void)fprintf(stderr, ERROR: tpbegin failed (%s) ,tpstrerror(tperrno);return(-1);/* 使用用戶數(shù)據(jù)請(qǐng)求服務(wù) */if (tpcall(service, (char *)fbfr, 0, (char *)&fbfr, &len,0) = -1) if(tperrno= TPESVCFAIL & fbfr != NULL &(server_status=Ffind(fbfr,STATLIN,0,0) != 0) (void)fprintf(stderr, %s returns failure (%s) , service,server_status);else (void)fprintf(stderr,ERROR: %s failed (%s) , service, tpstrerror(tperrno);/* 終止事務(wù)*/(void) tpabort(0);return(-1);/* 提交事務(wù) */if(tpcommit(0) 0) (void)fprintf(stderr, ERROR: tpcommit failed (%s) ,tpstrerror(tperrno);return(-1);return(0);2bankapp中怎樣使用ud(1)bankapp使用到了Tuxedo系統(tǒng)的ud(1)程序,它允許數(shù)據(jù)從標(biāo)準(zhǔn)輸入讀取,并送到服務(wù)。populate和driver例程都用到了ud。在populate中,一個(gè)叫g(shù)endata的程序把服務(wù)請(qǐng)求以及要輸入數(shù)據(jù)庫的客戶帳號(hào)信息一起傳給了ud。在driver中也存在類似的數(shù)據(jù)流,但程序是gentran,它的作用是把事務(wù)傳遞給應(yīng)用程序以模擬一個(gè)活動(dòng)系統(tǒng)。3一個(gè)請(qǐng)求/響應(yīng)客戶:audio.caudit中一個(gè)請(qǐng)求/響應(yīng)客戶程序,用于支行或全行范圍內(nèi)的余額查詢,它用到ABAL、TBAL、ABAL_BID、TBAL_BID服務(wù),你可以通過如下兩種方法來激活它:audit -a|-t,-a打印全行所有賬號(hào)總額,-t打印全行范圍內(nèi)所有出納員的現(xiàn)金供應(yīng)。audit -a|-t branch_ID,打印某支行Branch_ID的上述信息。audit源代碼包括兩個(gè)主要部分:main()和sum_bal()子程序。兩部分都用到了ATMI函數(shù),它用到了一個(gè)在aud.h頭文件中定義的VIEW類型的緩沖區(qū),如下它的偽碼:main()Parse command-line options with getopt();Join

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論