TUEDO的客戶端編程_第1頁(yè)
TUEDO的客戶端編程_第2頁(yè)
TUEDO的客戶端編程_第3頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第七章:TUXEDO勺客戶端編程7.1 Tuxedo的客戶端簡(jiǎn)介:tuxedo有兩種客戶端:本地客戶端和遠(yuǎn)程客戶端。NATIVE CLIENT(本地客戶端):是指與TUXEDO艮務(wù)器在同一臺(tái)機(jī)器上,不用通過(guò)網(wǎng)絡(luò)就可以訪問(wèn)到TUXEDO艮務(wù)器的客戶端 。WORSTATION CLIENT本地客戶端):是指要通過(guò)網(wǎng)絡(luò)才可以訪問(wèn)到TUXEDO艮務(wù)器的客戶端。F圖為TUXEDOS用系統(tǒng)的客戶端訪問(wèn) TUXEDO艮務(wù)器上的服務(wù)的過(guò)程圖。BEA Tuxedo Application Site 1UNIX WorkstationJr日吐NativeBRIDGEBBLBufletin BoardBRIDGEN

2、ative ClierrtBulletinBoardServer 1Site 2DBBLServer 2說(shuō)明:WS( Workstation Extension Product)用于指TUXEDO產(chǎn)品的客戶端部分WSCWorkstatio n Clie ntWSL( Workstatio n Liste ner)TUXED系統(tǒng)自帶的一個(gè) SERVER它偵聽(tīng)一個(gè)指定的端口,WS(最初與該 SERVER建立連接WSH( Workstation Handler )TUXED(系統(tǒng)自帶的一個(gè) SERVER由它處理 WSC與 TUXEDO SERVE之間的通訊。Bulletin Board (公告板)T

3、UXEDOE系統(tǒng)的配置保存在一個(gè)共享內(nèi)存中,該共享內(nèi)存稱為公告板(BB)BBLTUXED劭管理進(jìn)程,主要對(duì)公告板等進(jìn)行管理Workstation Client與 TUXEDO SERVE建立連接的過(guò)程為:1. WSC調(diào)用 tpinit() 或 tpchkauth()2. WSC采用在WSNADD中指定的IP地址與服務(wù)端的 WSL建立連接3. WSL為該WSC旨定一個(gè)WSH并把該WSH的偵聽(tīng)端口返回給 WSC4. WS(采用返回的端口與指定的WSHt立連接,并與 WSL斷開(kāi)連接,這之后 WS(與 TUXEDO SERVER之間的通訊通過(guò) WSHS行處理,與 WSL無(wú)關(guān)。5. tpinit() 或

4、 tpchkauth() 調(diào)用返回。本地客戶端與遠(yuǎn)程客戶端的主要區(qū)別1. 本地客戶端只能用 C語(yǔ)言或COBALT言編寫,遠(yuǎn)程客戶端可以用幾乎所有的編程語(yǔ)言編 寫。2. 在遠(yuǎn)程客戶端所在的機(jī)器上要安裝TUXEDO勺客戶端軟件,并且在設(shè)置相應(yīng)的環(huán)境變量;在本地客戶端上不用3. 用buildclient編譯遠(yuǎn)程客戶端程序時(shí)要加-W編譯本地客戶端則不用與遠(yuǎn)程客戶端有關(guān)的配置:1. 在MACHINE中要配置MAXWSCLIENTS即最多可以有多少個(gè)遠(yuǎn)程客戶端同時(shí)連接 到該服務(wù)器上。2. 在 SERVER中要配置 SERVER WSL WSL SRVGRP="GROUP1" SRVID

5、=1116CLOPT中可帶的參數(shù)為:CLOPT=" -A servopts_options - -n netaddr -d device -w WSHname-t timeout_factor-T Client_timeout -m minh-M maxh-x mpx_factor -p minwshport-P maxwshport -I init_timeout-c compression_threshold -k compression_threshold -z bits-Z bits-H external_netaddr -N network_timeout-Kclient|

6、handler|both|none"參數(shù)說(shuō)明:-n netaddr: WSL 的偵聽(tīng)端口,遠(yuǎn)程客戶端通過(guò)該端口與服務(wù)器建立連接-m mi nh :最少啟動(dòng)多少個(gè) WSHS程-M maxh:最多啟動(dòng)多少個(gè) WSH進(jìn)程,默認(rèn)值為 MAXWSCLIENTS/m-x mpx_factor :每個(gè) WSH進(jìn)程可以同時(shí)與多少個(gè)遠(yuǎn)程客戶端建立連接-c compressi onthreshold如果在遠(yuǎn)程客戶端與服務(wù)器之間傳送的數(shù)據(jù)包大?。▎挝粸樽止?jié))超過(guò)-c指定的參數(shù),就自動(dòng)進(jìn)行數(shù)據(jù)壓縮,-T Client_timeout : 指定一個(gè)遠(yuǎn)程客戶端的空閑時(shí)間,如果該遠(yuǎn)程客戶端在 clie nt_ti

7、meout 這么長(zhǎng)的時(shí)間內(nèi)沒(méi)有做任何調(diào)用, WSH將斷開(kāi)與該遠(yuǎn)程客戶端的連接。單位 為分鐘,如果沒(méi)有指點(diǎn)該參數(shù),那么 WSH永遠(yuǎn)不會(huì)自動(dòng)斷開(kāi)遠(yuǎn)程客戶端的連接-t timeout_factor:指定遠(yuǎn)程客戶端與 WSH建立連接的時(shí)間,如果在 -t指定的時(shí)間內(nèi)還沒(méi)有建立連接,那么連接將失敗。如果沒(méi)有采用安全認(rèn)證方式默認(rèn)為3*SCANUNIT秒,。如果采用安全認(rèn)證方式默認(rèn)為6*SCANUNIT秒,-p minwshport-P maxwshport :指定 WSH可以使用的端口范圍:如果遠(yuǎn)程客戶端要跨越防火墻才能訪問(wèn)該TUXEDO應(yīng)用系統(tǒng),在WSL中要指定該參數(shù),指定WSH可以使用的端口范圍,并讓防

8、火墻允許訪問(wèn)這些端口。如果不指定,TUXEDOS根據(jù)系統(tǒng)端口的使用情況進(jìn)行分配,而分配的端口防火墻不允許通過(guò),造成CLIENT無(wú)法調(diào)用TUXEDOSERVER如下面的設(shè)置指定 WSH可用的端口范圍為 17010 - 17030。WSL SRVGRP=GROUP1SRVID=1CLOPT="-A - -n 133.101626:17009 -m 10 -M 10 -x 10 -p 17010 -P 17030"在遠(yuǎn)程客戶端的機(jī)器上要設(shè)置的環(huán)境變量TUXDIR (必需):TUXEDO?戶端在該機(jī)器上的安裝目錄WSNADDR必需):遠(yuǎn)程客戶端通過(guò)該 IP地址與服務(wù)器建立連接,它的

9、值為-n參數(shù)的值,如在上面的配置中為:SET WSNADDR= WSTYP(可選):該客戶端的類型,如果與服務(wù)器的類型一樣,那么在它們之間進(jìn)行數(shù)據(jù) 傳送時(shí)不用進(jìn)行編碼解碼工作。其他不常用的環(huán)境變量可參考TUXEDOS聯(lián)機(jī)文檔??蛻舳说木幊棠J? 在 3 層結(jié)構(gòu)中, CLIENT 是屬與表示層,表示層主要處理與用戶交互,它的功能可概括為:加入響應(yīng)|1、提供應(yīng)用的用戶交互接口,即主要通過(guò)圖形化的用戶界面,取的用戶的輸入數(shù)據(jù)2、與TUXEDO應(yīng)用服務(wù)器建立連接3、調(diào)用TUXEDOS用服務(wù)器上的服務(wù)(SERVICE,把客戶端的輸入?yún)?shù)放入輸出緩沖區(qū)。4、TUXEDO用服務(wù)器調(diào)用相應(yīng)的 SERVICE處

10、理客戶端的請(qǐng)求,把處理結(jié)果通過(guò)客戶端的輸 入緩沖區(qū)返回給客戶端??蛻舳伺c服務(wù)端之間的通訊方式有以下幾種:1、同步調(diào)用:2、異步調(diào)用3、會(huì)話方式:4、可靠消息隊(duì)列5、廣播方式6、發(fā)布 / 訂閱在下一章我們?cè)倬唧w介紹7.2 CLIENT 的 ATMI 介紹客戶端通過(guò)調(diào)用 TUXEDOS供的編程 API ( ATMI)來(lái)編寫程序,下面介紹一些客戶端主要的ATMI與連接的建立與斷開(kāi)有關(guān)的 ATMI為了與 TUXEDO SERVE建立連接,TUXEDO CLIENT要調(diào)用 TPCHKAUTH檢查該 TUXEDO SERVER 所采用的安全方式,并根據(jù)得到的值做相應(yīng)的處理,然后調(diào)用TPINIT()建立與T

11、UXED(的連接,在TUXEOD SERVE的結(jié)果返回之后,調(diào)用TPTERM(斷開(kāi)與 TUXEDO SERVE的連接 int tpchkauth()描述:檢查該TUXEDO SERVE所采用的安全方式參數(shù) : 無(wú)返回值:TPNOAUTH: 不需要認(rèn)證TPSYSAUTH: 需要口令認(rèn)證TPAPPSUTH: 需要口令認(rèn)證 , 并且還需要應(yīng)用級(jí)的認(rèn)證或授權(quán) -1: 調(diào)用失敗 , 錯(cuò)誤號(hào)保存在全局變量 tperrno 中。int tpinit(TPINIT *tpinfo)描述:與TUXEDO SERVE建立連接參數(shù) :TPINFO返回值 : 失敗返回 -1, 錯(cuò)誤號(hào)保存在全局變量 tperrno 中

12、。TPINIT結(jié)構(gòu)體在atmi.h 中的定義如下struct tpinfo_t charusrnameMAXTIDENT+2;/* client user name */char cltnameMAXTIDENT+2; /* application client name */charpasswdMAXTIDENT+2;/* application password */char grpnameMAXTIDENT+2; /* client group name */longflags;/* initialization flags */longdatalen;/* length of app

13、specific data */longdata;/* placeholder for app data */; typedef struct tpinfo_t TPINIT;說(shuō)明 :username,cltname,passwd,grpname,data,datalen 用于安全認(rèn)證中flags:用于定義以何種方式通知該客戶端一個(gè)UNSOLICTED MESSAGE來(lái).它的值可以為TPU-SIG TPU-DIP TPU-IGNTPSA-FASTPATHTPSA-PROTECTED int tpterm()描述:斷開(kāi)與TUXEDO SERVE建立連接參數(shù) : 無(wú) 返回值 : 失敗返回 -1,

14、錯(cuò)誤號(hào)保存在全局變量 tperrno 中。與請(qǐng)求TUXEDO SERVE有關(guān)的ATMIint tpcall(char *svc, char *idata, long ilen, char *odata, long *olen, long flags)描述:客戶端同步調(diào)用服務(wù)端的名為 svc 的 SERVICE, 參數(shù):*svc : SERVICE的名稱char *idata : 輸入緩沖區(qū)的地址,客戶端傳給服務(wù)端的參數(shù)放在該緩沖區(qū)內(nèi)long ilen :輸入緩沖區(qū)的長(zhǎng)度char *odata輸出緩沖區(qū)的地址,服務(wù)端傳給客戶端的結(jié)果放在該緩沖區(qū)內(nèi)long *olen :輸出緩沖區(qū)的長(zhǎng)度long

15、flags :調(diào)用標(biāo)志,由以下幾個(gè):TPNOTRAN如果調(diào)用svc的客戶端當(dāng)前在 TRANSACTIO方式下,那么 svc不參與當(dāng)前的TRANSACTIONTPNOCHANGE如果服務(wù)端返回的緩沖區(qū)類型與客戶端定義的緩沖區(qū)(odata) 類型不一致,默認(rèn)情況下,odata會(huì)轉(zhuǎn)換成與服務(wù)端返回的緩沖區(qū)類型一致的類型,如果設(shè)置了該FLAG那么當(dāng)出現(xiàn)這種情況時(shí),不進(jìn)行緩沖區(qū)類型轉(zhuǎn)換,并且會(huì)保錯(cuò)。TPNOBLOCK默認(rèn)情況下,如果客戶端有阻塞條件存在(如 CLIENT的TCP/IP中的緩沖區(qū)滿,磁盤I/O忙 等),那么客戶端會(huì)阻塞在那里,直到阻塞消除或超時(shí)出錯(cuò)。如果設(shè)置了TPNOBLOC當(dāng)客戶端有阻塞

16、條件存在時(shí),TPCALL()會(huì)立刻返回并報(bào)錯(cuò).注意TPNOBLOC只對(duì)發(fā)送請(qǐng)求時(shí)起作用 如果在接收服務(wù)端返回的結(jié)果時(shí)有阻塞條件存在 ,客戶端會(huì)在那里等待 ,直到阻塞消除或超 時(shí)出錯(cuò)TPNOTIME如果客戶端有阻塞條件存在, 客戶端會(huì)一直阻塞在那里, 即使到了超時(shí)時(shí)間也不返回, 但如 果該客戶端是在 TRANSACTIO模式下,當(dāng)?shù)搅?事務(wù)的超時(shí)時(shí)間,還是會(huì)報(bào)超時(shí)錯(cuò)誤并返回。TPSIGRSTRT 如果在進(jìn)行系統(tǒng)調(diào)用時(shí),被信號(hào)中斷,該系統(tǒng)調(diào)用會(huì)重新進(jìn)行。調(diào)用成功返回 0, 失敗返回 -1, 錯(cuò)誤號(hào)保存在全局變量 tperrno 中。int tpacall(char *svc, char *data

17、, long len, long flags)描述:客戶端異步調(diào)用服務(wù)端的名為SVC的SERVICE不等服務(wù)端返回結(jié)果,程序可繼續(xù)往下走 , 在某個(gè)地方調(diào)用 tpgetrply() 取的服務(wù)端的返回參數(shù) :Char *SVC, Char *data, long len參數(shù)的含義與 tpCall() 中的一樣flagS 可設(shè)置為: TPNOTRAN, TPNOREPLY, TPNOBLOCKTPNOTIME, TPSIGRSTRT.TPNOTRAN, TPNOBLOCKTPNOTIME, TPSIGRS的RT義與與 tpcall() 中的一樣TPNOREPLY調(diào)用tpacall()的客戶端不想接

18、收 SEVE端的應(yīng)答。如果設(shè)置了TPNOREPLY服務(wù)端不會(huì)給該客戶端發(fā)送應(yīng)答。返回值:失敗返回-1,成功返回一個(gè) HANDLER可作為tpgetrply 的參數(shù),用于取應(yīng)答int tpgetrply(int * 描述:取出服務(wù)端對(duì) 參數(shù) : cd tpacall char *data long *lencd, char *data, long * len , long flags )tpacall ()的應(yīng)答。()返回的 HANDLER 返回緩沖區(qū)的地址,服務(wù)端傳給客戶端的結(jié)果放在該緩沖區(qū)內(nèi) :返回緩沖區(qū)的長(zhǎng)度f(wàn)lags :可以是:TPNOBLOCKTPNOTIME,TPSIGRSTRTTP

19、GETANY不管 cd 的值,從服務(wù) 器的應(yīng)答隊(duì)列中取第一個(gè)可用的消息 ), TPNOCHANGE返回值 : 失敗返回 -1 ,錯(cuò)誤號(hào)保存在全局變量 tperrno 中。int tpcancel(int handle)描述 : 如果當(dāng)前的程序不處于事務(wù)模式中 , 取消對(duì) tpacall ()的應(yīng)答 , 如果處于事務(wù)模式 中,則不能取消對(duì) tpacall ()的應(yīng)答 ,該調(diào)用會(huì)失敗 .參數(shù) : tpacall ()返回的 HANDLER返回值 : 失敗返回 -1 ,錯(cuò)誤號(hào)保存在全局變量 tperrno 中。int tpgprio()描述 : 返回最近發(fā)送 (tpcall(),tpacall()或

20、接收 (tpgetrply() 的一個(gè)消息的優(yōu)先級(jí)參數(shù) : 無(wú)返回值: 1-100 消息的優(yōu)先級(jí) ,值越高 , 優(yōu)先級(jí)越高失敗返回 -1, 錯(cuò)誤號(hào)保存在全局變量 tperrno 中。struct int hdl; /* handle*/int pr; /* priority*/ paSIZE;for (i=0; i<requests; i+) /* Determine serVice and data for request */pa i.hdl = tpacall(SVc, buf, len, flags);/* SaVe priority used to send request *

21、/pai.pr = tpgprio();/* Use qsort(3) routine to sort handles in priority order */ qsort(char*) pa, requests, sizeof(pa0), cmpfcn);for (i=0; i< requests; i+) tpgetrply(&pai.hdl, &rbufp, &rlen, rflags);int tpsprio (int prio, long flags)描述 : 設(shè)置下一個(gè)要發(fā)送的消息的優(yōu)先級(jí)prio參數(shù) : 0- prio 為相對(duì)值 , 設(shè)置下一個(gè)要發(fā)送

22、的消息的優(yōu)先級(jí)為現(xiàn)在的優(yōu)先級(jí)加上 TPABSOLUTE: prio 為絕對(duì)值 , 設(shè)置下一個(gè)要發(fā)送的消息的優(yōu)先級(jí)為 prio 返回值 : 失敗返回 -1 ,錯(cuò)誤號(hào)保存在全局變量 tperrno 中。與請(qǐng)求錯(cuò)誤處理有關(guān)的 ATMIchar *tpstrerror(int tperrno)描述 : 返回錯(cuò)誤號(hào)為 tperrno 的錯(cuò)誤描述參數(shù) : tperrno: 在 atmi.h 中定義的全局變量 , 用于標(biāo)識(shí)錯(cuò)誤號(hào) , 類似于 C 中的 errno 返回值:失敗返回NULL,成功返回錯(cuò)誤號(hào)為tperrno的錯(cuò)誤描述.int tperrordetail(long flags)描述:返回當(dāng)前進(jìn)程或

23、線程最近調(diào)用ATMI的出錯(cuò)的更詳細(xì)的描述參數(shù) : 設(shè)為 0返回值: 如果沒(méi)有錯(cuò)誤返回 0,有錯(cuò)誤返回錯(cuò)誤描述號(hào)char * tpstrerrordetail(interr , long flags )描述 : 返回錯(cuò)誤描述號(hào) err 的詳細(xì)描述信息參數(shù) :err : tperrordetail() 的返回值 ,flags:設(shè)為 0返回值:失敗返回NULL,成功返回詳細(xì)描述信息7.3采用C語(yǔ)言編寫TUXEDOS客戶端程序如果是采用C語(yǔ)言編寫TUXEDOS客戶端程序,可直接采用 ATMI的函數(shù),這些函數(shù)在atmi.h 中定義采用C語(yǔ)言編寫TUXED啲客戶端的例子在此不列舉 ,可參考simpapp,

24、bankapp等例 子采用C語(yǔ)言編寫客戶端的編譯是用buildclient命令進(jìn)行的,它的使用格式如下:buildclient -C -v -w | -r rmname -o outfile -f firstfiles -l lastfiles 參數(shù)說(shuō)明 :-C:編譯用COBOL寫的客戶端-v: 輸出詳細(xì)的編譯信息-w:編譯成REMOTE CLIENT如果不帶該參數(shù),那么將編譯成 NATIVE CLIENT.-o: 編譯生成的可執(zhí)行文件名-f:要編譯的C文件名-l: 指定要編譯生成該可執(zhí)行文件名要連接的其他庫(kù)文件 , 如果有多個(gè)庫(kù)文件要連接 , 它們 之間用空格隔開(kāi) .-r: 指定該CLIEN

25、T要連接的RMbuildclient調(diào)用C或 C+h編譯器來(lái)進(jìn)行編譯工作.所以客戶端所在的機(jī)器要有C,C+編譯器才能編譯C客戶端的程序.如果是 WINDOW客戶端,可安裝VC,并在DOS環(huán)境下編譯C客戶端的程序.如果在安裝 VC時(shí) 沒(méi)有把自動(dòng)設(shè)置環(huán)境變量的選項(xiàng)選上,VC中設(shè)置環(huán)境變量的文件在VC安裝目錄下的binvcvars32.bat中,可手工執(zhí)行它或在設(shè)置環(huán)境變量的文件中用CALL調(diào)用它,如:call d:vs6vc98binvcvars32.batset TUXDIR=d:tuxedo65set APPDIR=d:tuxdemoconnset PATH=%TUXDIR%bin;%APPD

26、IR%;%PATH%set TUXCONFIG=%APPDIR%tuxconfigset FIELDTBLS=%APPDIR%myfmlset FLDTBLDIR=%APPDIR%如果是UNIX客戶端,可安裝CC,GCC等 C或C+編譯器.并在CC環(huán)境變量中設(shè)置所用的 C編 譯器路徑 .7.4采用VC編寫TUXED(客戶端程序采用VC編寫客戶端程序與采用C語(yǔ)言編寫客戶端的方式一樣,但要對(duì)VC要進(jìn)行一些設(shè)置才能進(jìn)行編譯,說(shuō)明如下:1. 在/project/setting/link下的 object/library modules 中加上 wtuxws32.lib ,如圖所示:2.在 tools/

27、options/directories下的 show direcries 中選 include files, 然后加上TUXED啲INCLUDE目錄,如圖所示:3.在 tools/options/directories下的 show direcries 中選 library files, 然后加上TUXEDOS LIB目錄,如圖所示:7.5采用PB編寫客戶端程序1. ATMI 函數(shù)的聲明對(duì)PBVB, DELPH,VC等客戶端,TUXED提供一個(gè) DLL編程接口,該DLL文件名為 wtuxws32.dll, 首先要在這些語(yǔ)言中聲明所要用到的函數(shù)。因?yàn)?PB 中沒(méi)有指針,我們把它們聲明為 LONG

28、 型。如果是雙重指針,可聲明為ref Iong.下面聲明采用PB編寫CLIENT段程序常用到的函 數(shù)function integer tpinit( long tpinfo ) library "wtuxws32.dll"function integer tpterm( ) LIBRARY "wtuxws32.dll"function long tpalloc( string buftype, string subtype, long bufsize ) LIBRARY"wtuxws32.dll"function long lstrc

29、pyPtr( long buffer, string str ) library "kernel32.dll" alias for lstrcpyfunction long lstrcpyStr( ref string str, long buffer ) library "kernel32.dll" alias for lstrcpyfunction integer tpcall(string svcname, long ibuffer , long ilen, ref long obuffer, ref long olen, long flags )

30、 library "wtuxws32.dll" subroutine tpfree( long buffer ) library "wtuxws32.dll"function integer gettperrno( ) library "wtuxws32.dll" function string tpstrerror( integer errno ) library "wtuxws32.dll" function integer tperrordetail( long flag ) library "wt

31、uxws32.dll"functionstringtpstrerrordetail(integererrno,longflag ) library"wtuxws32.dll"functionintegerfchgd32(longfbfr, longfldif,longocc,ref doublebuf, long flen )library "wtuxws32.dll" alias forFchg32functionintegerfchgl32(longfbfr, longfldif,longocc,ref longbuf, long flen

32、 )library "wtuxws32.dll" alias for Fchg32function integer fchgs32( longfbfr, long fldif, long occ, string buf,long flen )library "wtuxws32.dll" alias for Fchg32function integer getFerror32() library "wtuxws32.dll" alias for getFerror32functionstringFstrerror32(integerer

33、rno) library"wtuxws32.dll"aliasforFstrerror32function integerfgets32( longfbfr,longfldid, longocc, ref stringbuf,reflongflen ) library "wtuxws32.dll" alias forFget32function integerfgetd32( longfbfr,longfldid, longocc, ref doublebuf,reflongflen ) library "wtuxws32.dll"

34、alias forFget32function integerfgetl32( longfbfr,longfldid, longocc, ref longbuf,reflongflen ) library "wtuxws32.dll" alias for Fget32function long focc32( long fbfr, long fldid ) library "wtuxws32.dll" alias forFoccur32function long fneeded32( long occ, long len) library "w

35、tuxws32.dll"function long flen32( long fbfr, long id, long occ) library "wtuxws32.dll" alias for Flen32function long fprint32( long fbfr) library "wtuxws32.dll" alias for Fprint32Function Long foccur32(Long RCVBUF,long FLDID ) LIBRARY "wtuxws32.dll" alias for "

36、;Foccur32"Function Long finit32(Long RCVBUF,long BUFSIZE) LIBRARY"wtuxws32.dll" alias for "Finit32"Function Long tprealloc (Long buffer , Long BUFSIZE ) LIBRARY "wtuxws32.dll" function long fsizeof32(long fbfr) library "wtuxws32.dll"function integer tpenq

37、ueue( string qspace,string qname, REFTPQCTLctl, long data, long len, long flags) library "wtuxws32.dll"function integer tpdequeue( string qspace,string qname, REF TPQCTL ctl, REF long data, REF long len, long flags) library "wtuxws32.dll"2. FML(FML32) 緩沖區(qū)的定義在C,C+中FML32緩沖區(qū)中字段的ID在*

38、.H文件中定義,在PB中可以把它們定義為常量3. 編程方式的改變?cè)趦蓪拥腃/S結(jié)構(gòu)中,客戶端直接訪問(wèn)數(shù)據(jù)庫(kù),當(dāng)采用TUXEDO間件后,形成三層結(jié)構(gòu)。這時(shí),客戶端不直接訪問(wèn)數(shù)據(jù)庫(kù),而是改為調(diào)用中間件TUXEDO艮務(wù)端上的服務(wù),由 TUXEDO服務(wù)端訪問(wèn)數(shù)據(jù)庫(kù), 并把結(jié)果返回給客戶端。 所以這時(shí)候客戶端上不用安裝數(shù)據(jù)庫(kù)的客戶端,PB中的數(shù)據(jù)窗口的數(shù)據(jù)源也只能采用外部數(shù)據(jù)源。因?yàn)镻B不能直接與數(shù)據(jù)庫(kù)建立連接4. 對(duì)存儲(chǔ)過(guò)程的處理推薦的做法是把存儲(chǔ)過(guò)程轉(zhuǎn)換為 TUXEDO的SERVICE這樣做工作量比較大,但是完全的3層 結(jié)構(gòu),另一種方式是存儲(chǔ)過(guò)程不變 ,用一個(gè)TUXEDO的SERVICE去調(diào)用該存儲(chǔ)

39、過(guò)程,把結(jié)果返 回給客戶端4. 例子下面我們舉兩個(gè)例子來(lái)說(shuō)明在PB中編寫TUXEDOS戶端程序的方法為了方便在例子中調(diào)用,我們重新定義對(duì)FML32緩沖區(qū)進(jìn)行操作的函數(shù)如下: int pchgd32(long fbfr,long fldid,long occ,double buf)/*作用:寫一個(gè)浮點(diǎn)型數(shù)據(jù)到FML32緩沖區(qū)的指定位置中輸入?yún)?shù):fbfr: FML32 緩沖區(qū)fldid: ID 號(hào)occ: buf:位置要寫入的浮點(diǎn)型數(shù)據(jù)輸入?yún)?shù):無(wú)返回值: 0 成功, -1 失敗*/long flen =0long ferror =0 flen=Flen32(fbfr,fldid,0);出錯(cuò) : ",fstrerror32(ferror)if fchgd32(fbfr,fldid,occ,buf,flen) = -1 then ferror = getferror32()MessageBox( "pchgd32(" + string(fldid) + ") return -1end if return 0 int pchgl32(long fbfr,long fldid

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論