tuxedo基本操作atmi介紹_第1頁(yè)
tuxedo基本操作atmi介紹_第2頁(yè)
tuxedo基本操作atmi介紹_第3頁(yè)
tuxedo基本操作atmi介紹_第4頁(yè)
tuxedo基本操作atmi介紹_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——tuxedo基本操作atmi介紹

系統(tǒng)自帶authsvr服務(wù)進(jìn)程,和兩個(gè)子例程,tpsvrinit(),tpsvrdone。authsvr:客戶端調(diào)用tpinit進(jìn)行認(rèn)證時(shí),由交易TPAPPAUTH回應(yīng)。

服務(wù)端自動(dòng)調(diào)用tpsvrinit,可以在函數(shù)中進(jìn)行數(shù)據(jù)庫(kù)連接和處理命令行參數(shù)。終止時(shí)tpsvrdone也被自動(dòng)調(diào)用,可以在函數(shù)中斷開數(shù)據(jù)庫(kù)連接。這兩個(gè)例程分別在進(jìn)程開始時(shí)和進(jìn)程將要終止時(shí),被自動(dòng)調(diào)用。

服務(wù)端編程指導(dǎo):

交易內(nèi)一次只能接收一個(gè)請(qǐng)求,發(fā)送一個(gè)響應(yīng)。交易必需以tpretrurn,tpforward終止。

或交易內(nèi)使用了tpacall,在返回或轉(zhuǎn)發(fā)前,要么等待回應(yīng),要么使用tpcancel。

tpreturn一旦被調(diào)用,控制權(quán)就轉(zhuǎn)移到main函數(shù),未進(jìn)行顯示收取的響應(yīng)會(huì)被丟棄,此時(shí)客戶端會(huì)收到錯(cuò)誤。

客戶端調(diào)用tpcall后,若服務(wù)端此時(shí)對(duì)應(yīng)的tpreturn成功返回,客戶端tpcall才能返回??蛻舳苏{(diào)用tpacall后,若服務(wù)端此時(shí)對(duì)應(yīng)的tpreturn成功返回,客戶端tpgetrply才能返回。返回的數(shù)據(jù),可由客戶端從指針*data處取得。

tpforward調(diào)用時(shí),程序規(guī)律應(yīng)保證之前的處理都正確,響應(yīng)被收到。被調(diào)用后,交易不再等待響應(yīng)。main函數(shù)取得控制權(quán)。被請(qǐng)求的另一個(gè)交易負(fù)責(zé)響應(yīng)原來的請(qǐng)求。不能將請(qǐng)求轉(zhuǎn)發(fā)到自身。

tpreturn的參數(shù):

rval:說明交易是否成功執(zhí)行。

rcode:是應(yīng)用自定義的返回值??蛻舳丝赏ㄟ^tpurcode獲得tpreturn的rcode值,而不管交易是否成功。

data:該緩沖區(qū)由客戶端傳遞,服務(wù)端可以將回應(yīng)數(shù)據(jù)寫至此地址。也可以進(jìn)行tprealloc.而不能tpfree.服務(wù)端也可以自行tpalloc一個(gè)緩沖區(qū),并返回給緩沖區(qū),但需要自行若管理。假使發(fā)送的數(shù)據(jù)長(zhǎng)度大于已分派的,tuxedo會(huì)自動(dòng)擴(kuò)大緩沖。len:用來指示響應(yīng)緩沖的長(zhǎng)。客戶端可據(jù)此得知數(shù)據(jù)是否有變化。

假使客戶端需要收到一個(gè)響應(yīng),而tpreturn自身處理時(shí)出錯(cuò),這時(shí)tpcall或tpgetrply會(huì)失敗,客戶端應(yīng)檢查tperrno.此時(shí)客戶端的data緩沖區(qū)沒有變化。若交易返回的消息不符客戶端要求,則無法判斷應(yīng)用狀態(tài),此時(shí)原來的緩沖區(qū)保持不變。假使交易超時(shí),響應(yīng)數(shù)據(jù)不會(huì)被發(fā)送。

發(fā)布與取消交易名:

當(dāng)一個(gè)服務(wù)進(jìn)程被啟動(dòng)后,它會(huì)根據(jù)配置文件來向公告板上廣告自己有交易名。這尋常由buildserver命令執(zhí)行時(shí)完成。

tpcall:

客戶端收到響應(yīng)后。總是應(yīng)當(dāng)使用返回參數(shù)中的地址,并比較緩沖區(qū)是否有變化。

tpacall:

返回值為一個(gè)描述符,供tpreply使用。若標(biāo)志位包含了tpnoreply,返回的描述符為無符值,不能被隨后的tpgetrply引用。即使在事務(wù)模式下,響應(yīng)可能未全部到達(dá),但仍允許客戶端提交,為保證不出錯(cuò),要盡量保證所有的響應(yīng)能到達(dá)。

在一個(gè)事務(wù)中,可以為tpcall,tpacall都指定TPNOREPLY,TPNOTRAN標(biāo)志。

關(guān)于緩沖區(qū)的參數(shù),type,subtype都要和服務(wù)端所期望的類型完全一致。否則系統(tǒng)會(huì)出錯(cuò)。tpacall的緩沖區(qū)只要在返回后,就馬上可用作下一次發(fā)送請(qǐng)求。

tpgetrply的len指針不能為空。此函數(shù)會(huì)一直阻塞直到收到響應(yīng)。

tpsprio只用作用于接下來的一個(gè)請(qǐng)求,無論是同步,異步,被轉(zhuǎn)發(fā)的。其默認(rèn)值為對(duì)應(yīng)交易的值。

基于對(duì)話的開發(fā):

對(duì)話服務(wù)進(jìn)程不允許使用請(qǐng)求轉(zhuǎn)發(fā)。

同一個(gè)服務(wù)端/客戶端都可以同時(shí)進(jìn)行多個(gè)會(huì)話,最大值為64建立連接的時(shí)候,可同時(shí)進(jìn)行數(shù)據(jù)的發(fā)送。

會(huì)話內(nèi)仍舊可以使用tpcall,tpacall呼叫其它的交易。

建議在服務(wù)端使用tpreturn終止連接。遭遇異常時(shí),可由客戶端使用tpdiscon來斷開連接。對(duì)話開始時(shí)由tpconnect建立的連接是一個(gè)半雙工的虛連接:只有獲得當(dāng)前連接控制權(quán)的一方才能使用tpsend發(fā)送數(shù)據(jù)。通過由控制方指定標(biāo)志值可將連接的控制權(quán)轉(zhuǎn)移至連接的另一端。假使客戶端tpconnect時(shí)指定了TPSENDONLY則說明客戶端取得控制權(quán),若為TPRECVONLY說明服務(wù)端取得控制權(quán)。tpsend可指定標(biāo)志值,而tprecv可獲得事件值。對(duì)于具有層級(jí)的會(huì)話(嵌套會(huì)話),為了使多個(gè)會(huì)話能有序地?cái)嚅_連接,一般由被調(diào)用的最深層次的服務(wù)端調(diào)用tpreturn來終止連接。

