CORBA技術(shù)簡介_第1頁
CORBA技術(shù)簡介_第2頁
CORBA技術(shù)簡介_第3頁
CORBA技術(shù)簡介_第4頁
CORBA技術(shù)簡介_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、CORBA技術(shù)簡介張日安張日安內(nèi)容概要 背景介紹背景介紹 CORBA系統(tǒng)基本組成系統(tǒng)基本組成 CORBA接口定義接口定義 簡單事例簡單事例背景介紹背景介紹分布環(huán)境的異構(gòu)性硬件平臺(tái)的異構(gòu)性:IBM主機(jī)、UNIX工作站、PC機(jī)、機(jī)器人等操作系統(tǒng)的異構(gòu)性:各種版本的U N I X 、Microsoft Windows、IBM OS/2、Macintosh等開發(fā)語言的異構(gòu)性:C、C+、Java、Delphi等網(wǎng)絡(luò)平臺(tái)的異構(gòu)性:Ethernet、FDDI、ATM和TCP/IP、IPXSPX等對(duì)象的主要特點(diǎn)對(duì)象的封裝特性內(nèi)部實(shí)現(xiàn)與外部借口相分離對(duì)象的繼承特性方便擴(kuò)展與擴(kuò)充對(duì)象技術(shù)+分布處理技術(shù)=分布對(duì)象計(jì)

2、算技術(shù)OMG組織的宗旨和組成 OMG組織(對(duì)象管理組織)致力于制訂、采納和吸收異構(gòu)環(huán)境下OO分布式應(yīng)用的開發(fā)和集成的標(biāo)準(zhǔn) OMG由11家公司成立于1989年4月, 其中包括3Com、American Airlines、Canon、Data General、Hewlett-Packard、Philips、Sun和Unisys。1989年10月,OMG作為一個(gè)獨(dú)立的非贏利性機(jī)構(gòu)開始運(yùn)行。目前,OMG組織擁有800多個(gè)會(huì)員 OMG組織由三個(gè)機(jī)構(gòu)組成: 平臺(tái)技術(shù)委員會(huì)(Platform Technology Committee) 領(lǐng)域技術(shù)委員會(huì)(Domain Technology Committee

3、) 體系結(jié)構(gòu)委員會(huì)(Architecture Board)OMG組織的成員2AB3MAdobeAir FranceAlcatelBASFBEA SystemsBellSouthBoeingBristol- MyersCAChevronCompaqConcept 5Credit SuisseDaimler- BenzDeere & Co.DHLDMSODNS TechEconomicaEDSEricssonEurocontrolExpersoftFord MotorFujitsuFuji ElectricGMD FokusHPHitachiIBMInpriseIONAJ. P. MorganKe

4、ele UnivLucentMetaphaseMicro FocusMicrosoftMitreNECNetscapeNTTNISTNokiaNortelNSAOraclePhilipsRationalReutersRicohSAPSherpaSNISprintSunTelefonicaTIBCOTU BerlinUnisysVISAW3CXeroxSoutheast Univ.OMG組織的OMA體系結(jié)構(gòu)對(duì)象請(qǐng)求代理ORB使對(duì)象在分布式環(huán)境中透明地收發(fā)請(qǐng)求和響應(yīng)對(duì)象服務(wù)是為使用和實(shí)現(xiàn)對(duì)象而提供的基本服務(wù)集合通用設(shè)施是為許多應(yīng)用提供的共享服務(wù)集合領(lǐng)域接口是為特定應(yīng)用領(lǐng)域提供的公共服務(wù)的集合應(yīng)用接

5、口是用戶應(yīng)用軟件自行提供的供他人使用的服務(wù)應(yīng)用接口領(lǐng)域接口通用設(shè)施對(duì)象服務(wù)對(duì)象請(qǐng)求代理(ORB)CORBA規(guī)范 CORBA規(guī)范的發(fā)展進(jìn)程 1991 CORBA 1.1規(guī)范發(fā)布 1991 第一個(gè)遵循CORBA規(guī)范的商業(yè)產(chǎn)品進(jìn)入市場 1993 CORBA 1.2規(guī)范發(fā)布 1994 CORBA 2.0 規(guī)范發(fā)布, 包括了CORBA互操作規(guī)范 1995 遵循CORBA 2.0規(guī)范的商業(yè)產(chǎn)品進(jìn)入市場 1997 CORBA 2.1規(guī)范發(fā)布,包括了COM/CORBA互操作規(guī)范 1998 CORBA 2.2規(guī)范發(fā)布,增加了POA,Java語言映射等 1999 CORBA 2.3規(guī)范發(fā)布,增加了傳值調(diào)用,Jav

