版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
tuxedo簡易培訓教程濟南陸和電信軟件有限公司文棧良zlwen@第30頁,共83頁BEATUXEDO簡易培訓教程編寫、整理:文棧良2003—1—21第一章認識tuxedo1.1TUXEDO是什么?BEATUXEDO使分布式關鍵任務應用系統(tǒng)具有大型主機的性能,從而使這些應用系統(tǒng)能夠應付數(shù)以千計的用戶,大交易吞吐量,多并行數(shù)據(jù)庫存取和大量數(shù)據(jù),同時保持較短的反應時間,較高數(shù)據(jù)完整性和安全性,并且確保全年365天,每周7天,每天24小時的系統(tǒng)可用性.同時,BEATUXEDO還能讓開發(fā)人員和系統(tǒng)管理人員享用分布式運算環(huán)境提供的好處,如技術成本的低增長率,靈活性提高,快速應用開發(fā)和安裝以及業(yè)務信息存取得以改善。1.2BEATUXEDO的組件軟件模型關鍵業(yè)務應用通常是面向事務的,要求具有準確的數(shù)據(jù)完整性、較好的性能和管理需求。這些需求要求對應用的開發(fā)、調(diào)度和操作給出一個結構化的方案。由像BEATUXEDO這樣的中間件支持的組件軟件模型為分布式環(huán)境處理關鍵性業(yè)務應用提供了一個結構化的解決方案.BEATUXEDO和基于組件的應用設計從異構的計算資源中創(chuàng)建了一個虛擬主機:在分布式應用系統(tǒng)級提供可管理的相互關聯(lián)的資源。許多組織在進行了一段時間的分布式應用工作后,現(xiàn)在已經(jīng)認識到組件軟件模型是他們的必然選擇。分布式應用的直接動力是主機應用和集中式中規(guī)模的應用系統(tǒng)基礎上又逐漸配備有大量的臺式系統(tǒng)和服務器系統(tǒng),這些分布式系統(tǒng)在標準網(wǎng)絡傳送協(xié)議的支持下,呈松散耦合的態(tài)勢,事實上它們構成了網(wǎng)絡計算資源的基礎.在開始的時候,分布式系統(tǒng)主要服務于把集中式系統(tǒng)的前臺應用遷移到網(wǎng)絡環(huán)境——--主要用臺式處理器和文件服務器實現(xiàn)文檔處理和電子郵件通訊應用系統(tǒng).接著,兩層的客戶/服務器數(shù)據(jù)庫應用在部門級被采用,這類應用把交互式文件共享進化到并發(fā)數(shù)據(jù)元素訪問,在數(shù)據(jù)級支持更細粒度的管理。雖然這些客戶/服務器應用具體化了真正分布式應用處理的概念,它們?nèi)粤粲袨槟骋荒繕硕ㄖ频奶匦?規(guī)模和管理能力都有限。更重要的,這些應用只停留在較細粒度的數(shù)據(jù)訪問上,使得整個應用系統(tǒng)宛如磐石,不能有效地利用網(wǎng)絡資源。面對更大規(guī)模的關鍵業(yè)務應用,如要進行有效的分布式處理,就要求從客戶/數(shù)據(jù)庫方案轉(zhuǎn)變到三層客戶/應用系統(tǒng)/數(shù)據(jù)服務器結構。以后者為核心的組件軟件模型是客戶/服務器計算的拓展,它支持應用分區(qū),能有效地開發(fā)和調(diào)度應用業(yè)務邏輯,管理分布式應用的可靠執(zhí)行。BEATUXEDO采用三層結構的組件軟件模型。圖1表示BEATUXEDO的組件軟件模型的概要。該結構分為三層:圖1BEATUXEDO的組件軟件模型概要1。3TUXEDO的特點1。3。1.減輕開發(fā)人員負擔BEATUXEDO的三層結構組件軟件模型將用戶界面的表示部分和業(yè)務邏輯部分按客戶組件服務器組件分開,使開發(fā)人員能夠按組件的思想專注入于業(yè)務邏輯的開發(fā),用戶界面部分可用流行的前端開發(fā)工具來快速完成。而客戶和服務器之間、服務器和服務器之間的通訊,異構平臺之間的數(shù)據(jù)變換,以及服務器和數(shù)據(jù)庫之間的集成和事務控制都由BEATUXEDO來完成。當數(shù)據(jù)庫或服務器端的業(yè)務邏輯改變時,客戶端則不一定要改變;反之當客戶改變或增加新的客戶界面時,服務器端則不一定要改變,大大增加了應用系統(tǒng)的各部分的可復用性.BEATUXEDO提供的簡潔API使用戶程序能夠物理地點透明地在客戶和服務器之間、服務器和服務器之間進行各種方式的通訊,極大地減輕開發(fā)人員的負擔.BEATUXEDO提供的通訊方式有同步RPC調(diào)用,異步RPC調(diào)用,對話通信方式,廣播通訊方式,異步存儲轉(zhuǎn)發(fā)隊列通訊,事件通訊方式等。1.3.2.使系統(tǒng)的安裝與升級更容易在BEATUXEDO的三層結構組件軟件模型下開發(fā)的應用程序以服務器組件和客戶組件為安裝、升級的單位,當一個組件需要更新時,管理人員甚至能夠在運行系統(tǒng)不停機的情況下完成系統(tǒng)的升級,這在客戶端為數(shù)以千計的關鍵任務應用中尤為重要。1。3。3.減輕系統(tǒng)管理人員負擔BEATUXEDO系統(tǒng)提供從一個中心點對整個分布式系統(tǒng)進行全局監(jiān)控及管理的能力,管理員根據(jù)一個整體系統(tǒng)視圖(而不僅是單個節(jié)點或單元)提供的信息,可以作出決定和采取動作。BEATUXEDO不但提供了一些管理命令,而且提供了一個集成的圖形界面管理工具,集中地監(jiān)視和管理應用系統(tǒng)的運行,并且可動態(tài)地修改系統(tǒng)配置。通過Java的applets,還可利用Internet的瀏覽器比如Netscape或Microsoft的Explorer來運行該圖形界面管理工具。此外,BEATUXEDO還提供了描述系統(tǒng)中各對象的管理信息數(shù)據(jù)庫(MIBS)和存取管理這些管理信息數(shù)據(jù)庫的管理API,用戶可利用這些管理API,編寫自己特有的管理工具。1.3.4.非常高的性能一方面,BEATUXEDO能夠使多個客戶連接到一個服務器進程,由這個服務器進程存取數(shù)據(jù)庫,為客戶的請求服務。這樣,數(shù)據(jù)庫為處理連接所需的資源大大減少。另一方面,客戶和服務器之間,服務器和服務器之間的通訊中,網(wǎng)絡上流動的只有相對較少的客戶或服務器的請求和服務器處理的結果,而不再是兩層結構中客戶和DBMS之間的大量SQL請求和應答。此外,利用BEATUXEDO特有的一些機制也能極大提高應用系統(tǒng)的性能。比如利用異步RPC機制實現(xiàn)扇出并行,利用轉(zhuǎn)發(fā)機制實現(xiàn)流水線并行,利用多服務器單隊列實現(xiàn)多處理并行等。所有這些因素使BEATUXEDO的應用系統(tǒng)具有極高的性能。世界上大部分硬件服務器的TPC性能指標都是在BEATUXEDO上完成的。1。3。5.更高的可用性BEATUXEDO隨時知道它控制下的資源的情況,并利用這些信息為應用提供最大可用性。分布式系統(tǒng)使資源故障的影響復雜化。在一個分布式系統(tǒng)中,多個節(jié)點代表更多的潛在故障點的可能,但也可以代表在資源恢復開始時在其他節(jié)點上重新分配工作的更大潛力.BEATUXEDO在這種分布式系統(tǒng)故障恢復上具有優(yōu)勢。TUXEDO將重啟應用進程,并且能在硬件故障情況下在其它結點上重新運行進程。1。3.6.分布式環(huán)境中更高水平的數(shù)據(jù)完整性BEATUXEDO設計了數(shù)據(jù)資源的絕對完整性。目前出現(xiàn)的客戶/服務器應用中,重要數(shù)據(jù)資源很可能是廣泛的,而且受異構系統(tǒng)的控制。應用可以設計成用嚴格的保證數(shù)據(jù)一致性的兩階段提交,或者用更多的緩沖存儲和轉(zhuǎn)發(fā)技術來管理異構的(或者同構的)數(shù)據(jù)庫的更新。在各種情況下,BEATUXEDO能夠確保異構的(或者同構的)數(shù)據(jù)庫以及它資源管理器之間的完整性。1.3。7、系統(tǒng)的安全性BEATUXEDO通過結構化用戶界面支持應用服務的驗證、授權和存取控制,允許用戶加入自己的驗證服務模塊.BEATUXEDO還提供信息加密服務,允許對網(wǎng)絡上傳輸?shù)男畔碦SA的RC4算法加密。目前美國本土內(nèi)可按128位,本土外可按40位加密.1。3。8、開放系統(tǒng)中最開放的中間件平臺BEATUXEDO是一個非常開放的平臺,支持三十多種服務器平臺,包括大多數(shù)的UNIX服務器,WindowsNT服務器,IBM的S/370,S/390,加上AS/400和Tandem公司的NonStop系統(tǒng)。它的客戶支持幾乎所有的工作站,包括UNIX,MS—DOS,Windows3。1/95,WindowsNT,OS/2,Macintosh等.BEATUXEDO支持X/Open組織的分布式事務處理模型DTP,事務定界標準TX,應用程序事務處理接口標準XATMI以及和資源管理器(像數(shù)據(jù)庫系統(tǒng))的接口標準XA,并且還支持事務處理器之間的互操作標準OSI—TP。BEATUXEDO的客戶端通過DLL可以和VisualC++、VisualBasic、PowerBuilder、SQLWindows、Delphi、Develop/2000以及其他4GL和CASE工具互連.此外,BEATUXEDO還得到其他第三方開發(fā)管理工具廠商的支持。1。3.9、系統(tǒng)的伸縮性簡單地說,軟件可伸縮性就是可以很容易地增加被支持的用戶數(shù)和應用的全局吞吐量.一個可伸縮的軟件系統(tǒng)是利用網(wǎng)絡分布系統(tǒng)優(yōu)勢的關鍵。BEATUXEDO提供的就是這樣一個系統(tǒng),它可以利用在一個網(wǎng)絡上所能找到的所有的異構的資源以獲得最大的效益。BEATUXEDO提供這一點,而且提供許多可伸縮性選項。垂直方向的可伸縮性代表的含義與通常相同,即將系統(tǒng)轉(zhuǎn)變(升級)為一個更大,更有力的相同或不同結構的平臺。水平方向的可伸縮性多是在分布式系統(tǒng)結構中,它以增加適當規(guī)模的附加系統(tǒng)來增強網(wǎng)絡應用。所增加的附加系統(tǒng)與原有系統(tǒng)可能是同構的,也可是異構的(那就是不同的處理機或操作系統(tǒng))。BEATUXEDO支持二維的可伸縮性。二維可伸縮性可在結構上的任意位置添加異質(zhì)資源,而不改變已存在的應用的結構。允許對一個復雜的混合結構的支持,為聯(lián)機網(wǎng)絡系統(tǒng)提供了廣泛的規(guī)模選擇范圍。任何與數(shù)據(jù)表示有關的(如不同的處理器表示)可以由BEATUXEDO透明地解決.BEATUXEDO還可根據(jù)系統(tǒng)負荷的變化動態(tài)地增加或減少應用服務器的個數(shù)。1.3。10、廣泛的開發(fā)工具支持除了像C,C++和COBOL這樣的第三代語言編程環(huán)境,BEATUXEDO系統(tǒng)享受最廣泛的第三方工具的支持,下面是開發(fā)BEATUXEDO應用目前可用工具的一個列表.表1TUXEDO允許的開發(fā)工具選擇公司開發(fā)工具客戶端服務器端AllyAlly4GL*InformixIFORMIX5.0(XA)InformixTPToolkit*ITITPTools*OracleORACLE7.0(XA)Develop/2000GuptaSQLWindowsNovellVisualAppbuilderNovellUSLWKSHUnifyAccell4GL*JyaccJAM/JPL*TIIEFCASE*MagnaMagnaX*PowersoftPowerBuilder*DelphiDelphiMicrosoftVisualBasicVisualC++此外BEATUXEDO的關聯(lián)產(chǎn)品BEACONNECT允許BEATUXEDO和IBM的CICS、IMS、Unisys的System2000進行互操作,BEAJolt支持從Internet瀏覽器上請求BEATUXEDO的服務。BEABuilder和BEAManager將BEATUXEDO應用的開發(fā)與管理更為簡化。BEATUXEDO的組成與功能BEATUXEDO應用程序既可服務于帶有少量客戶和服務的單個服務器系統(tǒng),又可服務于由成千客戶、成百服務器和眾多服務器組件和服務構成的大規(guī)模的分布式環(huán)境。一個這樣的應用程序是以業(yè)務邏輯服務、由這些邏輯服務組織成的高層服務器組件和在服務器結點環(huán)境中的組件分布為特征的。支持這種虛擬主機環(huán)境的BEATUXEDO元素包括配置信息庫和實現(xiàn)運行時應用管理的核心子系統(tǒng)。1.配置信息庫BEATUXEDO應用程序由配置文件指定,這些配置文件被轉(zhuǎn)換成若干緊耦合的運行時共享信息庫。這些共享庫(在BEATUXEDO中稱公告牌,BulletinBoard)駐留在每個參與應用的服務器結點上。BEATUXEDO子系統(tǒng)訪問和操作這些庫.(1)應用程序配置一個BEATUXEDO應用程序包括在一個高度分布的環(huán)境中運行該應用所需的資源。開發(fā)人員編寫服務的代碼,應用管理員通過構造定義操作參數(shù)和資源分配的配置文件創(chuàng)建應用程序。配置信息駐留在一個可編程訪問的管理信息庫(MIB)中。MIB最少包括下列配置信息:系統(tǒng)范圍的資源,包括有關全局應用屬性(如安全性級別)、是否進行負載平衡、啟動一個應用系統(tǒng)所需的資源定義和故障恢復時所需的資源定義.參與應用的每個服務器機器的定義和駐留在這些機器上的BEATUXEDO文件的規(guī)格說明。單個服務器可與其他組成員共享的資源組,如事務管理;組也定義了服務器和所操作的資源管理器之間的映射。服務應用程序所需的映射成進程的服務器,在這些服務器進程中實現(xiàn)了應用業(yè)務邏輯.一個BEATUXEDO配置允許一個管理服務器或者從分布在一臺/多臺機器的一個/多個組中配置多個服務器。應用服務器進程定義的服務;服務級的屬性包括負載因子、服務處理時間的相對量、該服務相對于服務器中提供的其他服務的優(yōu)先級。頭三個配置屬性定義了應用的處理元素(如處理結點)、全局屬性和某一主資源的特殊指定.組、服務器和服務集中在BEATUXEDO軟件組件模型的分布式應用資源上:BEATUXEDO應用程序定義了提供所需服務的服務器組件分組;可配置的服務器實例數(shù)量能在多個機器上調(diào)整;而且,BEATUXEDO能管理廣播的單個服務和它們的相對優(yōu)先級。(2)公告牌BEATUXEDO應用配置文件被映射到一個運行時數(shù)據(jù)結構:公告牌(BB)。BB作為一個從配置文件中派生出來的共享信息庫。BB駐留在每個參與到由配置文件指定的應用程序的BEATUXEDO的服務器結點上.BB作為分布式應用的名字服務數(shù)據(jù)庫.它作為應用統(tǒng)計數(shù)據(jù)的運行時倉庫,提供分布式環(huán)境下的應用對象的位置信息.BB由BEATUXEDO核心例程(對應用開發(fā)者透明)訪問,由核心例程讀/修改BB庫。這個信息庫提供BEATUXEDO完成動態(tài)客戶/服務器映射所需的信息,同時也提供完成諸如負載平衡、安全性和事務協(xié)調(diào)等功能的信息。2.事務管理器事務管理器是BEATUXEDO體系結構的中心,它是每個BEATUXEDO服務器的核心,提供重要的分布式應用服務、命名、消息路由、負載平衡、配置管理、事務管理和安全性。它也包含BB結構,使用維護和訪問BB信息的服務.換句話說,BB內(nèi)包含有可靠執(zhí)行和管理大規(guī)模的基于組件的應用程序所需的所有信息,它將對事務管理器進程起作用.事務管理器的基本操作見下圖的圖示.事實上,事務管理器是負責客戶/服務器綁定和支持BEATUXEDO虛擬主機屬性等特色的子系統(tǒng)。圖4來自網(wǎng)上的客戶請的客戶代理進程,服務器通過注冊參加到該應用中。作為客戶方通訊的一部分,事務管理器訪問BB,然后選擇服務器,接著,服務器消息隊列的地址被返回,客戶方的請求被馬上傳送到合適的隊列等待服務為它進行處理。1)名字服務/位置透明性BB作為BEATUXEDO應用程序的名字服務器,復制到每個參與的結點上。為了便于快速訪問,名字服務器作為在共享內(nèi)存中的一個結構存在。事務管理器使用BB名字信息、配置信息和環(huán)境統(tǒng)計信息自動把服務請求平衡到可用的服務器上,并且根據(jù)數(shù)據(jù)內(nèi)容為客戶請求選擇路由,為服務請求選擇優(yōu)先級.編程員把應用程序編成對邏輯入口項(稱有名服務)的函數(shù)調(diào)用。事務管理器把這些邏輯請求映射到服務器結點/服務器進程環(huán)境內(nèi)指定的服務實例。2)數(shù)據(jù)依賴型路由數(shù)據(jù)依賴型路由是根據(jù)數(shù)據(jù)緩沖區(qū)中一個指定域的值,把一個服務請求映射到一個指定的服務器組的機制。因為BEATUXEDO服務器組映射成指定的資源管理器/數(shù)據(jù)庫實例,所以請求被導向到一個指定服務/資源管理器的組合.例如,一個銀行的數(shù)據(jù)庫可把存儲在不同數(shù)據(jù)庫實例中的不同范圍的帳號進行水平分區(qū)。用戶可用事務管理器進行路由選擇,而不用把特定分區(qū)信息編碼成訪問帳號的應用代碼。事實上,事務管理器查看指定的數(shù)據(jù)值,參考存儲在BB中的路由信息,然后把請求發(fā)送到能在正確數(shù)據(jù)分區(qū)上操作的服務.如果用戶需要改變數(shù)據(jù)庫分區(qū)(把一個分區(qū)移到一個新服務器上,或在已有分區(qū)實例上改變帳號分布),那么,他只需改變事務管理器的路由信息,應用程序的代碼不受影響.圖5數(shù)據(jù)依賴型路由:帳號操作的請求與數(shù)據(jù)分區(qū)是獨立的,事務管理器訪問BB路由表信息,把請求映射到訪問相應分區(qū)的服務器組,然后返回該組指定服務的綁定。3)負載平衡為了確保應用流量最大,事務管理器自動地在系統(tǒng)中完成負載平衡和調(diào)度。通過使用每個服務的負載因子,事務管理器把請求發(fā)送給能最快處理該請求的服務器。事務管理器通過為當前排隊的請求總計負載因子來決定給定服務器上的負載。下圖給出了事物管理器負載平衡能力如何幫助優(yōu)化應用流量的一個例子。圖6負載平衡:服務A,B,C由不同的服務器提供,每個服務器有一個基于當前排隊請求的負載值。事務管理器決定哪一個服務器提供服務,哪一個服務是負載最小.事務管理器將在一個給定結點內(nèi)或在提供服務的若干結點上,進行負載平衡。4)優(yōu)先權請求優(yōu)先權是事務管理器提供的另一個核心能力。某一服務請求經(jīng)常需要比其他服務更高的優(yōu)先權。例如,航空公司取消訂座的優(yōu)先級要比訂座的優(yōu)先級高:對大多數(shù)航空公司來說,要盡可能地再次買出被取消的座位。優(yōu)先權在服務隊列級有用,參見下圖的圖示。圖7優(yōu)先權:右例中,服務器1提供服務A,B,C。A,B服務的優(yōu)先級是50,C的優(yōu)先級是70。在上一個請求完成時,服務器在隊列中選擇下一個請求.下一個請求是由優(yōu)先級決定的,而不是根據(jù)請求在隊列中的位置。為了防止低優(yōu)先級請求總是得不到服務,每隔十個請求,就按FIFO次序進行一次請求選擇。5)穩(wěn)固的運行環(huán)境事務管理器包括許多支持應用可用性的特征,如進程可用性檢查、超時檢查、自動服務器重啟和恢復過程、用戶可定義的恢復過程.事務管理器不僅僅控制應用程序的活動流而且能確保其流暢有效的操作。6)安全性事務管理器通過一個結構化的安全性接口提供應用服務的驗證、授權和訪問控制。該接口概括了Kerberos安全模型,允許Kerberos或類似的最終用戶驗證機制與應用集成。用戶能用訪問控制列表保護服務、隊列或事件免遭未授權的訪問。7)分布式事務處理分布式事務處理(DTP)能力能保證跨幾個場地訪問的數(shù)據(jù)和由不同數(shù)據(jù)庫產(chǎn)品管理的數(shù)據(jù)的完整性。事務管理器協(xié)調(diào)分布式事務使之完成網(wǎng)絡環(huán)境下針對異構數(shù)據(jù)庫的多場地修改.事務管理器用全局事務跟蹤事務參與者,管理兩階段提交協(xié)議。這樣就可確保每個場地都能正確處理事務的提交和回退.事務管理器還在出現(xiàn)場地故障、網(wǎng)絡故障或全局資源死鎖時協(xié)調(diào)全局事務的恢復。事務管理器使用開放小組的X/OpenXA接口,進行不同資源管理器之間的通訊。該接口已被X/Open接納為分布式事務控制的標準接口。因為高性能和事務流量對OLTP系統(tǒng)產(chǎn)品是關鍵因素,所以事務管理器DTP軟件使用了最小化磁盤寫的算法。在其他屬性中,事務管理器DTP開發(fā)了一些眾所周知的技術如協(xié)調(diào)者遷移、只讀和一階段提交優(yōu)化。事務管理器由幾個關鍵子系統(tǒng)支持,這些子系統(tǒng)擴展了BEATUXEDO客戶/服務器功能和與異構應用系統(tǒng)的互操作性。下面的幾個段落將描述這些關鍵子系統(tǒng):◎管理BEATUXEDO對分布式應用管理的關鍵性問題給出了一個結構化的解決方案。BEATUXEDO的管理接口包括一個綜合性的命令行/腳本接口,一個編程接口和一個管理信息庫(MIB),它們把BEATUXEDO實現(xiàn)成一個更大管理環(huán)境中的受控應用程序。一個易用的基于GUI的管理應用程序可利用這些管理接口,在BEATUXEDO環(huán)境上提供了高層控制。BEATUXEDO資源,從高層的域?qū)傩韵蛳仑灤┮粋€單服務器進程的特性,支持圖形化表示和拖放功能.◎集中式的應用定義事務管理器使得應用管理員可在一個文件中定義組成BEATUXEDO應用程序的硬件、軟件和網(wǎng)絡資源。應用設計者能敘述在何處運行服務器和服務以及在處理器出故障時服務應該遷移到何處。他們可把各種不同的特性,包括調(diào)度信息、進程恢復標準和超時時間段等,賦給應用服務器。事務管理器為動態(tài)啟動、停止或管理一個分布式應用程序提供中央配置管理和工具?!騽討B(tài)重配置用戶可動態(tài)啟動或停止服務;用戶可選擇可用的服務。用戶可在一個配置中增加新的機器、組、服務器和服務。另外,事務管理器可用不同的參數(shù)如超時故障等,使得一個無法使用的處理器上的服務器和服務在不中斷運行程序的條件下移向另一個處理器上。第二章開發(fā)與應用開發(fā)BEATuxedo應用程序在開發(fā)BEATuxedo應用程序之前,你需要先搞清楚一系列和設計開發(fā)相關的概念,如識別什么是客戶機,有哪些方法可以從外界收集數(shù)據(jù)并提交服務器進行業(yè)務處理;識別什么是服務器,哪些程序包容了可以處理客戶機輸入的商業(yè)邏輯;識別什么是類型緩沖區(qū),客戶程序在向其這程序發(fā)送數(shù)據(jù)前如何分配內(nèi)存區(qū)域;什么是BEATuxedo的消息范例等。最后你還要弄明白客戶程序是通過調(diào)用ATMI庫來訪問BEATuxedo系統(tǒng)的.創(chuàng)建BEATuxedo的客戶程序與在C和C++編程語言中創(chuàng)建其它應用程序一樣,BEATuxedo提供了一個其于C語言的編程接口,即應用程序事務監(jiān)控接口ATMI,這套接口很容易使用,以便用于開發(fā)客戶程序和服務程序。除了C語言接口外,BEATuxedo還提供了COBOL接口.2。1。1創(chuàng)建服務程序2。1。1。1概述盡管開發(fā)者使用ATMI編程接口來創(chuàng)建BEATuxedo客戶程序和服務程序,但服務程序不全部由開發(fā)者來編寫,開發(fā)者只需寫一些稱為服務的商業(yè)函數(shù),封裝業(yè)務邏輯,然后和BEATuxedo的一些二進制程序聯(lián)編成一個可執(zhí)行的服務程序。BEATuxedo服務程序啟動后,它總是保持運行狀態(tài),只到接收到一個shutdown消息為止。一個典型的BEATuxedo服務程序在shutdown或reboot之前都在執(zhí)行著數(shù)千個服務。2。1。1.2服務的運行流程2.1.1。3服務程序的任務在BEATuxedo服務程序啟動時,執(zhí)行tpsvrinit()函數(shù),可以在里面打開一些如數(shù)據(jù)庫之類的資源供以后使用;在BEATuxedo服務程序關閉時,執(zhí)行tpsvrdown()函數(shù),可以在里面關閉tpsvrinit()中打開的資料;BEATuxedo服務程序以服務的形式來響應客戶程序的請求,客戶程序不是通過名字來調(diào)用服務程序的,而是調(diào)用服務,客戶程序不知道處理它請求的服務程序的位置;服務程序調(diào)用tpreturn()函數(shù)來結束服務請求,并返回一個緩沖區(qū),必要時,將它傳給客戶程序;注:如果是在tpsvrinit()中連接數(shù)據(jù)庫,為了保證數(shù)據(jù)庫的正常連接,在執(zhí)行服務的時候,最好能夠判斷數(shù)據(jù)庫是否斷開連接,如果斷開連接,則重新連接數(shù)據(jù)庫。這樣可以從根本上保證系統(tǒng)能夠持續(xù)穩(wěn)定的長期運行,基本上不需要人工干預。也就不再會出現(xiàn)“數(shù)據(jù)庫重啟了,中間件必須重啟”的情況.2.1.1.4返回控制2。1.1。5初始化和結束服務2。1。1。6創(chuàng)建(編譯)服務2。1.1。7調(diào)試和錯誤處理對于服務程序的調(diào)試,確實是一件非常令人頭痛的事.在Unix環(huán)境下,目前還找不到很好的方法,一般經(jīng)常使用的方法是”print,Userlog”跟蹤法,但是這種方法太累了.因此,有人想出了在windows環(huán)境下跟蹤調(diào)試,發(fā)現(xiàn)沒有任何錯誤后再放到UNIX環(huán)境進行編譯,并正式使用。目前,我們公司采用的就是這種調(diào)試方法,在windows環(huán)境下(C++Builder)編寫一個tuxedo模擬測試服務程序,使其能正確的識別客戶端調(diào)用的服務,并正確的調(diào)用相應的服務。2。1。1.8程序范例源代碼文件名:simpserv.c#include<stdio.h〉#include<ctype。h〉#include〈atmi.h〉?/*TUXEDOHeaderFile*/#include<userlog。h> /*TUXEDOHeaderFile*//*當服務器啟動時,在處理請求之前,tpsvrinit被執(zhí)行,這個不是必須的,對應的函數(shù)是shutdown*/#ifdefined(__STDC__)||defined(__cplusplus)tpsvrinit(intargc,char*argv[])#elsetpsvrinit(argc,argv)intargc;char**argv;#endif{ /*當argc,argv沒有被使用時,一些系統(tǒng)會發(fā)了警告*/ argc=argc;?argv=argv;?/*userlog用于將TUXEDO消息寫到日志文件中*/?userlog(”Welcometothesimpleserver"); return(0);}/*TOUPPER真正處理客戶請求,它接收的參數(shù)是一個緩沖區(qū)指針*/#ifdef__cplusplusextern”C”#endifvoid#ifdefined(__STDC__)||defined(__cplusplus)TOUPPER(TPSVCINFO*rqst)#elseTOUPPER(rqst)TPSVCINFO*rqst;#endif{?inti; for(i=0;i〈rqst—>len-1;i++) ?rqst-〉data[i]=toupper(rqst—〉data[i]); /*返回轉(zhuǎn)換后的類型緩沖區(qū)*/ tpreturn(TPSUCCESS,0,rqst-〉data,0L,0);}(2)程序說明語句說明wholefile整個服務程序不提供main函數(shù),在build時,由BEATuxedo系統(tǒng)提供。tpsvrinit()在服務器初始化即處理請求之前被調(diào)用。若沒有提供該函數(shù),BEATuxedo系統(tǒng)會提供一個缺省的,它向USERLOG中寫一條消息,說明服務器已經(jīng)被啟動。userlog(3c)是系統(tǒng)提供的一個寫日志的方法。TOUPPER()simpserv提供的唯一一個服務,它接收一個TPSVCINFO結構,它包含了要被轉(zhuǎn)換成大寫的字符串。forloopBEATuxedo系統(tǒng)的循環(huán),用于逐一轉(zhuǎn)換。tpreturn()程序編譯:$buildserver–osimpserv–fsimpserv.c–sTOUPPER(–sTOUPPER指明了在服務器啟動時需要提供的服務)2。1.2創(chuàng)建客戶程序2。1.2。1概述創(chuàng)建BEATuxedo的客戶程序與在C和C++編程語言中創(chuàng)建其它應用程序一樣,BEATuxedo提供了一個其于C語言的編程接口,即應用程序事務監(jiān)控接口ATMI,這套接口很容易使用,以便用于開發(fā)客戶程序和服務程序。除了C語言接口外,BEATuxedo還提供了COBOL接口。2.1。2。2客戶端在C/S模式中的作用2.1.2.3客戶端開發(fā)過程客戶端程序的設計和實現(xiàn)可以被分成2部分考慮:用戶處理過程和TUXEDO功能部分。下文的客戶端程序只描述了TUXEDO功能部分。利用TUXEDO的ATMIAPI調(diào)用可以做到:——基本的TUXEDO調(diào)試技巧(tperrno,tpstrerror,userlog)——TUXEDO進程管理(tpinit,tpterm)-—基本數(shù)據(jù)緩沖管理(tpalloc,tprealloc,tpfree)-—基本通訊(tpcall,tpacall,tpgetrply)客戶程序一般執(zhí)行如下任務:用tpchkauth()決定加入一個應用程序所需的安全級別??赡艹霈F(xiàn)的響應包括:沒有安全級別,應用程序口令,應用程序授權,訪問控制列表,連接級加密,公鑰加密,審計。這些可以根據(jù)你的需求進行選擇;在實際的應用中很多的軟件開發(fā)商通常對這一步都不做處理.調(diào)用tpinit()來連接到一個BEATuxedo應用程序,所需的安全信息作為tpinit()的參數(shù)傳給了應用程序;執(zhí)行服務請求;調(diào)用tpterm()來斷開和BEATuxedo應用程序的連接2.1。2.4調(diào)試和錯誤處理2.1。2。5進程管理tuxedo接到一個tpinit的請求后,就啟動一個服務進程,接收到tpterm()后,就會中止該服務進程.在實際應用中,tpinit()和tpterm()必須成對出現(xiàn),而且要相互對應.如果只在程序中調(diào)用了tpinit()而沒有調(diào)用tpterm(),則tuxedo系統(tǒng)會認為該進程一直處于活動狀態(tài),這樣的話可能會因為服務進程達到系統(tǒng)允許的上限而導致系統(tǒng)的崩潰.根據(jù)tpinit()和tpterm()在客戶程序中不同位置的調(diào)用,可以把tuxedo的進程連接分為長連接和短連接兩種.長連接是指在程序開始的時候調(diào)用tpinit()建立服務連接,在程序中止的時候調(diào)用tpterm()中止服務連接。這樣做的好處是,當用戶頻繁的進行業(yè)務操作時,不用頻繁的進行進程連接,大大的縮短了操作時間,提高了程序的執(zhí)行效率.但是,這也一個缺點,那就是,只有用戶不從客戶程序中退出來,不管做不做業(yè)務,都會在系統(tǒng)中占用一個進程連接,從而會影響其他用戶的連接。短連接指的是用戶每做一次業(yè)務,都需要調(diào)用tpinit(),業(yè)務完成后調(diào)用tpterm().這樣做的好處是,1000個終端用戶和10000個終端用戶同時操作,對系統(tǒng)來說,基本上是一個概念。但是這樣做會浪費大量的時間在進程連接上,從而影響了業(yè)務的處理效率。為了協(xié)調(diào)長連接和短連接之間的矛盾,我曾經(jīng)給出了一個很好的解決方案,那就是在長連接的基礎上進行優(yōu)化處理,當客戶程序5分鐘(這個值可以自定義)沒有向服務程序發(fā)送任何服務請求,則調(diào)用tpterm()斷開服務連接。僅僅這樣還是不行的,我們還必須在客戶程序向服務程序發(fā)送業(yè)務請求之前,首先判斷進程連接是否斷開,如果斷開,則重新連接.2.1。2。6數(shù)據(jù)緩沖管理在BeaTuxedo系統(tǒng)中的所有通信過程都是通過類型緩沖區(qū)來完成的,BeaTuxedo系統(tǒng)提供了大量的類型緩沖區(qū)來供開發(fā)者使用。所有類型緩沖區(qū)都必須通過BeaTuxedo的tpalloc(),tprealloc(),tpfree()這些ATMI來分配回收,它們都有特定的頭部。統(tǒng)一定義的類型緩沖區(qū)可以使它們在跨越不同網(wǎng)絡、不同協(xié)議、不同CPU構架以及不同操作系統(tǒng)之間得到統(tǒng)一的處理,這就使得開發(fā)者在分布式計算環(huán)境中有效地避開了異構網(wǎng)絡和異構計算機系統(tǒng)帶來的差異,把精力集中在商業(yè)邏輯的開發(fā)上.2。1.2。7程序范例源代碼文件名:simpcl。c#include〈stdio。h>#include"atmi。h”??/*TUXEDO的頭文件*/#ifdefined(__STDC__)||defined(__cplusplus)main(intargc,char*argv[])#elsemain(argc,argv)intargc;char*argv[];#endif{?char*sendbuf,*rcvbuf;?longsendlen,rcvlen; intret;?if(argc!=2){??(void)fprintf(stderr,"Usage:simpclstring\n”);? exit(1);?} /*作為一個客戶過程連接到System/T*/ if(tpinit((TPINIT*)NULL)==-1){? (void)fprintf(stderr,”Tpinitfailed\n”);? exit(1); }?sendlen=strlen(argv[1]); /*分配一個供請求響應使用的STRING緩沖區(qū)*/?if((sendbuf=(char*)tpalloc("STRING”,NULL,sendlen+1))==NULL){ ?(void)fprintf(stderr,”Errorallocat(yī)ingsendbuffer\n”);??tpterm(); exit(1);?} if((rcvbuf=(char*)tpalloc("STRING”,NULL,sendlen+1))==NULL){? (void)fprintf(stderr,"Errorallocatingreceivebuffer\n”); ?tpfree(sendbuf);??tpterm(); ?exit(1); } (void)strcpy(sendbuf,argv[1]); /*RequesttheserviceTOUPPER,waitingforareply*/ ret=tpcall(”TOUPPER”,(char*)sendbuf,0,(char**)&rcvbuf,&rcvlen,(long)0);?if(ret==—1){? (void)fprintf(stderr,”Can'tsendrequesttoserviceTOUPPER\n”);??(void)fprintf(stderr,"Tperrno=%d\n”,tperrno);? tpfree(sendbuf); tpfree(rcvbuf);? tpterm();? exit(1);?}?(void)fprintf(stdout,"Returnedstringis:%s\n”,rcvbuf);?/*FreeBuffers&DetachfromSystem/T*/ tpfree(sendbuf);?tpfree(rcvbuf);?tpterm();?return(0);}程序說明:語句說明atmi。h調(diào)用ATMI函數(shù)必須的頭文件tpinit()客戶程序調(diào)用它來加入應用程序tpalloc()用于分配類型緩沖區(qū)的ATMI函數(shù),STRING是五種BEATuxedo緩沖區(qū)數(shù)據(jù)類型之一,sendlen+1表示緩沖區(qū)類型,因為以空字符結尾,所以長度加1tpcall()把消息緩沖區(qū)送到TOUPPER服務,它提供了響應緩沖區(qū)的地址,它一直等待著返回消息tpterm()用于退出應用程序的ATMI函數(shù),tpfree()釋放分配的緩沖區(qū),是和tpalloc()相對應的函數(shù)程序編譯:$buildclient-osimpcl—fsimpcl.c ?-o指明輸出目標文件名,-f指出源文件名2。1。3在應用程序中使用消息范例BEATuxedo系統(tǒng)提供多種通信模式同步Request/Response模式;異步Request/Response模式;嵌套調(diào)用;調(diào)用轉(zhuǎn)發(fā);會話通信;主動消息通告;基于事件的通信;基于隊列的通信;使用事務.2。1。3。1同步通訊要進行同步調(diào)用,BeaTuxedo客戶程序使用ATMI函數(shù)tpcall()把一個請求送到服務程序,它不是通過名字來調(diào)用服務程序的,而是通過特定的服務來完成。客戶程序要等到服務程序作出響應后才處理后面的工作,也就是說,它在收到服務程序的響應之前一直處于阻塞狀態(tài)。2.1.3.2異步通訊要進行異步調(diào)用,客戶程序必須調(diào)用兩個ATMI函數(shù):tpacall(3c)函數(shù),用于請求一個服務;tpgetrply(3c)函數(shù),用于取得服務程序的響應??蛻舫绦蛟谡埱蠛晚憫g要完成特定任務時,可以采用這種模式。2。1.3.3使用嵌套調(diào)用一個服務可以充當BEATuxedo客戶程序,去調(diào)用其它BEATuxedo服務,換句話說,你請求的服務需要調(diào)用其它服務才能處理請求.BEATuxedo客戶程序調(diào)用了服務X,等待它的響應,服務X調(diào)用服務Y后也處于等待狀態(tài),當服務X得到響應后,再給客戶程序一個響應,這種機制的特點是效率高。2.1。3。4使用調(diào)用轉(zhuǎn)發(fā)在嵌套服務中,最里層嵌套服務可以直接給客戶程序一個響應,沒有必要按照調(diào)用棧逐級返回,這就使其它嵌套服務可以處理其它請求,當?shù)谝粋€服務是一個分發(fā)代理時,這種模式是非常有用的。在嵌套調(diào)用中,被客戶調(diào)用的服務X使用tpforward(3c)函數(shù)把請求傳給服務Y,服務X沒有tpreturn(3c)函數(shù)??蛻舫绦虿挥霉苷埱笫怯烧l來完成的,因此,轉(zhuǎn)發(fā)調(diào)用對客戶程序是透明的。2。1.3.5會話通信會話通信適合于有多個緩沖區(qū)需要以有狀態(tài)的方式在BEATuxedo客戶程序和服務之間傳遞的場合。恰當?shù)厥褂茫翬ATuxedo的會話,因為參與會話的服務器在會話結束之前是不可用的。要完成會話通信,你的代碼需要遵循如下步驟:客戶程序使用tpconnect()啟動會話;客戶程序和服務使用tpsend()和tprecv()函數(shù)進行數(shù)據(jù)交換,一個特殊的標記指示著當前由哪一方來控制著會話;當服務程序調(diào)用tpreturn()或tpdiscon()函數(shù)時,會話正常終止2.1.3。6主動消息通告要處理服務器的消息通知,客戶程序必須使用tpsetunsol()函數(shù)來創(chuàng)建一個消息處理器,要發(fā)送主動消息,BEATuxedo客戶程序或服務程序可以調(diào)用tpnotify()來把消息傳遞給單個客戶程序,也可以通過tpbroadcast()函數(shù)來把消息同時廣播給多個客戶程序。當客戶程序收到主動消息后,BEATuxedo系統(tǒng)調(diào)用客戶程序的主動消息處理器來處理。在一個基于信號系統(tǒng)中,客戶程序沒有必要處理所有的主動消息,然而,在一個非信號系統(tǒng)中,客戶程序必須使用tpchkunsol()函數(shù)來檢查主動消息。當客戶程序調(diào)用一個服務請求時,tpchkunsol()被隱含地調(diào)用。在調(diào)用tpnotify()時,如果你設置了tpack標記位,你將會收到一個請求通知。2。1。3.7基于事件的通信在基于事件的通信中,事件可以被發(fā)送到應用程序隊列、LOG文件和系統(tǒng)命令.當BEATuxedo服務或客戶程序調(diào)用tppost()函數(shù)時,任何一個BEATuxedo客戶程序都可以使用tpsubscribe()函數(shù)訂閱用戶自定義事件;當BEATuxedo系統(tǒng)檢測事件時,客戶程序也可以訂閱系統(tǒng)定義事件。當一個服務器死了,。SysServerDied事件就會被發(fā)布,它由BEATuxedo系統(tǒng)自動完成,不需要應用服務器干預。2.1。3.8基于隊列的通信為了實現(xiàn)了和/Q系統(tǒng)的接口,BEATuxedo客戶程序使用兩個ATMI函數(shù),使用tpenqueue()把消息放入隊列空間,使用tpdequeue()來把消息從隊列空間中取走.下面演示了點對點異步消息機制。一個客戶程序使用tpenqueue()函數(shù)將消息傳給服務,響應隊列和失敗隊列的名字可以作為參數(shù)包含在tpenqueue()調(diào)用中,由于在隊列中的數(shù)據(jù)是持續(xù)的,因此,所有和排隊消息相關的響應消息和失敗消息都可以從相應的響應隊列和失敗隊列中取得??蛻舫绦蚩梢允褂萌笔〉呐抨犿樌?,即按放放順利排隊,先進先出;也可以改變排隊規(guī)則,如把一個消息放在隊列開始,或放到另一個隊列前面。Tpenqueue()調(diào)用把消息送到TMQUEUE服務器,并被放入固定存儲體中進行排隊,然后給客戶程序發(fā)送一個通知消息。隊列管理器給消息分配一個標識符,使用它可以隨時將消息踢出隊列,也可以用于tpenqueue()中,指示將新消息緊挨著標識符標識的消息。在消息出隊時,要出隊消息的事務必須成功地提交.客戶程序使用tpdequeue()來使消息出隊。下面演示了消息被轉(zhuǎn)發(fā)到另一個服務器??蛻舫绦虬l(fā)出一個消息,要調(diào)用服務器上的X服務,X服務接收消息后,處理消息中的指令,然后把響應放入隊列空間,客戶程序再從隊列空間中取出。排隊系統(tǒng)對于服務來說是透明的,也就是說,不論服務請求是從隊列發(fā)出的,還是通過tp(a)call發(fā)出的,服務都能接受。2.1.3.9使用事務要使用事務,應用程序開發(fā)者需要使用如下ATMI函數(shù):tpbegin(),用于開始一個事務;tpcommit(),開始一個二階段提交處理;tpabort(),產(chǎn)即終止事務。任何放在begin,commit/abord之外的代碼不包含事務中。在下面的例子中,客戶程序打開了一個事務,請求了兩個服務,并且提交了事務。因為服務請求是在事務開始和提交之間完成的,所以兩個服務的行為都被了事務記錄.2.1.4應用配置2。1.4。1應用配置總覽2。1.4。2配置文件2.1。4。3應用的信息2。1.4。4機器信息2。1.4.5組定義2。1。4.6服務定義2.1.4.7交易定義2.1.4。8生成TUXCONFIG文件2.1。5分布式事務處理2。1。5。1概述TUXEDO系統(tǒng)使用XA協(xié)議在本地與遠程機器間協(xié)同事務活動。2。1.5。2分布式事務處理和XA接口全局事務通常最初被ATMI調(diào)用,包含一個以上的組;由客戶端和服務端啟動、提交或撤消.TUXEDO通過全局事務標識符(GlobalTransactionIdentifier—GTRID)控制所有參與部分。2.1.5。3分布式事務處理的ubbconfig分布式事務處理的配置與普通的配置不一樣,最根本的區(qū)別在于分布式事務處理需要建立日志設備和數(shù)據(jù)庫資源管理器。下面給出一個簡單的示例,并作相應的說明。2.2Tuxedo與數(shù)據(jù)庫互聯(lián)在銀行、電信、金融等行業(yè)的大型計算機應用系統(tǒng)中,中間件的使用日益普及,中間件已與操作系統(tǒng)、數(shù)據(jù)庫并列為三大基礎軟件.BEATuxedo作為最優(yōu)秀的中間件產(chǎn)品,在我國的很多行業(yè)中廣泛使用,本文通過一個簡單的例子介紹如何在TUXEDO中訪問ORACLE數(shù)據(jù)庫。在兩層的C/S結構中,客戶端直接訪問數(shù)據(jù)庫,當采用TUXEDO中間件后,形成三層結構。這時,客戶端不直接訪問數(shù)據(jù)庫,而是改為調(diào)用中間件TUXEDO服務端上的服務,由TUXEDO服務端訪問數(shù)據(jù)庫,并把結果返回給客戶端.TUXEDO服務端可以和ORACLE在同一臺服務器上,也可以在不同的機器上,如果在不同的機器上,在TUXEDO的服務端所在的機器要安裝一個ORACLE的客戶端.TUXEDO服務端與ORACLE數(shù)據(jù)庫連接有兩種方式:1、不通過XA接口直接互連。適用于整個系統(tǒng)只有一個數(shù)據(jù)庫的情況。2、通過XA接口互連,對整個系統(tǒng)有一個數(shù)據(jù)庫或多個數(shù)據(jù)庫都適用,建議采用。下面將著重介紹第二種連接方法。2。2。1系統(tǒng)說明TUXEDO版本:7.1安裝目錄d:\tuxedo71ORACLE版本:8。1。5安裝目錄d:\ora81操作系統(tǒng):win20002.2。2配置的步驟2。2.2.1ORACLE的的配置1.用internal用戶(缺省的口令是oracle)進入SQLPLUSC:\〉sqlplusinternal/oracle2.運行ORACLE的安裝路徑下的/rdbms/admin/xaview.sqlSQL>@d:\ora81\rdbms\admin\xaview.sql3.授權SQL〉grantselectonv$xatrans$topublicwithgrantoption;SQL〉grantselectonv$pending_xatrans$topublicwithgrantoption;4.用system用戶(缺省的口令是manager)連接并授權SQL>connectsystem/managerSQL>grantselectanytabletopublic;2.2.2.2TUXEDO的配置1.修改TUXEDO安裝路徑的udataobj目錄下的RM文件,把以Oracle_XA:xaosw:開頭的一行用#注釋掉,并加入一行:Oracle_XA;xaosw;d:\ora81\rdbms\xa\oraxa8.libd:\ora81\precomp\lib\msvc\orasql8.lib如果是在UNIX環(huán)境下,則為:Oracle_XA:xaosw:-L${ORACLE_HOME}/lib-lclntsh2。在TUXEDO用戶下創(chuàng)建TMS文件:TMS_ORA8i,TUXEDO通過TMS_ORA8i與ORACLE數(shù)據(jù)庫采用XA協(xié)議進行通訊buildtms—od:\tuxedo71\bin\TMS_ORA8i-rOracle_XA注意:如果TUXEDO服務端與ORACLE數(shù)據(jù)庫不在同一臺服務器上,可能會提示找不到庫文件oraxa8.lib和orasql8。lib,可到ORACLE數(shù)據(jù)庫的服務端相應目錄下把這兩個文件拷到當前機器ORACLE的客戶端下的對應目錄下。3.配置UBBCONFIG(1)在*MACHINES節(jié)中增加:TLOGDEVICE="/home/oracle/temp/simpdb/TLOG"TLOGNAME=TLOGTLOGSIZE=200(2)改*GROUPS節(jié)的配置為:(scott/tiger為本數(shù)據(jù)庫所采用的用戶及口令,可根據(jù)需要更改)*GROUPSGROUP1LMID=simpleGRPNO=1O(jiān)PENINFO=”O(jiān)racle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=."TMSNAME=”TMS_ORA8i"TMSCOUNT=2修改后的配置文件ubb內(nèi)容如下,用tmloadcf—yubb重新生成tuxconfigIPCKEY123456DOMAINIDsimpappMASTERsimpleMAXACCESSERS100MAXSERVERS50MAXSERVICES100MODELSHMLDBALN*MACHINESserverLMID=simpleAPPDIR="d:\test"TUXCONFIG="d:\test\tuxconfig"TUXDIR="d:\tux71"TLOGDEVICE="d:\test\TLOG”TLOGNAME=TLOGTLOGSIZE=100*GROUPSGROUP1LMID=simpleGRPNO=1OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=。"TMSNAME=”TMS_ORA8i”TMSCOUNT=2*SERVERSDEFAULT:CLOPT="—A”testSRVGRP=GROUP1SRVID=1*SERVICES4。重命名下列文件,因為下列文件名與ORACLE帶的文件名有沖突,所以要改名。(1)TUXEDO安裝路徑include目錄下的下面文件把sqlca.h改名為sqlca。h。bbb把sqlcode。h改名為sqlcode。h。bbb把sqlda.h改名為sqlda。h.bbb(2)重命名TUXEDO安裝路徑lib目錄下的下面文件把libsql。lib改名為libsql。lib.bbb5.用TMADMIN創(chuàng)建TLOG文件,TUXEDO用一個文件TLOG記錄對數(shù)據(jù)庫操作的日志。用于協(xié)調(diào)分布式數(shù)據(jù)庫的提交與回滾。D:\〉tmadmin〉crdl-b500—zd:\test\TLOG〉crlog—msimple>q2。2.2.3服務端的程序:test。pc功能:根據(jù)客戶端傳的EMPNO到表EMP中取ENAME的值,并把它返回給客戶端#include〈stdio.h〉#include<atmi.h〉#include〈userlog.h〉EXECSQLINCLUDEsqlca;EXECSQLBEGINDECLARESECTION;longal_empno=0;charac_ename[11]=”";EXECSQLVARac_enameISSTRING(11);EXECSQLENDDECLARESECTION;TEST(TPSVCINFO*rqst){/*接收客戶端來的數(shù)據(jù)*/al_empno=(FBFR32*)rqst—〉data;EXECSQLselectenameinto:ac_enamefromEMPwhereempno=:al_empno;if
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 管理類課程設計模型
- 機械加工制造課程設計
- 遙控小車單片機課程設計
- 高校課程設計色彩
- 銑36槽課程設計
- 藥劑學課程設計圖解
- 職業(yè)規(guī)劃課程設計
- 網(wǎng)絡財務基礎課程設計
- 污水廠aao的課程設計
- 銀行裝飾工程課程設計
- 新概念英語第二冊考評試卷含答案(第49-56課)
- 商業(yè)倫理與企業(yè)社會責任(山東財經(jīng)大學)智慧樹知到期末考試答案章節(jié)答案2024年山東財經(jīng)大學
- 【奧運會獎牌榜預測建模實證探析12000字(論文)】
- (完整版)譯林版英語詞匯表(四年級下)
- 220kV變壓器監(jiān)造細則
- 阻燃壁紙匯報
- 8 泵站設備安裝工程單元工程質(zhì)量驗收評定表及填表說明
- 企業(yè)年會盛典元旦頒獎晚會通用PPT模板
- 污水管道工程監(jiān)理控制要點
- 潮流能發(fā)電及潮流能發(fā)電裝置匯總
- (高清正版)T_CAGHP 066—2019危巖落石柔性防護網(wǎng)工程技術規(guī)范(試行)
評論
0/150
提交評論