基于全局事務(wù)的開發(fā):

可以跨越多個(gè)服務(wù)器上的多個(gè)資源管理器,并將提交給它們的多個(gè)事務(wù)共同作為一個(gè)大的規(guī)律事務(wù),要么全部提交,要么全部回滾。假使某個(gè)事務(wù)內(nèi)調(diào)用了帶有TPNOTRAN標(biāo)志值的tpcall,tpacall,tpconnect,則它們執(zhí)行的成功與否不被事務(wù)管理器所參考用來提交與回滾但事務(wù)仍舊會(huì)因此某個(gè)呼叫等待而超時(shí)。

事務(wù)內(nèi)可以使用會(huì)話。已經(jīng)開始的事務(wù)內(nèi)不可以再調(diào)用tpbegin().

tpbegin:

timeout參數(shù)應(yīng)當(dāng)參考tuxconfig中SCANUNIT(默認(rèn)為10s)的值,與實(shí)際應(yīng)用關(guān)系較大,若和用戶交互等待時(shí)間較短,處于生產(chǎn)環(huán)境時(shí)此時(shí)間較長(zhǎng)。flags目前必需置0.SCANUNI值指示系統(tǒng)掃描阻塞的交易調(diào)用或超時(shí)事務(wù)的周期。tpsuspend,tpresume:

事務(wù)可以被暫停與繼續(xù),除了當(dāng)前還有未處理的異步事件時(shí)。另一個(gè)進(jìn)程可以根據(jù)事務(wù)標(biāo)識(shí)符來恢復(fù)事務(wù)。tpcommit:

必需由調(diào)用tpbegin的進(jìn)程來調(diào)用tpcommit,tpabort.否則無效。在未收到響應(yīng)時(shí),不應(yīng)使用tpcommit.當(dāng)之前的調(diào)用失敗時(shí),tpcommit不應(yīng)被使用。兩步提交:

主管理器向所有從管理器發(fā)送提交指示,所有從設(shè)備回送準(zhǔn)備完成時(shí),才最終提交所有事務(wù)。tpcommit可以在一步提交時(shí)返回,也可以在兩步提交后返回。tpabort:

用來終止一個(gè)事務(wù),之前未收到響應(yīng)的所有呼叫描述符都會(huì)不可用,而且事務(wù)之前所做的改變都會(huì)被回滾。

可以在服務(wù)端設(shè)置AUTORUN為Y,使得一個(gè)事務(wù)可以自動(dòng)開始。這樣在收到一個(gè)帶有tpnotran的tpcall時(shí),不會(huì)有意料之外的狀況。關(guān)于客戶端與服務(wù)端是否共同支持事務(wù)的探討比較多。

關(guān)于tuxedo隊(duì)列的開發(fā):

tuxedo隊(duì)列支持出隊(duì),入隊(duì),轉(zhuǎn)發(fā)等操作,并且負(fù)責(zé)管理基于事務(wù)的隊(duì)列。

使用tuxedo隊(duì)列,管理員需要做如下任務(wù):定義一個(gè)組,專用于隊(duì)列,譬如TMS_QM。服務(wù)進(jìn)程TMQUEUE,TMQFORWARD,需要被定義。隊(duì)列空間需要被創(chuàng)立。

事務(wù)中使用隊(duì)列:

系統(tǒng)允許我們?cè)谕粋€(gè)事務(wù)中先出隊(duì)響應(yīng),再入隊(duì)請(qǐng)求。但不允許先入隊(duì)請(qǐng)求,再出隊(duì)響應(yīng)。在同一個(gè)事務(wù)中用于入隊(duì)的請(qǐng)求需要及時(shí)成功提交(若入隊(duì)后,事務(wù)回滾,則某些tpcall可能會(huì)重做屢屢),即使響應(yīng)當(dāng)前還未到達(dá)。若出隊(duì)操作失敗,并且當(dāng)前事務(wù)回滾,可以通過配置重試次數(shù)與重試間隔來再次dequque.

關(guān)于出錯(cuò)處理:tperrno:

所有的atmi函數(shù)假使返回值不正常,系統(tǒng)都會(huì)設(shè)置tperrno.對(duì)于tpreturn,tpforward,它們用來終止一個(gè)交易,服務(wù)端通過返回值即可判斷出錯(cuò)。客戶端只能通過檢查tpcall返回值后,再tperrno來檢查是否出錯(cuò)原因。tpurcode:

通過tpreturn的rcode用來設(shè)置tpurcode值,該值用來表示應(yīng)用自定義的一些狀態(tài),與tpreturn的返回值是否正常無關(guān)。

tuxedo系統(tǒng)錯(cuò)誤:

當(dāng)發(fā)現(xiàn)系統(tǒng)級(jí)錯(cuò)誤時(shí),tuxedo會(huì)向事務(wù)日志中心發(fā)送一條日志消息,并設(shè)置tperrno.

呼叫描述符錯(cuò)誤:

在異步呼叫時(shí),請(qǐng)求端與響應(yīng)端通過呼叫描述符來關(guān)聯(lián)匹配。會(huì)話型呼叫時(shí),虛擬連接通過呼叫描述符來標(biāo)識(shí)。

描述符的數(shù)量若超出資源限制,則出錯(cuò)。一個(gè)應(yīng)用的同一個(gè)上下文中只允許有50個(gè)未響應(yīng)的消息在排隊(duì)。

描述符若無效,則不能使用。如事務(wù)終止或超時(shí)后,描述符不可以再被使用。

對(duì)話錯(cuò)誤:

假使一個(gè)描述符不可用,tpsend,tprecv,tpdiscon返回錯(cuò)誤。在對(duì)話連接建立后,若有事件發(fā)生,tpsend會(huì)發(fā)送失敗,并且revent值會(huì)被設(shè)置。

重復(fù)對(duì)象錯(cuò)誤:

交易名不可被重復(fù)聲明,事務(wù)不可被屢屢恢復(fù),事件不可被屢屢訂閱。

通信錯(cuò)誤tpesvcfail,tpesvcerr:

假使tpreturn在處理過程中發(fā)生錯(cuò)誤,返回錯(cuò)誤并設(shè)置tperrno為tpesvcerr,數(shù)據(jù)不被發(fā)送。對(duì)端通過tperrno來獲知錯(cuò)誤。