6、a到IDL的反向映射,DCOM/CORFBA互操作等,并對(duì)語言映射部分進(jìn)行了調(diào)整 2000 CORBA 3.0規(guī)范CORBA 3.0規(guī)范 CORBA 3.0規(guī)范新增加的內(nèi)容包括: CORBA組件模型 異步消息傳輸 對(duì)象傳值 Java到IDL反向映射 Internet 防火墻 最小CORBA 實(shí)時(shí)CORBACORBA規(guī)范的設(shè)計(jì)哲學(xué) CORBA允許在不同對(duì)象間盡可能透明地傳遞請(qǐng)求 應(yīng)用可以跨越不同的應(yīng)用領(lǐng)域 支持服務(wù)(例如,名址映射)位于CORBA之外 CORBA具有平臺(tái)無關(guān)性 可以工作于不同的操作系統(tǒng)和網(wǎng)絡(luò)環(huán)境下 客戶和服務(wù)器可以位于不同的平臺(tái)上 CORBA具有編程語言無關(guān)性 可以支持多種編程語

7、言(面向?qū)ο蠹胺敲嫦驅(qū)ο蟮恼Z言) 客戶和服務(wù)器可以使用不同的編程語言開發(fā)ORB產(chǎn)品 考察ORB:支持平臺(tái)、支持語言、性能 商業(yè)ORB Orbix,IONA公司,完全支持CORBA 2.3規(guī)范 Visibroker,Inprise公司,4.0版完全支持2.3規(guī)范Netscape communicator瀏覽器嵌入Visibroker 自由ORB ORBit,遵循CORBA 2.2規(guī)范,支持C語言,性能較高 mico,GNU,OpenSource TAO,美國華盛頓大學(xué)分布式對(duì)象計(jì)算研究小組 omniORB,AT&T劍橋?qū)嶒?yàn)室CORBA實(shí)現(xiàn)系統(tǒng)ICL/ Peerlogic DAISIBM Comp

8、onent BrokerInprise VisibrokerBEA M3 (ne Iceberg)ThinkOne MICO Gerald Brose JacORBExpersoft CORBAplusIONA OrbixSun ChorusHitachi TPBrokerObjectShare Dist. Smalltalk OIS ORBExpressNetscape Navigator 4.0Lotus Notes 5.0Novell NetwareJavasoft Java/ IDL (in JDK 2)BBN CorbusParagon Software OakAT& T Labs

9、OmniORB 2.0Nortel RCP- ORBFujitsu ObjectDirectorNEC ObjectSpinnerGemstone GemORBDNS SmalltalkBrokerCORBA對(duì)象服務(wù) CORBA公共對(duì)象服務(wù)將(分布式)應(yīng)用軟件的開發(fā)中的基本服務(wù)和功能標(biāo)準(zhǔn)化,從而實(shí)現(xiàn)它們的可重用性,以降低開發(fā)的代價(jià) CORBA公共對(duì)象服務(wù)在COSS規(guī)范中加以定義 目前,OMG組織制訂了14種服務(wù):包括名錄服務(wù)、事件服務(wù)、永久對(duì)象服務(wù)、生命周期服務(wù)、并發(fā)控制服務(wù)、外部化服務(wù)、關(guān)系服務(wù)、事務(wù)服務(wù)、查詢服務(wù)、許可證服務(wù)、特征服務(wù)、時(shí)間服務(wù)、交易服務(wù)和安全服務(wù)領(lǐng)域接口 目前,OMG組織

