第06講:Corba模型及構(gòu)件接口語言_第1頁
第06講:Corba模型及構(gòu)件接口語言_第2頁
第06講:Corba模型及構(gòu)件接口語言_第3頁
第06講:Corba模型及構(gòu)件接口語言_第4頁
第06講:Corba模型及構(gòu)件接口語言_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、哈爾濱工業(yè)大學(xué)計算機(jī)學(xué)院唐好選Email:pRPC 的基本原理pCORBA的概念與組成pCORBA構(gòu)件模型RPC的基本原理NetworkLocal CallClientStubRPCInterfaceRPCInterfaceServerStubRemoteProceduresendreceivesendreceive客戶端程序服務(wù)器端程序RPC過程描述過程描述1、客戶按本地調(diào)用的方式 直接調(diào)用本地的客戶代理 客戶代理具有與服務(wù)器相同的過程接口2、客戶代理將客戶的調(diào)用請求進(jìn)行加工、打包向底層通信機(jī)制(如套接字)發(fā)出請求消息客戶代理不進(jìn)行任何邏輯處理只是一個中介3、客戶端通過底層的通信機(jī)制將消息傳

2、送給服務(wù)器端的底層通信機(jī)制RPC過程描述過程描述4、服務(wù)器 需要部分地解析消息找出客戶希望調(diào)用的服務(wù)器程序5、服務(wù)器代理對消息進(jìn)行解析從中獲得調(diào)用者的參數(shù)然后調(diào)用服務(wù)器程序6、服務(wù)器程序執(zhí)行相應(yīng)的過程7、服務(wù)器程序?qū)⒔Y(jié)果返回給服務(wù)器代理8、服務(wù)器代理將結(jié)果打包 向底層通信機(jī)制發(fā)出應(yīng)答消息9、服務(wù)器端通信機(jī)制將消息傳送給客戶端通信機(jī)制RPC過程描述過程描述10、客戶端節(jié)點上也可能有多個調(diào)出點通信機(jī)制需要部分地解析返回的消息找出消息應(yīng)該返回給哪個客戶程序并將消息發(fā)送給對應(yīng)的客戶代理11、客戶代理從消息中解析結(jié)果返回給客戶程序客戶端開發(fā)過程服務(wù)器端開發(fā)過程服務(wù)器端程序服務(wù)器端程序IDL編譯器編譯器(

3、rpcgen)客戶端程序客戶端程序account.haccount_clnt.caccount _svc.cserver.cclient.crpclib.o互操作接口互操作接口定義語言定義語言互操作協(xié)議互操作協(xié)議 互操作實現(xiàn)(以互操作實現(xiàn)(以RPC為例)為例)互操作查找互操作查找互操作規(guī)范互操作規(guī)范底層協(xié)議底層協(xié)議決定決定決定決定服務(wù)器端程序服務(wù)器端程序客戶端程序客戶端程序客戶端代理客戶端代理互操作消息互操作消息網(wǎng)絡(luò)基礎(chǔ)設(shè)施網(wǎng)絡(luò)基礎(chǔ)設(shè)施服務(wù)器端代理服務(wù)器端代理互操作消息互操作消息網(wǎng)絡(luò)基礎(chǔ)設(shè)施網(wǎng)絡(luò)基礎(chǔ)設(shè)施CORBA的概念與組成CORBA概述概述pCORBA(Common Object Reque

4、st Broker Architecture 公共對象請求代理體系結(jié)構(gòu))是OMG制定的、最清晰的、跨越平臺最多的分布對象模型p通過IDL(Interface Definition Language)定義的接口,使用不同的編程語言,不同編譯器實現(xiàn)的構(gòu)件,可以通過對象請求代理(ORB: Object Request Broker)連接,形成跨平臺的應(yīng)用pCORBA是一套規(guī)約,而不是一個產(chǎn)品,開發(fā)商可以開發(fā)不同的產(chǎn)品來實現(xiàn)CORBA規(guī)約CORBA歷史歷史pOMG成立于1989年,CORBA規(guī)約的第一代主要集中在為分布式對象定義了一個基礎(chǔ),其核心是ORB和IDLp1995年頒布的CORBA 2.0增加