假使通過用戶編碼返回rval為tpfail則系統(tǒng)將tperrno設(shè)為tpesvcfail,表示這屬于應(yīng)用自定義的異常,并將數(shù)據(jù)發(fā)送至對(duì)端。通信錯(cuò)誤tpeblock,tpgotsig

假使tpcall指定TPNOBLICK而發(fā)送數(shù)據(jù)過程中被阻塞,則返回TPEBLOCK。此標(biāo)志值指定發(fā)送數(shù)據(jù)過程而不限定馬上得到響應(yīng)。假使函數(shù)處理過程被信號(hào)中斷,則返回tpgotsig.可通過在標(biāo)志值tpsigrstrt來保證函數(shù)自動(dòng)重啟不致失敗。

參數(shù)不合法:

應(yīng)用級(jí)別的錯(cuò)誤,tuxedo系統(tǒng)可以自動(dòng)檢測(cè),建議在應(yīng)用級(jí)別檢查所傳參數(shù)合法。

無效條目:

尋常在分派資源類函數(shù)中,若系統(tǒng)在資源范圍內(nèi)找不到對(duì)應(yīng)的類型標(biāo)識(shí)會(huì)返回。tpalloc中指定了無效的緩沖類型。

tpinit無法在公告板中為自身創(chuàng)立條目,此時(shí)公告板空間可能不夠。tpcall請(qǐng)求的交易還未在公告板注冊(cè)。

tpconnect請(qǐng)求的服務(wù)名不存在?;蛟摲?wù)類型不是對(duì)話類型的。togprio中指定的請(qǐng)求并不存在。

tpunadvertise中指定的訂閱名不存在。tpenqueue/dequque,指定的隊(duì)列不可用。tppost/subscribe系統(tǒng)事件分發(fā)器不可訪問。

操作系統(tǒng)錯(cuò)誤:

假使tperrno返回TPEOS,則說明某個(gè)系統(tǒng)調(diào)用失敗。此時(shí)可以使用Uunixerr來獲得對(duì)應(yīng)的系統(tǒng)errno.權(quán)限錯(cuò)誤:

若tpinit失敗,同時(shí)tperrno被置為TPEPERM,則說明配置文件有問題。協(xié)議錯(cuò)誤(TPEPROTO):

主要由函數(shù)調(diào)用的順序不當(dāng)或函數(shù)在不恰當(dāng)?shù)倪M(jìn)程內(nèi)被調(diào)用未參與應(yīng)用就調(diào)用tpcall。未進(jìn)行tpbegin.卻調(diào)用tpcommit.隊(duì)列錯(cuò)誤(TPEDIAGNOSTIC):錯(cuò)誤原因可由ctl緩沖取得。資源管理器錯(cuò)誤(TPERMERR):

tpopen,tpclose發(fā)生錯(cuò)誤,錯(cuò)誤原因需要對(duì)數(shù)據(jù)庫(kù)相關(guān)信息進(jìn)行判斷。超時(shí)錯(cuò)誤:

在配置文件中可以定義兩種時(shí)間限制。一個(gè)應(yīng)用等待響應(yīng)的時(shí)間,稱為阻塞時(shí)間。一個(gè)事務(wù)處理的時(shí)間,稱為事務(wù)超時(shí)。

在事務(wù)模式下,若系統(tǒng)返回TPETIME說明一個(gè)事務(wù)超時(shí)。事務(wù)處理時(shí),事務(wù)超時(shí)的作用會(huì)覆蓋掉阻塞超時(shí)。

普通模式下,若一個(gè)異步呼叫超時(shí),調(diào)用會(huì)失敗,但呼叫標(biāo)識(shí)符仍可用。若發(fā)生了事務(wù)超時(shí),則其中進(jìn)行的異步呼叫對(duì)應(yīng)的呼叫標(biāo)識(shí)符不再可用。緩沖區(qū)類型錯(cuò)誤:

函數(shù)發(fā)現(xiàn)不識(shí)別的緩沖區(qū)類型。

事務(wù)專題:

在事務(wù)模式下,需要遵循如下建議,

隸屬于同個(gè)事務(wù)的所有進(jìn)程,假使發(fā)送了請(qǐng)求則要等待響應(yīng)。除了在tpacall中指定tpnotran,tpnoreply.

服務(wù)端在返回或轉(zhuǎn)發(fā)前一定要等待所有的請(qǐng)求收到響應(yīng)。發(fā)起tpbegin的一端在未收到響應(yīng)前,不可以調(diào)用tpcommit.