10、建立了以下應(yīng)用領(lǐng)域技術(shù)委員會(huì): 基本事務(wù)對(duì)象 電子商務(wù)領(lǐng)域 金融領(lǐng)域 運(yùn)輸領(lǐng)域 制造領(lǐng)域 電信領(lǐng)域 醫(yī)療領(lǐng)域 生命科學(xué)領(lǐng)域CORBA系統(tǒng)基本組成單個(gè)ORB的體系結(jié)構(gòu)ORB核心動(dòng)態(tài)調(diào)用IDL樁ORB接口動(dòng)態(tài)構(gòu)架基本對(duì)象適配器IDL構(gòu)架用客戶程序服務(wù)對(duì)象實(shí)現(xiàn)程序?qū)ο笠?對(duì)象引用(Object Reference)是在一ORB范圍內(nèi)用以指定和標(biāo)識(shí)一個(gè)目標(biāo)服務(wù)對(duì)象的信息;是客戶使用服務(wù)器對(duì)象的“句柄” 對(duì)象引用與指針 CORBA對(duì)象與偽對(duì)象對(duì)象調(diào)用 調(diào)用請(qǐng)求 目標(biāo)對(duì)象的引用+操作名+操作參數(shù) 服務(wù)上下文(service context) 輸出:返回值或者異常信息 調(diào)用參數(shù) IN:從客戶到服務(wù)器的參數(shù)

11、 OUT:從服務(wù)器返回的參數(shù) INOUT:包括以上的兩方面OMG IDL語言 OMG IDL語言(Interface Definition Language)是一種獨(dú)立于編程語言、下層網(wǎng)絡(luò)和具體實(shí)現(xiàn)的數(shù)據(jù)類型和服務(wù)接口描述語言 OMG IDL語言借鑒了C+語言的語法,去掉了其中涉及實(shí)現(xiàn)語義的內(nèi)容,同時(shí)添加了若干適用于分布式系統(tǒng)的特征OMG IDL語言(續(xù)) OMG IDL語言基本數(shù)據(jù)類型: short,long,long long (signed/unsigned) float,double,long double char,wchar,boolean,octet OMG IDL語言構(gòu)造類型:

12、 struct,union,enum,sequence,string,wstring,array Any 對(duì)象引用Data Types接口與操作 接口 屬性定義 操作定義 數(shù)據(jù)結(jié)構(gòu)定義 用戶異常定義 操作定義調(diào)用語義+返回值類型+操作名+參數(shù)類型/方向+異常+上下文OMG IDL語言(示例)interface account exception NoMoney ; readonly attribute float balance; void makeLodgement (in float f); void makeWithdrawal (in float f) raises (NoMoney)

13、; ;IDL CompilerIDL DefinitionsIDL CompilerStubsSkeletons1.Define objects using IDL2.Run IDL file through IDL compiler3.Compiler uses language mappings to generate programming language specific stubs and skeletonsOMG IDL語言映射 IDL語言完全是一種描述性語言,而非編程語言。它沒有控制結(jié)構(gòu),因而不能用于實(shí)現(xiàn)客戶方程序和對(duì)象實(shí)現(xiàn)方程序 OMG組織已經(jīng)定義了OMG IDL語言到C、C

14、+、SmallTalk、Java、COBOL和Ada語言的映射 CORBA 系統(tǒng)的運(yùn)行原理樁樁 或或 D II編編 碼碼IIO P 消消 息息操操 作作 系系 統(tǒng)統(tǒng)TC P/IP對(duì)對(duì) 象象 適適 配配 器器解解 碼碼IIO P 消消 息息操操 作作 系系 統(tǒng)統(tǒng)客客 戶戶服服 務(wù)務(wù) 器器構(gòu)構(gòu) 架架 或或 D SIO R B 及及IIO PIDL樁和IDL構(gòu)架服務(wù)對(duì)象調(diào)用者服務(wù)對(duì)象服務(wù)對(duì)象調(diào)用者服務(wù)對(duì)象STUBSKELETONIDL樁和動(dòng)態(tài)調(diào)用接口(DII) IDL樁在這里所起的主要作用就是把請(qǐng)求從特定的編程語言的表示形式轉(zhuǎn)換為適于傳遞到目標(biāo)對(duì)象的形式 IDL樁是由IDL編譯器編譯目標(biāo)對(duì)象的IDL

15、接口描述文件而自動(dòng)產(chǎn)生的 IDL樁又被稱為靜態(tài)調(diào)用接口IDL樁和動(dòng)態(tài)調(diào)用接口(DII) 動(dòng)態(tài)調(diào)用接口(Dynamic Invocation Interface)由一組CORBA系統(tǒng)對(duì)象組成,這些對(duì)象提供給客戶動(dòng)態(tài)地創(chuàng)建和調(diào)用對(duì)象請(qǐng)求功能:NamedValue,NVList,Request DII中可以構(gòu)造三類調(diào)用操作: - 同步調(diào)用操作(Synchronous Invocation) - 延遲同步調(diào)用操作(Deferred Invocation) - 單向調(diào)用操作(Oneway Invocation)IDL構(gòu)架和動(dòng)態(tài)構(gòu)架接口(DSI) 構(gòu)架的作用:- 查找并將請(qǐng)求派發(fā)(Dispatch)到所要