5、了ORB的互操作性規(guī)約,主要是基于TCP/IP的IIOP(Internet Inter-ORB Protocol :因特網(wǎng)ORB互聯(lián)協(xié)議)p1997年頒布的CORBA 2.1 增加了COM/CORBA互操作規(guī)范p1998年頒布的CORBA 2.2 增加了移植性的對象適配器(POA :Portable Object Adapter)和IDL到Java語言的映射規(guī)約,OMA中增加了領(lǐng)域接口部分p2001年頒布的CORBA 3.0 增加了CCM( CORBA Component Model: CORBA構(gòu)件模型),提供容器作為構(gòu)件的運行環(huán)境客戶程序客戶程序Client對象實現(xiàn)對象實現(xiàn)Server動動

6、態(tài)態(tài)調(diào)調(diào)用用客戶客戶IDL存根存根ORB接口接口動態(tài)動態(tài)框架框架接口接口靜態(tài)靜態(tài)框架框架接口接口對象對象適配適配器器對象請求中間件核心對象請求中間件核心(ORB Core)接口接口倉庫倉庫實現(xiàn)實現(xiàn)庫庫CORBACORBA的基準(zhǔn)模型的基準(zhǔn)模型對象請求代理(對象請求代理(ORBORB)對象服務(wù)對象服務(wù)應(yīng)用對象應(yīng)用對象公共設(shè)施公共設(shè)施p 基準(zhǔn)模型描述了分布式對象系統(tǒng)的基本成分(1)CORBAService(對象服務(wù))是一組系統(tǒng)級對象,為實現(xiàn)和管理對象提供了基本功能,包括名字、生存周期服務(wù)、事務(wù)服務(wù)、安全服務(wù)等(2)ORB是核心,它提供了一種機(jī)制,使得對象可以透明的發(fā)送請求和接受響應(yīng) ORB與對象服務(wù)

7、相結(jié)合,確保符合CORBA基準(zhǔn)的應(yīng)用構(gòu)件之間有效的通信(3)CORBAFacilities(公共設(shè)施)是適用于眾多應(yīng)用領(lǐng)域的通用構(gòu)件,例如信息管理、系統(tǒng)管理、任務(wù)管理和用戶界面等(4)Application Object(應(yīng)用對象)是專用于特定領(lǐng)域的構(gòu)件CORBACORBA的基準(zhǔn)模型(續(xù))的基準(zhǔn)模型(續(xù))對象類的上下文關(guān)系對象類的上下文關(guān)系ORBORB的體系結(jié)構(gòu)的體系結(jié)構(gòu)接口倉庫接口倉庫IDL編譯程序編譯程序?qū)崿F(xiàn)倉庫實現(xiàn)倉庫客戶機(jī)客戶機(jī)對象實現(xiàn)對象實現(xiàn)GIOP/IIOPDII客戶代理客戶代理ORB內(nèi)核內(nèi)核ORB接口接口Operation()輸入?yún)?shù)輸入?yún)?shù)輸出參數(shù)輸出參數(shù)+返回值返回值對象適配

8、器對象適配器實現(xiàn)骨架實現(xiàn)骨架DSIpORB體系結(jié)構(gòu)定義一個描述客戶機(jī)如何向遠(yuǎn)程對象發(fā)送請求并得到回答的框架ORBORB的職責(zé)的職責(zé)p ORB給分布式對象提供了透明發(fā)送請求和接受響應(yīng)的機(jī)制,主要包括以下職責(zé):p負(fù)責(zé)根據(jù)客戶機(jī)給出的對象引用定位相應(yīng)的遠(yuǎn)程對象實現(xiàn),激活遠(yuǎn)程對象實現(xiàn),建立與遠(yuǎn)程對象實現(xiàn)的連接p客戶端ORB接受客戶機(jī)請求的參數(shù),將參數(shù)打包,通過ORB互聯(lián)協(xié)議(如IIOP協(xié)議)跨網(wǎng)絡(luò)送給服務(wù)器端的ORBp服務(wù)器端的ORB接受通過ORB互聯(lián)協(xié)議跨網(wǎng)絡(luò)傳送過來的參數(shù),并將這些參數(shù)解包,發(fā)送給對象實現(xiàn)p負(fù)責(zé)將對象實現(xiàn)響應(yīng)客戶機(jī)的請求后的輸出參數(shù)、返回值等,以同樣的打包/解包方式,傳回給客戶機(jī)O