假使事務(wù)并未超時(shí)但被標(biāo)識(shí)為abort-only,接下來的交互都應(yīng)標(biāo)志TPNOTRAN,以保證整個(gè)事務(wù)能夠被正確的回滾。

若事務(wù)被標(biāo)識(shí)為abort-only,則tpgetrply返回值僅僅反映本地狀態(tài)。

一旦tpgetrply,tpsend,tprecv發(fā)生錯(cuò)誤,則對(duì)應(yīng)的標(biāo)識(shí)符失效,不管是否事務(wù)模式。一旦事務(wù)被終止,所有的未決呼叫標(biāo)簽符無效。

事務(wù)相關(guān)的錯(cuò)誤:

只有在當(dāng)前的客戶端與資源管理器處理完畢,才可以對(duì)之前暫停的全局事務(wù)進(jìn)行恢復(fù)。對(duì)于不支持事務(wù)的服務(wù)端,發(fā)出的請(qǐng)求應(yīng)帶上TPNOTRAN標(biāo)志。

被置abor-only的狀況,tpreturn返回時(shí)處理參數(shù)出現(xiàn)錯(cuò)誤,rval參數(shù)被置為TPFAIL。在此狀況下應(yīng)當(dāng)使用tpabort進(jìn)行終止,所做更改會(huì)被回滾,其后所有的描述符將不可用。但只要事務(wù)還沒有超時(shí),仍舊可以使用帶有TPNOTRAN標(biāo)志的函數(shù)進(jìn)行操作。

一旦事務(wù)超時(shí),能發(fā)送請(qǐng)求的類型只有異步通信,并置TPNOREPLY,TPNOBLOCK,TPNOTRAN標(biāo)志。

假使在tpcommit時(shí)發(fā)生超時(shí),需要查看錯(cuò)誤碼或資源管理器。

tpterm用來將客戶端的上下文從應(yīng)用中移除。假使此時(shí)還處于事務(wù)模式,則出錯(cuò),客戶端的資源未被改動(dòng)。

不需要程序員顯式對(duì)數(shù)據(jù)庫(kù)者提交操作。tuxedo會(huì)自動(dòng)對(duì)資源管理器進(jìn)行提交與終止。在事務(wù)模式下參與方又進(jìn)行了另一個(gè)呼叫:

若服務(wù)端發(fā)生嚴(yán)重錯(cuò)誤,則當(dāng)前事務(wù)被置為abort-only.若參與方被中斷,則當(dāng)前事務(wù)也會(huì)失敗。另一個(gè)呼叫的類型不得為TPNOREPLY.

tpopen,tpclose發(fā)生錯(cuò)誤,錯(cuò)誤原因需要對(duì)數(shù)據(jù)庫(kù)相關(guān)信息進(jìn)行判斷。超時(shí)錯(cuò)誤:

在配置文件中可以定義兩種時(shí)間限制。一個(gè)應(yīng)用等待響應(yīng)的時(shí)間,稱為阻塞時(shí)間。一個(gè)事務(wù)處理的時(shí)間,稱為事務(wù)超時(shí)。

在事務(wù)模式下,若系統(tǒng)返回TPETIME說明一個(gè)事務(wù)超時(shí)。事務(wù)處理時(shí),事務(wù)超時(shí)的作用會(huì)覆蓋掉阻塞超時(shí)。

普通模式下,若一個(gè)異步呼叫超時(shí),調(diào)用會(huì)失敗,但呼叫標(biāo)識(shí)符仍可用。若發(fā)生了事務(wù)超時(shí),則其中進(jìn)行的異步呼叫對(duì)應(yīng)的呼叫標(biāo)識(shí)符不再可用。緩沖區(qū)類型錯(cuò)誤:

函數(shù)發(fā)現(xiàn)不識(shí)別的緩沖區(qū)類型。

事務(wù)專題:

在事務(wù)模式下,需要遵循如下建議,

隸屬于同個(gè)事務(wù)的所有進(jìn)程,假使發(fā)送了請(qǐng)求則要等待響應(yīng)。除了在tpacall中指定tpnotran,tpnoreply.

服務(wù)端在返回或轉(zhuǎn)發(fā)前一定要等待所有的請(qǐng)求收到響應(yīng)。發(fā)起tpbegin的一端在未收到響應(yīng)前,不可以調(diào)用tpcommit.

假使事務(wù)并未超時(shí)但被標(biāo)識(shí)為abort-only

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論