16、求目標(biāo)對(duì)象的相應(yīng)操作- 對(duì)調(diào)用請(qǐng)求的參數(shù)進(jìn)行解碼,從傳輸格式轉(zhuǎn)化為對(duì)象實(shí)現(xiàn)所使用的編程語言的表示形式- 對(duì)調(diào)用請(qǐng)求的處理結(jié)果進(jìn)行編碼,從對(duì)象實(shí)現(xiàn)所使用的編程語言的表示形式轉(zhuǎn)換為傳輸格式IDL構(gòu)架和動(dòng)態(tài)構(gòu)架接口(DSI) 與IDL樁類似,IDL構(gòu)架也是根據(jù)目標(biāo)對(duì)象接口的IDL描述由IDL編譯器自動(dòng)產(chǎn)生的調(diào)用對(duì)象實(shí)現(xiàn)的部件 動(dòng)態(tài)構(gòu)架接口(Dynamic Skeleton Interface)允許動(dòng)態(tài)調(diào)用對(duì)象,對(duì)象實(shí)現(xiàn)需要實(shí)現(xiàn)動(dòng)態(tài)調(diào)用例程(Dynamic Invocation Routing)的接口,該接口名字為DynamicImplementation IDL樁和IDL構(gòu)架以及DII和DSI之間沒

17、有必須配對(duì)的限制對(duì)象適配器和基本對(duì)象適配器 對(duì)象適配器OA位于服務(wù)對(duì)象實(shí)現(xiàn)和ORB之間,提供對(duì)象登記、對(duì)象引用生成、服務(wù)激活等功能 CORBA 2.0規(guī)范中定義了基本對(duì)象適配器BOA,以滿足大多數(shù)對(duì)象實(shí)現(xiàn)的需要 BOA提供了以下功能:(1)產(chǎn)生和解釋對(duì)象引用;(2)對(duì)請(qǐng)求進(jìn)行認(rèn)證;(3)激活和去活實(shí)現(xiàn);(4)激活和去活單個(gè)對(duì)象;(5)構(gòu)架調(diào)用方法;(6)實(shí)現(xiàn)對(duì)象的登記對(duì)象適配器和基本對(duì)象適配器(續(xù)) 根據(jù)CORBA 2.0規(guī)范,BOA在激活對(duì)象實(shí)現(xiàn)應(yīng)用程序時(shí),支持四種實(shí)現(xiàn)激活方式: - 共享服務(wù)器方式(Shared Server ) - 非共享服務(wù)器方式(Unshared Server) -

18、每方法/服務(wù)器方式(Server-Per-Method) - 永久服務(wù)器方式(Persistent Server)POA可移植對(duì)象適配器 POA是在CORBA2.3規(guī)范中提出的以取代基本對(duì)象適配器BOA(Basic Object Adapter),這是因?yàn)锽OA在CORBA服務(wù)器中不易在ORBs之間移植。盡管CORBA 服務(wù)器端的移植性與應(yīng)用服務(wù)器關(guān)系不大。POA在應(yīng)用服務(wù)器上的應(yīng)用的最主要的好處是它提供了很大的靈活性:可以將抽象的CORBA對(duì)象映射成JAVA 對(duì)象,并且能控制資源的利用和Java對(duì)象的生命周期。 POA可移植對(duì)象適配器(續(xù)) 每一個(gè)CORBA服務(wù)器可以有多個(gè)POAs,每一個(gè)P

19、OA可以提供不同的功能或者支持不同的特性。而且每個(gè)POA都提供一個(gè)獨(dú)立的對(duì)象 生存空間,相應(yīng)有一套POA策略來決定這些寄存的對(duì)象如何被激活以及如何建立對(duì)象的參考。ApplicationObject Request Broker Implementation of CORBA specification Middleware product Conceptual Software Bus Hides location and implementation details HardwareOSDriversMiddlewareObject Request BrokerObject Request

20、Broker ORB API Permit operation invocation to be executed from the programming language used by the client org.omg.CORBA.ORB.init() in Java Object adaptor Allow the ORB to invoke operations on local implementations Forward the result of invocation to the remote client What if the client and the serv