9、RBORB內(nèi)核和內(nèi)核和ORBORB接口接口pORB內(nèi)核內(nèi)核提供了對象的通用表示和對象間通信的機(jī)制??蛻籼峁┝藢ο蟮耐ㄓ帽硎竞蛯ο箝g通信的機(jī)制??蛻艉蛯ο髮崿F(xiàn)通過和對象實現(xiàn)通過ORB接口的形式訪問接口的形式訪問ORB內(nèi)核提供的功能內(nèi)核提供的功能pORB接口接口是客戶與對象實現(xiàn)可以直接訪問到的、抽象描述是客戶與對象實現(xiàn)可以直接訪問到的、抽象描述ORB操作的接口,操作的接口,ORB接口由接口由ORB內(nèi)核實現(xiàn),它不倚賴于任內(nèi)核實現(xiàn),它不倚賴于任何的對象適配器,何的對象適配器,ORB接口主要包括:接口主要包括:pORB初始化(初始化(ORB-init)p獲取初始對象引用獲取初始對象引用p對象引用操作對象

10、引用操作p策略域的管理策略域的管理p線程有關(guān)的操作線程有關(guān)的操作ORBORB的實現(xiàn)方式的實現(xiàn)方式p 位于客戶和對象實現(xiàn)內(nèi)部的ORBp 基于服務(wù)器的ORBp基于系統(tǒng)的ORB ORBORB的對象適配器的對象適配器OAOApOA是對象實現(xiàn)訪問ORB所提供服務(wù)的主要方式,由于對象實現(xiàn)方式不同,ORB內(nèi)核很難為所有對象提供方便有效的單一接口,通過OA,ORB可以定制接口,為一組特定的對象實現(xiàn)提供服務(wù),OA負(fù)責(zé)的主要功能有:生成和解釋對象引用,方法調(diào)用、注冊、激活和凍結(jié)對象實現(xiàn),將對象引用映射到相應(yīng)的對象實現(xiàn)pBOA(基本對象適配器)著重CORBA服務(wù)器實現(xiàn)pPOA(可移植對象適配器)規(guī)約將CORBA對象

11、定義為具有標(biāo)識、接口和實現(xiàn)的抽象實體,負(fù)責(zé)把CORBA對象概念適配為編程語言的服務(wù)體(Servant)概念,允許編程人員構(gòu)造可移植的對象實現(xiàn)pORB通過對象適配器提供的服務(wù)通常包括p生成和解釋對象引用p方法調(diào)用p交互的安全性p對象和實現(xiàn)的激活及凍結(jié)p將對象引用映射到實現(xiàn)p注冊實現(xiàn)p對象粒度、壽命、策略、實現(xiàn)風(fēng)格等的明顯區(qū)別 使得 ORB核心很難為所有對象提供方便和有效的單一接口p通過對象適配器ORB可以將一組特定的對象實現(xiàn)作為目標(biāo)對象適配器的作用對象適配器的作用ORBORB的接口倉庫和實現(xiàn)倉庫的接口倉庫和實現(xiàn)倉庫p接口倉庫(Interface Repository: IR)是儲存、發(fā)布、管理相

12、關(guān)對象接口定義的集合,通常以IDL文件作為輸入,將接口描述信息經(jīng)過處理后存放在文件、數(shù)據(jù)庫或者其它形式的存儲機(jī)制中,并提供一組標(biāo)準(zhǔn)的調(diào)用接口供運行時動態(tài)查詢p實現(xiàn)倉庫包含了允許ORB激活和定位對象實現(xiàn)的信息,一般來說,對象實現(xiàn)的安裝和與對象實現(xiàn)的激活及執(zhí)行有關(guān)的策略控制都是通過實現(xiàn)倉庫上的操作完成的客戶樁和實現(xiàn)骨架客戶樁和實現(xiàn)骨架p客戶樁又稱為IDL Stubs,是由IDL編譯程序根據(jù)IDL文件生成的,與編程語言相關(guān)的客戶端代碼段,客戶樁向客戶提供一個因接口而異的APIp實現(xiàn)骨架又稱為IDL Skeleton,是由IDL編譯程序根據(jù)IDL文件生成的,與編程語言相關(guān)的服務(wù)器端代碼框架,實現(xiàn)骨架提

13、供將對象適配器轉(zhuǎn)發(fā)的請求調(diào)度到對象實現(xiàn)上的代碼動態(tài)激活接口動態(tài)激活接口DIIDII和動態(tài)骨架接口和動態(tài)骨架接口DSIDSIpDII(Dynamic Invocation Interface)是一種允許動態(tài)創(chuàng)建和激活對CORBA對象請求的客戶端接口,根據(jù)客戶代碼提供的要調(diào)用的對象、要執(zhí)行的操作、操作的參數(shù)集和參數(shù)類型等信息(其中包括從接口倉庫中獲得的各種動態(tài)信息),在運行時動態(tài)創(chuàng)建和激活對對象的請求pDSI(Dynamic Skeleton Interface)是一種允許將請求在運行時從對象適配器動態(tài)提交給對象實現(xiàn)的接口。DSI要求實現(xiàn)代碼必須向ORB提供所有操作參數(shù)的描述,ORB則提供輸入?yún)?shù)