21、er are not in the same system? Cooperation of ORBs Inter-ORB protocols Internet inter-ORB protocol (IIOP)Client Side of CORBAClient Side of CORBA Client IDL Stub Static invocation interface Methods and parameters are specified at compile time Data marshalling Dynamic invocation interface (DII) Metho

22、ds and parameters determined at runtime Client does not change because of change in server object At the expense of performance Interface repository (IR) Interface signatures Metadata ORB interface Provide standard functions for applications Access to IR Conversion of object references to stringsSta

23、tic vs. Dynamic Invocation Static invocation Easier and faster for the programmer Dynamic invocation More flexible But more complex To build a network management system like MIB browsing Which kind of invocation will you use?Invocation:Synchronous vs. Asynchronous Synchronous invocation Wait until A

24、synchronous invocation Doesnt need to wait CORBA does not provide asynchronous invocation But provide deferred synchronous requests ClientORB: object invocation ORBClient: object handle This handle can be used to query the status of the operation Client can invoke other requests without having to ge

25、nerate a threadServer Side of CORBAServer Side of CORBA Static skeletons Server IDL stub Dynamic skeleton interface DII in client side Useful in implementation of management gateways Gateways can adapt to new MOs without being compiled Object adaptor Provide a runtime environment Initialization of s

26、erver objects Transfer of requests from ORB to the running server object IR Store information about Server object definitions Sever object instantiations Object referencesInter-ORB ProtocolsInter-ORB Protocols Essential in communication between ORBs of different vendors General inter-ORB protocol (G

27、IOP) Defines the syntax and semantics of the messages exchanged between ORBs Internet inter-ORB Protocol (IIOP) Defines the mapping of GIOP to TCP How GIOP PDUs are put into TCP packetsGIOP/IIOP協(xié)議 GIOP協(xié)議:- 公共數(shù)據(jù)表示(CDR)- GIOP消息- GIOP消息傳輸機(jī)制 IIOP(Internet Inter-ORB Protocol)是GIOP的一種映射,它定義了用于Internet之上的O

28、RB間標(biāo)準(zhǔn)互操作協(xié)議,它利用的運(yùn)輸層協(xié)議就是Internet所采用的TCP協(xié)議GIOP/IIOP協(xié)議(續(xù)) GIOP協(xié)議版本 GIOP 1.0(CORBA 2.0) 包含7種消息: Request, CancelRequest, LocateRequest(發(fā)自client方) Reply, Locateeply, CloseConnection(發(fā)自server方) MessageError(發(fā)自雙方) GIOP 1.1(CORBA 2.1) 在GIOP 1.1的基礎(chǔ)上增加了Fragment消息,該消息可以發(fā)自雙方 GIOP 1.2(CORBA 2.3)Interoperable Objec

29、t Reference (IOR)Pointer to distributed objectIOR includes information:IIOP versionDescribes the IIOP version implemented by the ORB HostIdentifies the TCP/IP address of the ORBs host machine PortSpecifies the TCP/IP port number where the ORB is listening for client requests KeyValue uniquely identi

30、fies the object to the ORB exporting the servant ComponentsA sequence that contains additional information applicable to object method invocations, such as supported ORB services and proprietary protocol supportInteroperable Object Reference (IOR)IOR structure is not important to CORBA programmersIO

31、R structure can be stringified IOR String Orb.object_to_string() Exchange of IOR strings can advertise objectsMethods to publish objects Writing IOR strings into a shared folder Assuming all of the clients supports a common DFS Web publishing客戶端C+ mapping 客戶通過stub調(diào)用對(duì)象的方法 客戶如何得到對(duì)象引用 客戶如何調(diào)用對(duì)象方法客戶端C+ m

32、apping 客戶通過ORB接口獲得初始的對(duì)象引用 首先初始化ORB并獲得ORB接口 然后利用字符串形式的引用獲得內(nèi)部的對(duì)象引用int main( int argc, char *argv ) / ORB initialization CORBA:ORB_var orb = CORBA:ORB_init( argc, argv, local-orb ); CORBA:Object_var obj = orb-string_to_object( argv1 ); Account_var client = Account:_narrow( obj ); client-deposit( 700 );

33、 client-withdraw( 250 ); cout Balance is balance() resolve_initial_references (RootPOA); PortableServer:POA_var poa = PortableServer:POA:_narrow (poaobj); PortableServer:POAManager_var mgr = poa-the_POAManager(); Account_impl * account = new Account_impl; PortableServer:ObjectId_var oid = poa-activa

34、te_object (account); / Write reference to file mgr-activate (); orb-run(); poa-destroy (TRUE, TRUE); delete micocash; return 0;POA: Portable Object Adapter POA負(fù)責(zé)創(chuàng)建對(duì)象引用、激活對(duì)象以及分發(fā)請(qǐng)求 POA負(fù)責(zé)從CORBA對(duì)象到servant之間的對(duì)應(yīng) CORBA對(duì)象與servant對(duì)象的生命周期相互分開 POA對(duì)于CORBA服務(wù)器在性能、資源利用、可伸縮性等方面具有重要的意義 POA策略,控制: 對(duì)象生命周期:永久對(duì)象、暫態(tài)對(duì)象 對(duì)象標(biāo)

35、識(shí)符:在POA范圍內(nèi)唯一 POA Active Object Map:從ObjectID到servant的映射 請(qǐng)求處理策略:servant manager 線程模型 POA: Portable Object Adapter(續(xù)) POA的編程 所有的工作都從RootPOA開始 所有的POA構(gòu)成一個(gè)樹狀層次結(jié)構(gòu) 利用RootPOA的create_POA創(chuàng)建新的POA 在創(chuàng)建POA時(shí)指定策略,CORBA:PolicyList POA提供的功能 創(chuàng)建對(duì)象 注冊(cè)servant,激活對(duì)象 提供ObjectID、ObjectReference之間的轉(zhuǎn)換 servant manager編程 POA man

36、ager:控制來自客戶的請(qǐng)求 多個(gè)POA可以共享同一個(gè)POA manager ORB事件處理服務(wù)器端C+ mapping(續(xù)四) 利用idl生成的框架類編寫servant類 編寫main函數(shù) 從ORB初始化開始 考慮POA的策略,簡單的程序可以使用默認(rèn)的RootPOA 創(chuàng)建servant并注冊(cè) 處理對(duì)象引用 進(jìn)入主循環(huán) 阻塞方式:orb-run() 非阻塞方式:orb-work_pending()orb-perform_work()用C+開發(fā)CORBA應(yīng)用 基本的C+知識(shí),包括鏈表結(jié)構(gòu)、智能指針的知識(shí) 針對(duì)當(dāng)前使用的ORB產(chǎn)品,熟悉對(duì)于基本數(shù)據(jù)類型的支持,以及這些類型與當(dāng)前平臺(tái)上各數(shù)據(jù)類型的關(guān)

37、系 理解CORBA的client/server應(yīng)用模型 包含頭文件 鏈接庫文件 掌握IDL編譯器 掌握ORB接口 如何傳遞對(duì)象引用ORB接口 初始:CORBA:ORB_Init,通過命令行傳遞參數(shù) 對(duì)象引用到字符串的轉(zhuǎn)換操作 對(duì)象引用:CORBA:Object 獲得初始接口 resolve_initial_referenceDII:Dynamic Invocation Interface 客戶程序可以不通過IDL編譯器生成的stub而調(diào)用對(duì)象的方法,步驟: 客戶首先得到對(duì)象引用:CORBA:Object_ptr 創(chuàng)建一個(gè)請(qǐng)求對(duì)象CORBA:Request_ptr 把調(diào)用參數(shù)放到鏈表中:CORB

38、A:NVList_ptr,指明類型和數(shù)值,也指明返回值 調(diào)用CORBA:Request_ptr-Invoke方法 服務(wù)器并不知道客戶程序是通過stub還是DII調(diào)用其方法的 客戶程序在編譯時(shí)刻可以沒有idl類型知識(shí) 比較:COM Automation中IDispatch接口的用法用C+開發(fā)CORBA應(yīng)用:客戶 用IDL生成stub代碼以及類型定義頭文件 在客戶的main函數(shù)中,初始化orb,獲得orb對(duì)象 獲得對(duì)象引用,并調(diào)用_narrow向下轉(zhuǎn)換 調(diào)用對(duì)象的方法 如果使用DII,則需要用到請(qǐng)求對(duì)象,并處理參數(shù) 如果不用_var類型的話,釋放orb和對(duì)象引用DSI:Dynamic Skelet

39、on Interface 服務(wù)器程序可以動(dòng)態(tài)實(shí)現(xiàn)對(duì)象,而不利用IDL編譯器生成的skeleton代碼 服務(wù)器實(shí)現(xiàn)一個(gè)對(duì)象,如下所示class GenericServant : virtual public PortableServer:DynamicImplementation virtual void invoke (CORBA:ServerRequest_ptr req); virtual CORBA:RepositoryId _primary_interface (const PortableServer:ObjectId &, PortableServer:POA_ptr); main