14、的值,以便在執(zhí)行操作時使用,在執(zhí)行操作后,實現(xiàn)代碼向ORB提供輸出參數(shù)的值或者異常CORBACORBA請求發(fā)送和響應(yīng)的方法請求發(fā)送和響應(yīng)的方法u客戶機(jī)與遠(yuǎn)程對象發(fā)送和接受請求的方法主要有兩種:靜態(tài)方法和動態(tài)方法,靜態(tài)方法更為普遍u靜態(tài)方法要求在編譯時已知所有的IDL接口,由IDL編譯程序生成客戶端的樁代碼和服務(wù)器端的骨架代碼,并分別鏈接到客戶機(jī)程序和對象實現(xiàn)中u對于動態(tài)方法,在編譯時客戶機(jī)和服務(wù)器端程序都不知道IDL接口。運行時,客戶端使用DII(動態(tài)激活接口)向?qū)ο髮崿F(xiàn)發(fā)出請求,服務(wù)器端對象適配器使用DSI(動態(tài)骨架接口)訪問對象實現(xiàn),兩者之間的接口信息從ORB接口倉庫中動態(tài)獲取ORBORB

15、通信協(xié)議模型通信協(xié)議模型Client StubORBClientServer-objectServer-objectServer SkeletonServer SkeletonORB(Java)ORB(C+)IIOPIIOPCORBA構(gòu)件模型構(gòu)件模型的產(chǎn)生構(gòu)件模型的產(chǎn)生p CORBA 3.0首次提出了構(gòu)件模型,擴(kuò)充了CORBA的對象模型p CORBA構(gòu)件模型(CORBA Component Model: CCM)是一種用來構(gòu)建和部署CORBA應(yīng)用程序的服務(wù)器端構(gòu)件模型,其設(shè)計思想比較類似于EJB,大量的代碼生成以及系統(tǒng)功能的實現(xiàn)由容器提供者而不是應(yīng)用程序自己來完成p CCM的體系結(jié)構(gòu)主要包含:

16、抽象構(gòu)件模型,構(gòu)件實現(xiàn)框架( Component Implementation Framework : CIF),構(gòu)件的包裝、組織和部署,構(gòu)件容器框架等抽象構(gòu)件模型(抽象構(gòu)件模型(1 1)uCCM抽象構(gòu)件模型定義了服務(wù)器端構(gòu)件及其交互抽象構(gòu)件模型定義了服務(wù)器端構(gòu)件及其交互構(gòu)件構(gòu)件插座插座(uses)事件接收器事件接收器(consumes)事件源事件源(publishes, emits)構(gòu)件接口構(gòu)件接口(supports)呈面呈面(provides)屬性屬性(1)構(gòu)件接口唯一標(biāo)識了構(gòu)件的實例,客戶可通過對構(gòu)件接口的引用來調(diào)用構(gòu)件的操作,支持一個或多個接口例:例: interface A,B; /

17、Forward declaration component Foo supports A,B / definition of equivalent interface / and its supported interfaces provides W,X,Y,Z; / Facets (provided interfaces. ) /other component definitions ; 抽象構(gòu)件模型(抽象構(gòu)件模型(2 2)(2)呈面標(biāo)識構(gòu)件向客戶提供的可訪問的功能接口,上例中,呈面W,X,Y,Z標(biāo)識構(gòu)件提供的W,X,Y,Z接口(3)插座(receptacles)是構(gòu)件之間連接(connec

18、tion)的描述模型。IDL中的關(guān)鍵字“uses”用于定義構(gòu)件與要連接的接口之間的關(guān)系,如: Checkout ; component ShoppingCart uses Checkout the_checkout; 抽象構(gòu)件模型(抽象構(gòu)件模型(3 3)(4)事件接收器( event sink )和事件源( event source ) CCM支持發(fā)布/訂閱事件模型,屬于推(push)模型,事件使用者(consumer, 或稱為事件接收器)先訂閱(subscribe)某類事件,此后,事件產(chǎn)生者(supplier, 或稱為事件源) 把事件推給使用者 作為事件源的構(gòu)件產(chǎn)生事件的方式有兩種: (1)

19、發(fā)布(publishes)方式:在產(chǎn)生事件的構(gòu)件與任一接收者之間建立專門通道 (2)廣播(emits)方式:利用多個產(chǎn)生者共享的通道廣播事件 構(gòu)件也可能接收別的構(gòu)件產(chǎn)生的事件,用關(guān)鍵字”consumes”說明抽象構(gòu)件模型(抽象構(gòu)件模型(4 4)(5)屬性主要用于構(gòu)件部署(6)構(gòu)件實例是由Home來管理,一個Home管理某一類構(gòu)件的所有實例. Home要求所有的實例在一處生成,從而有效管理其生命周期,這是工廠設(shè)計模式的典型應(yīng)用抽象構(gòu)件模型(抽象構(gòu)件模型(5 5)構(gòu)件的容器框架構(gòu)件的容器框架p 容器提供服務(wù)方的運行環(huán)境,CORBA構(gòu)件使用一個容器來實現(xiàn)對系統(tǒng)服務(wù)的訪問CORBA 構(gòu)構(gòu)件內(nèi)部接口件內(nèi)

20、部接口POA回調(diào)接口回調(diào)接口容器容器外部外部接口接口構(gòu)件構(gòu)件HomeCORBA 構(gòu)構(gòu)件內(nèi)部接口件內(nèi)部接口POA回調(diào)接口回調(diào)接口容器容器外部外部接口接口構(gòu)件構(gòu)件HomeORB事務(wù)事務(wù)安全安全持久狀態(tài)持久狀態(tài)通知通知CORBA構(gòu)件接口p為了使客戶能夠準(zhǔn)確、方便地訪問服務(wù),服務(wù)的提供者必須對自身進(jìn)行準(zhǔn)確的描述,并以一定的方式提供給客戶 接口的定義是必須的接口的必要性接口的必要性p模塊(Module)通常由p接口(Interface)和p實現(xiàn)(Implementation)兩部分組成p模塊接口刻畫了各個模塊是如何耦合的p模塊的實現(xiàn)部分是各個模塊的內(nèi)部事務(wù)模塊是什么?模塊是什么?其它模塊其它模塊的設(shè)計者

21、的設(shè)計者和使用者和使用者需要知道需要知道其它模塊其它模塊的設(shè)計者的設(shè)計者和使用者和使用者不需要知不需要知道道p功能性描述u是對接口中各個操作調(diào)用方式的描述,分為對輸入和輸出兩個部分的描述p約束性描述u是對功能以外特征的描述,不僅包括異常處理、執(zhí)行語義等簡單內(nèi)容,還包括行為特征和同步特征接口包含的具體內(nèi)容接口包含的具體內(nèi)容以描述結(jié)構(gòu)化程序的功能為主(如RPC-IDL,微軟的-IDL)以描述對象的功能為主(如CORBA的IDL)以描述服務(wù)為主(如web service的WSDL服務(wù)描述語言)幾種接口定義語言幾種接口定義語言為什么需要為什么需要IDL?IDLSmalltalkCobolJavaAda

22、-95C+CIDL可轉(zhuǎn)換為多種編程語言,用其它語言實現(xiàn)可轉(zhuǎn)換為多種編程語言,用其它語言實現(xiàn)IDLidl2javaIdl2c+Client stubServer skeletonClient stubServer skeletonIDL IDL 編譯器編譯器CORBA庫庫CORBA庫庫本地代理本地代理 目標(biāo)對象目標(biāo)對象存根代碼存根代碼XXXC.XXXXC.X框架代碼框架代碼XXXS.XXXXS.X客戶程序客戶程序服務(wù)器程序服務(wù)器程序客戶程序像客戶程序像訪問本地對訪問本地對象一樣訪問象一樣訪問遠(yuǎn)程對象遠(yuǎn)程對象保存保存接口接口把對象接口映把對象接口映射成某種語言射成某種語言pIDL的任何基本類型映射

23、到特定語言中時保持其size不變,但可能改變其標(biāo)識范圍(Range)pIDL自定義類型包括對特殊類型的重命名和復(fù)雜類型的定義,復(fù)雜類型包括pEnumerationpStructurepUnionpSequenceparrayIDLIDL的數(shù)據(jù)類型的數(shù)據(jù)類型p類似于C+中枚舉類型的定義方式:enum Color red, green, blue, black, orange;pIDL不定義枚舉類型中各個成員的特定序號,只定義一種對比關(guān)系(序號由左向右增加)p與C+不同,IDL不允許控制枚舉成員的序號,比如: enum Color red=0, green=7; /不合法定義p枚舉類型表示一個閉包

24、的命名空間,任何枚舉成員不能重復(fù)出現(xiàn)在多個枚舉類型中 enum InteriorColor white, blue, grey ; enum ExteriorColor yellow, blue, green ; / 不合法p不允許定義空的枚舉類型IDLIDL數(shù)據(jù)類型數(shù)據(jù)類型-Enumeration-Enumerationp結(jié)構(gòu)中通常包含一個或多個任意類型的成員,包括用戶自定義的復(fù)雜類型 struct TimeofDay short hour; short minute; short second; ;p結(jié)構(gòu)允許嵌套定義 struct Outer struct FirstNested long

25、 first; long second; firstS; struct SecondNested long first; long second; secondS; ;IDLIDL數(shù)據(jù)類型數(shù)據(jù)類型-Structure-StructurepIDL聯(lián)合類型完全不同于C+中的聯(lián)合 union ColorCount switch (Color) case red: case green: case blue: unsigned long num_in_stock; case black: float discount; default: string order_details; ;p聯(lián)合中的成員類型

26、可以是任意類型,包括用戶定義的復(fù)雜類型,而鑒別器類型必須是整型(char, short, long, boolean, enum)IDLIDL數(shù)據(jù)類型數(shù)據(jù)類型-Union-Unionpdefault在聯(lián)合類型中是一個可選項,不過,只要它存在于聯(lián)合類型中,就必須要代替一種特定的情況(其它情況均不成立),該情況不能為空,否則是不合法的 union U switch (boolean) case FALSE: long count; case TRUE: string message; default: / Illegal, default case cannot happen float cost

27、; ;IDLIDL數(shù)據(jù)類型數(shù)據(jù)類型-Union-UnionpIDL支持一維和多維數(shù)組 typedef Color ColorVector10; typedef string IDtable1020;p數(shù)組必須用typedef關(guān)鍵字定義,每一維元素個數(shù)必須明確定義 typedef string IDtable20; / ErrorIDLIDL數(shù)據(jù)類型數(shù)據(jù)類型-Array-Arrayp序列是IDL特有的特殊數(shù)據(jù)類型,其本質(zhì)是變長數(shù)組,可包含任意類型元素,可以是有界的或無界的 typedef sequence Colors; typedef sequence Numbers; p序列是可空的IDLI

28、DL數(shù)據(jù)類型數(shù)據(jù)類型-Sequence-Sequencetypedef unsigned long PhoneNumber;typedef string GuestName, Address;enum ChargeCard MasterCard, Visa, AmericanExpress;struct GuestRecord GuestName name;Address address;PhoneNumber number;ChargeCard card_kind;unsigned long card_number, expiration;typedef sequence GuestList

29、;IDLIDL類型定義示例類型定義示例typedef struct Employeestruct string name;Address address;unsigned long social_security_number; Employee;typedef EmployeeRecord Employee100;enum PersonKind A_GUEST, AN_EMPLOYEE,AN_OTHER;union Person switch (PersonKind) case A_GUEST:GuestRecord guest_record;case AN_EMPLOYEEEmployee

30、Record employee_record;default: string description;IDLIDL類型定義示例(續(xù))類型定義示例(續(xù))接口通過interface關(guān)鍵字來定義 interface Calculator short add(in short s1, in short s2); short sub(in short s1, in short s2); short mul(in short s1, in short s2); short div(in short s1, in short s2);IDL接口定義了分布對象對外表現(xiàn)的細(xì)節(jié),每個IDL接口定義了一個新對象類型

31、對接口的訪問通過調(diào)用接口內(nèi)定義的操作來實現(xiàn),操作是接口的核心,是服務(wù)請求的入口點接口清晰地劃分了服務(wù)實現(xiàn)與客戶之間的邊界IDL 接口接口 (Interface)p接口中定義的所有內(nèi)容都具有public屬性pIDL接口中不包含成員變量,客戶端所有的請求均通過調(diào)用接口中的相關(guān)操作來實現(xiàn)p每個CORBA對象只對應(yīng)一個接口,而每個接口則對應(yīng)于若干CORBA對象p換句話說:IDL接口對應(yīng)于C+類的定義,而CORBA對象則對應(yīng)于 C+類的實例IDL 接口接口 (Interface)pIDL接口組成一個名字空間p接口中可以嵌套其它的定義,如pConstant definition 常量定義pType def

32、inition 類型定義pException definition 異常定義pAttribute definition 屬性定義pOperation definition 操作定義p接口不支持嵌套定義接口的語法接口的語法interface Haystack exception NotFound unsigned long num_straws_searched; ; /異常定義異常定義 const unsigned long MAX_LENGTH = 10; /常量定義常量定義 readonly attribute unsigned long num_straws; /屬性定義屬性定義 typ

33、edef long Needle; /類型定義類型定義 typedef string Straw; void add(in Straw s); /操作定義操作定義 boolean remove(in Straw s); void find(in Needle n) raises(NotFound); ;接口的語法接口的語法u操作定義必須包括:操作定義必須包括:返回值類型返回值類型(非匿名類型);(非匿名類型);操作名字操作名字(不可重載);(不可重載);零個或多個參數(shù)聲明零個或多個參數(shù)聲明。操作不區(qū)分讀寫操作。操作不區(qū)分讀寫操作u例如:例如: interface simple void op(

34、); /注意:注意:void op(void)是錯誤的是錯誤的 /同樣:同樣:op();也是錯誤的也是錯誤的 ;u接口例子接口例子 :interface Primes typedef unsigned long prime; prime next_prime(in long n); void next_prime2(in long n, out prime p); void next_prime3(inout long n); ; u其中in表示從Client-Server; out表示從Server-ClientIDL 操作操作p操作簽名操作簽名(Signature)的一般形式為:的一般形式

35、為: oneway (param1,.,paramL)raises(except1,.,exceptN) context(name1,., nameM)p其中:其中:pOneway表示該操作為異步操作,表示該操作為異步操作,操作機(jī)制類似于UDP數(shù)據(jù)報通信,是一種不可靠的信息傳輸機(jī)制:返回類型必須為void;不包含out參數(shù)或inout參數(shù);不包含raise表達(dá)式p 是返回結(jié)果的類型是返回結(jié)果的類型p為接口中的操作提供名稱為接口中的操作提供名稱praises指示可能引發(fā)的異常處理指示可能引發(fā)的異常處理pcontext指示有效的請求環(huán)境信息指示有效的請求環(huán)境信息IDL 操作(續(xù))操作(續(xù))pCOR

36、BA保證發(fā)出請求的客戶總是可以接收到一個成功的返回或者一個異常p異常被分為兩類:用戶自定義異常和系統(tǒng)異常, IDL定義了29個系統(tǒng)異常,具有不同的名字,但共用同一個異常體p異常的聲明類似于IDL結(jié)構(gòu)類型exception CardExpired string expiration_date; ;exception CreditLimitExceeded unsigned long credit_limit; ;exception CardReportedStolen string reporting_instructions;unsigned long hotline_phone_number

37、; ;IDL 異常異常 (Exceptions)pIDL接口可定義公共屬性,屬性可以是只讀的(Read-only)或者可讀寫的(read-write),屬性定義不包含raise表達(dá)式p只讀屬性代表一個基本操作,可進(jìn)行讀操作p可讀寫屬性代表一對基本操作,可進(jìn)行讀寫操作IDL屬性屬性pinterface Thermostat readonly attribute short temperature; attribute short nominal_temp; ;p在語義上等價于:interface Thermostat short get_temperature(); short get_nomi

38、nal_temp(); void set_nominal_temp(in short t); ;p模塊是為IDL定義、創(chuàng)建、分離名字的空間,防止不同模塊中標(biāo)識之間的沖突p模塊可以嵌套;CORBAServices對模塊進(jìn)行了擴(kuò)充,每個服務(wù)定義一個或多個模塊p模塊內(nèi)的名字可通過如下方式引用:pPart:Assembly:ComponentWidgetIDL模塊模塊 (Modules)module Part typedef Assembly:Widget PartWidget; module ComponentPart typedef PartWidget ComponentWidget; ;IDL

39、IDL模塊定義的主要內(nèi)容模塊定義的主要內(nèi)容常量常量類型類型異常異常接口接口模塊模塊常量常量類型類型異常異常操作操作屬性屬性CORBA應(yīng)用開發(fā)典型的典型的CORBACORBA應(yīng)用開發(fā)過程應(yīng)用開發(fā)過程IDLIDLCompileIDLCompile客戶機(jī)客戶機(jī)服務(wù)器服務(wù)器ORB庫客戶機(jī)樁ORB庫服務(wù)器骨架客戶機(jī)程序開發(fā)者服務(wù)器程序開發(fā)者使用靜態(tài)調(diào)用的使用靜態(tài)調(diào)用的CORBACORBA應(yīng)用開發(fā)過程應(yīng)用開發(fā)過程IDL Fileidl2javaidl2cppidl2java客戶樁骨架Java CompileJava CompileC+ Compile客戶程序?qū)ο髮崿F(xiàn)Client ProgramObject

40、 ImplementORB內(nèi)核StubSkeleton客戶端和服務(wù)器端使用同一開發(fā)環(huán)境客戶端和服務(wù)器端使用同一開發(fā)環(huán)境客戶端和服務(wù)器端使用不同開發(fā)環(huán)境客戶端和服務(wù)器端使用不同開發(fā)環(huán)境pIONA 公司的Orbix:Orbix 是全球范圍內(nèi)部署最廣泛的企業(yè) CORBA 解決方案(企業(yè)版/標(biāo)準(zhǔn)版/大型主機(jī)版),為全球規(guī)模最大要求最高的面向服務(wù)的體系結(jié)構(gòu) (SOA) 提供了基礎(chǔ)結(jié)構(gòu)pInprise 公司的visibroker:提供visibroker for java,visibroker for dephi,visibroker for c+ 三個版本 ,主要實現(xiàn)了CORBA中的ORB核心技術(shù),同時

41、又為CORBA提供了一些擴(kuò)充功能pDigital 公司的ObjectBroker:.NET平臺一款開源O/R映射框架pIBM公司的ComponentBrokerpOOC公司的OminiBrokerORBORB產(chǎn)品產(chǎn)品一個簡單的一個簡單的CORBA應(yīng)用開發(fā)(自學(xué))應(yīng)用開發(fā)(自學(xué))p例:網(wǎng)格對象調(diào)用,客戶遠(yuǎn)程調(diào)用服務(wù)器網(wǎng)格對象Grid Object的get()和set()操作,開發(fā)環(huán)境為C+編程語言網(wǎng)格對象網(wǎng)格對象客戶機(jī)客戶機(jī)服務(wù)器服務(wù)器widthheightget(row,col)set(row,col,value用用IDL定義接口定義接口/grid.idlinterface Grid read

42、only attribute short height; readonly attribute short width; void set(in short row, in short col, in long value); void get(in short row, in short col, out short value);編譯編譯IDL文件文件grid.idl客戶機(jī)客戶機(jī)服務(wù)器服務(wù)器Grid.idlgridC.cc客戶機(jī)樁客戶機(jī)樁ORB客戶機(jī)庫客戶機(jī)庫gridS.cc服務(wù)器骨架服務(wù)器骨架ORB服務(wù)器庫服務(wù)器庫Grid.hh公用的說明公用的說明/grid.hhclass Grid :

43、 public virtual CORBA : Object public: static Grid_ptr_bind(); virtual CORBA : Short height(CORBA : Environment&); virtual CORBA : Short width(CORBA : Environment&); virtual void set(CORBA : Short row, CORBA : Short col, CORBA : Long value, CORBA : Environment&); virtual void get(CORBA : Short row, CORBA : Short col, CORBA : Environment&);編譯編譯grid.idl生成的文件生成的文件/用C+語言定義對象實現(xiàn)Grid_i#include “grid.hh”class

溫馨提示

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

評論

0/150

提交評論