40、函數(shù)的處理不變 重點(diǎn)在于invoke函數(shù),利用CORBA:ServerRequest對(duì)象獲得所有的類型信息 對(duì)于客戶透明 比較:COM Automation中IDispatch接口的實(shí)現(xiàn)用C+開發(fā)CORBA應(yīng)用:服務(wù)器 用IDL生成skeleton代碼以及類型定義頭文件 在客戶的main函數(shù)中,初始化orb,獲得orb對(duì)象 根據(jù)服務(wù)器應(yīng)用的需要,處理POA 創(chuàng)建servant對(duì)象 如果使用DSI,那么invoke方法是servant對(duì)象的關(guān)鍵 如何把對(duì)象引用傳遞出去?字符串?名字服務(wù)? 調(diào)用orb-run()或者orb-perform_work()CORBA IIOP和IOR General

41、Inter-ORB Protocol:CORBA定義了GIOP作為其互用性框架結(jié)構(gòu),包括數(shù)據(jù)傳輸、數(shù)據(jù)表示、消息格式 Internet Inter-ORB Protocol:IIOP是GIOP的具體實(shí)現(xiàn),建立在TCP/IP基礎(chǔ)上 IOR:Interoperable object referenceRepositoryID Data for Protocol 1 Data for Protocol 2 Endpoint Info Object KeyObject IDIOR例子 Repo Id: IDL:GenericServer:1.0IIOP Profile Version: 1.0 Add

42、ress: inet:00:12122 Location: corbaloc:96:12122/25607/991958392/%5f0 Key: 2f 32 35 36 30 37 2f 39 39 31 39 35 38 33 39 32 /25607/991958392 2f 5f 30 /_0Multiple Components Profile Components: Native Codesets: normal: ISO 8859-1:1987; Latin Alphabet No. 1 wide: ISO/IEC 10646-1

43、:1993; UTF-16, UCS Transformation Format 16-bit form Key: 00 .naming serviceCORBA services:naming service 建立起“名稱-對(duì)象引用”的映射關(guān)系 在內(nèi)部以層次結(jié)構(gòu)的形式組織名字映射,類似于文件系統(tǒng)的結(jié)構(gòu)。 所有的類型和接口定義位于CosNaming域中 NamingContext接口負(fù)責(zé)所有有關(guān)命名服務(wù)相關(guān)的功能,例如: 創(chuàng)建新的context、刪除context bind操作、unbind操作 resolve操作 怎樣獲得初始namingcontext? 通過orb-resolve_init

44、ial_reference ORB廠商應(yīng)該提供命名服務(wù)工具naming service示例 CORBA:Object_var nsobj = orb-resolve_initial_references (NameService); CosNaming:NamingContext_var nc = CosNaming:NamingContext:_narrow (nsobj); CosNaming:Name name; name.length (1); name0.id = CORBA:string_dup (myAccount); name0.kind = CORBA:string_dup

45、();/ 服務(wù)器方 Account_ptr acc = new Account_impl (); nc-bind (name, acc);/ 客戶方 CORBA:Object_var obj; obj = nc-resolve (name); Account_var client = Account:_narrow( obj );CORBA services:其他服務(wù) Event service 提供松耦合事件模型的機(jī)制 Trade Service 提供了更加靈活的對(duì)象查找服務(wù) Time Service 提供了與時(shí)間有關(guān)的服務(wù),統(tǒng)一了時(shí)間的表達(dá)方式 Concurrency service Security Service Transaction Service CORBA基本概念基本概念1、CORBA(Common Object Request Broker Architecture)公共對(duì)象請(qǐng)求代理程序體系結(jié)構(gòu))。CORBA是一個(gè)規(guī)范(specification)而不是程序?qū)崿F(xiàn) (implementation)。它提供了一個(gè)允許在分布式和異構(gòu)型環(huán)境中應(yīng)用程序之間進(jìn)行互操作的框架。 2、ORB(Object Request Broker)對(duì)象請(qǐng)求代理:它作為一個(gè)“軟件總線”來連接網(wǎng)絡(luò)上的不同對(duì)象,提供對(duì)象的定位和方法調(diào)用,它是

溫馨提示

  • 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)論