基于CORBA技術(shù)的程序設(shè)計(jì)方法課件_第1頁
基于CORBA技術(shù)的程序設(shè)計(jì)方法課件_第2頁
基于CORBA技術(shù)的程序設(shè)計(jì)方法課件_第3頁
基于CORBA技術(shù)的程序設(shè)計(jì)方法課件_第4頁
基于CORBA技術(shù)的程序設(shè)計(jì)方法課件_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基于CORBA技術(shù)的程序設(shè)計(jì)方法

基本概念-CORBA的基本定義

隨著計(jì)算機(jī)體系結(jié)構(gòu)的發(fā)展,產(chǎn)生了分布式系統(tǒng)和面向?qū)ο蟪绦蛟O(shè)計(jì)理論,促進(jìn)了計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)通信技術(shù)的發(fā)展。CORBA(CommonObjectRequestBrokerArchitecture,公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu))是一種標(biāo)準(zhǔn)的面向?qū)ο髴?yīng)用程序體系規(guī)范,是OMG為解決分布式處理環(huán)境(DCE)中,硬件和軟件系統(tǒng)的互連而提出的一種解決方案。CORBA的核心是一套標(biāo)準(zhǔn)的語言、接口和協(xié)議,以支持異構(gòu)分布應(yīng)用程序間的互操作性及獨(dú)立于平臺(tái)和編程語言的對(duì)象重用。CORBA具有與操作系統(tǒng)的獨(dú)立性和編程語言的獨(dú)立性,是目前實(shí)現(xiàn)分布式系統(tǒng)和面向?qū)ο蟪绦蛟O(shè)計(jì)的最新技術(shù)和思想之一,是實(shí)現(xiàn)異構(gòu)系統(tǒng)聯(lián)網(wǎng)的最先進(jìn)的方法?;靖拍睿瑿ORBA的發(fā)展歷史CORBA最初是OMG在1990年11月出版的《對(duì)象管理體系指南》中定義的。在這過去的14年中,CORBA的發(fā)展經(jīng)歷如下:1991年10月,OMG推出了CORBA1.0版,其中定義了接口定義語言(IDL)、對(duì)象管理模型以及基于動(dòng)態(tài)請(qǐng)求的API和接口倉庫等內(nèi)容;1991年12月,OMG推出了CORBA1.1版,在澄清了1.0版中存在的二義性的基礎(chǔ)上,引入了對(duì)象適配器的概念;1996年8月,OMG基于以前的升級(jí)版本,完成了2.0版的開發(fā),該版本中重要的內(nèi)容是對(duì)象請(qǐng)求代理間協(xié)議(IIOP,InternetInter-ORBProtocol)的引入,用以實(shí)現(xiàn)不同廠商的ORB真正意義上的互通;1998年9月,OMG發(fā)表了CORBA2.3版,增加了支持CORBA對(duì)象的異步實(shí)時(shí)傳輸、服務(wù)質(zhì)量規(guī)范等內(nèi)容;基本概念-CORBA的發(fā)展歷史2001年9月,OMG發(fā)布最新的CORBA2.5標(biāo)準(zhǔn),在這個(gè)版本中,加入了一些新的內(nèi)容,包括:CORBA容錯(cuò)(FaultTolerantCORBA),實(shí)時(shí)CORBA(Real-TimeCORBA),并修改了部分CORBAMessaging和PortableInterceptors的內(nèi)容;2002年8月,OMG發(fā)表了CORBA3.0版,CORBA3的這些規(guī)范增強(qiáng)了CORBA性能和可用性,但是在CORBA3.0規(guī)范中去掉了MiniCORBA和實(shí)時(shí)CORBA。從這些規(guī)范中可以很清晰的分為三大類:Java和Internet的集成;服務(wù)質(zhì)量(Qos)控制;CORBA組件體系。目前相關(guān)的CORBA產(chǎn)品比較有名的如下:IONA公司的Orbix;Inprise公司的VisiBroker;Digital公司的ComponentBroker;IBM公司的ComponentBroker;SunMicrosystems公司的NEO、JOE;SunSoft公司的DOE;東南大學(xué)開發(fā)研制的ORBUS等?;靖拍睿瑿ORBA的技術(shù)基礎(chǔ)CORBA是一種編程方法,更是吸收了程序設(shè)計(jì)中的面向?qū)ο蠹夹g(shù)、分布式計(jì)算技術(shù)、多層體系結(jié)構(gòu)技術(shù)、多線程技術(shù)以及接口技術(shù)的一種綜合技術(shù)。CORBA采用了面向?qū)ο蠹夹g(shù),CORBA2.0是完全基于面向?qū)ο蠹夹g(shù)的。目前,CORBA3.0則是基于Component(組件)的方向發(fā)展。Component可以認(rèn)為是更高級(jí)別上的“類”。它可以在不同語言中實(shí)現(xiàn)。實(shí)際上,Component是經(jīng)過包裝處理的一組類。CORBA采用了分布式計(jì)算模型,事實(shí)上,CORBA、COM/DCOM都采用了分布式計(jì)算模型(資源、功能、任務(wù)、控制等都分布的系統(tǒng))。CORBA采用了多層體系結(jié)構(gòu)。

基本概念-多層體系結(jié)構(gòu)基本概念-多層體系結(jié)構(gòu)CORBA本身是位于中間層的中間件(Middleware),CORBA關(guān)心的是對(duì)象的互操作,因此在資源層依舊包含有數(shù)據(jù)的操作。CORBA是OMG公司聯(lián)盟的產(chǎn)品,各種服務(wù)只能由不同的公司提供,因此在體系結(jié)構(gòu)的第二層更關(guān)心的是兼容性,互通性。CORBA采用了接口技術(shù),接口技術(shù)主要用于解決兩個(gè)問題(1)如何提供一種清晰的設(shè)計(jì)標(biāo)準(zhǔn),使得軟件開發(fā)在總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、具體編碼階段以及維護(hù)階段都能夠保持各自的獨(dú)立性與一致性。(2)如何提供一種包裝方式,使得軟件開發(fā)可以在不同程序語言中實(shí)現(xiàn)。采用接口技術(shù)以后,無論采用哪種編程語言,操作都可以被成功的激發(fā)、調(diào)用。Component就可以被看作是用接口包裝的、跨語言的“類”。基本概念-分布式計(jì)算上世紀(jì)80年代以來,分布式計(jì)算的需求越來越大。分布式計(jì)算的特點(diǎn)是:分布的應(yīng)用程序--運(yùn)行在組成一個(gè)網(wǎng)絡(luò)的機(jī)器上的應(yīng)用程序。將原始代碼集成進(jìn)新的系統(tǒng)。使用不同語言來寫新的組件或?qū)υ即a進(jìn)行封裝。在CORBA沒有出現(xiàn)之前的分布式計(jì)算解決方案:采用Remoteprocedurecalls(RPCs)遠(yuǎn)程過程調(diào)用使得應(yīng)用程序的函數(shù)可以由一臺(tái)機(jī)器上的client調(diào)用,而由另一臺(tái)機(jī)器上的server執(zhí)行。封裝性不好其它的問題,如:請(qǐng)求的排隊(duì)處理,事件通知、事務(wù)管理...CORBA出現(xiàn)之后的分布式計(jì)算解決方案:CORBA--RPC和面向?qū)ο蟾拍畹募象w,即:CORBA=

RPC+面向?qū)ο蟾拍睿靖拍睿植际接?jì)算CORBA--RPC和面向?qū)ο蟾拍畹募象w突出兩個(gè)概念:分布式組件(distributedcomponent)基于接口的編程(interface-basedprogramming)一些概念,如集成、委托、動(dòng)態(tài)綁定在CORBA里得到了保留。CORBA基本模型對(duì)象管理體系結(jié)構(gòu)OMG(ObjectManagementGroup)OMA(ObjectManagementArchitecture)CORBA體系結(jié)構(gòu)OMG的對(duì)象模型ORB(ObjectRequestBroker)對(duì)象接口定義Client發(fā)送請(qǐng)求對(duì)象實(shí)現(xiàn)接受請(qǐng)求CORBA主要技術(shù)CORBA規(guī)范與CORBA產(chǎn)品規(guī)范:CORBA1.02.03.0產(chǎn)品:商業(yè)的、免費(fèi)的返回要點(diǎn)對(duì)象管理體系結(jié)構(gòu)OMG(/)全稱:ObjectManagementGroup(對(duì)象管理組織)是一個(gè)非盈利性的組織,成立于1989年,現(xiàn)有800多個(gè)成員公司。他們包括DEC、Microsoft、Netscape、Oracle、Novell、IBM、Inprise、Informix、Iona、Hewlett-Packed、Roguewave、Sybase、Sun等許多著名公司。OMG正在致力于推廣在現(xiàn)有的技術(shù)基礎(chǔ)上集成應(yīng)用程序的面向?qū)ο髽?biāo)準(zhǔn),其目標(biāo)是開發(fā)一種技術(shù)上先進(jìn)和商業(yè)上可用,獨(dú)立于廠商的軟件工業(yè)規(guī)范。OMG是CORBA規(guī)范的制定者。

目標(biāo):促進(jìn)在分布式系統(tǒng)開發(fā)中面向?qū)ο蠹夹g(shù)的理論與實(shí)踐的發(fā)展。OMG的職能是制定規(guī)范,而不是具體實(shí)現(xiàn)OMA全稱:ObjectManagementArchitecture(對(duì)象管理體系結(jié)構(gòu)),是包括CORBA規(guī)范在內(nèi)的所有OMG規(guī)范的概念模型基礎(chǔ)。OMGOMG制定的主要規(guī)范:UML:UnifiedModelingLanguage(統(tǒng)一建模語言)面向?qū)ο蠓治雠c設(shè)計(jì)階段的表示技術(shù)的規(guī)范;Rational公司的RationalRose是目前最流行的UML軟件工具。CORBA:CommonObjectRequestBrokerArchitecture保證了應(yīng)用程序的可互操作性以及對(duì)于硬件平臺(tái)、操作系統(tǒng)、編程語言以及網(wǎng)絡(luò)與通信協(xié)議的無關(guān)性。包含一系列單獨(dú)的規(guī)范ORB體系結(jié)構(gòu)OMG接口定義語言IDL網(wǎng)絡(luò)通信協(xié)議GIOP和IIOP可移植對(duì)象適配器POACORBA組件模型CCMOMAOMA是CORBA所基于的概念框架,它描述了一個(gè)較高層次的分布式計(jì)算環(huán)境。OMA正式規(guī)范:ObjectManagementArchitectureGuide(OMG發(fā)布)描述了OMA的技術(shù)目標(biāo)和相關(guān)術(shù)語為所有CORBA規(guī)范提供了概念性的基礎(chǔ)設(shè)施。OMA核心內(nèi)容:對(duì)象模型:定義了對(duì)象外部可見特征的、獨(dú)立于具體實(shí)現(xiàn)的語義。參考模型:標(biāo)識(shí)與刻劃了組成OMA的組件、接口與協(xié)議。

OMA參考模型公共設(shè)施領(lǐng)域接口對(duì)象請(qǐng)求代理(ORB)應(yīng)用程序接口對(duì)象服務(wù)通用服務(wù)的接口與應(yīng)用有關(guān)的非標(biāo)準(zhǔn)化接口與應(yīng)用領(lǐng)域有關(guān)的接口通用設(shè)施的接口圖3OMA參考模型OMA參考模型對(duì)象服務(wù)是基于分布式對(duì)象的所有應(yīng)用程序都可能用到的通用服務(wù)的接口。公共設(shè)施是可用于大多數(shù)應(yīng)用領(lǐng)域的面向終端用戶的工具接口。對(duì)象服務(wù)與公共設(shè)施的主要區(qū)別在于對(duì)象服務(wù)比公共設(shè)施更加基本。領(lǐng)域接口是與具體領(lǐng)域有關(guān)的接口。應(yīng)用接口則是與應(yīng)用領(lǐng)域有關(guān)的非標(biāo)準(zhǔn)化接口。OMA參考模型對(duì)象服務(wù)是基于分布式對(duì)象的所有應(yīng)用程序都可能用到的通用服務(wù)的接口。公共設(shè)施是可用于大多數(shù)應(yīng)用領(lǐng)域的面向終端用戶的工具接口。對(duì)象服務(wù)與公共設(shè)施的主要區(qū)別在于對(duì)象服務(wù)比公共設(shè)施更加基本。領(lǐng)域接口是與具體領(lǐng)域有關(guān)的接口。應(yīng)用接口則是與應(yīng)用領(lǐng)域有關(guān)的非標(biāo)準(zhǔn)化接口。從軟件體系結(jié)構(gòu)的角度看,OMA的各個(gè)組件形成一種層次設(shè)計(jì)風(fēng)格,位于最上層的是應(yīng)用程序接口,往下依次為領(lǐng)域接口、公共設(shè)施和對(duì)象服務(wù),最底層是對(duì)象請(qǐng)求代理組件。上層組件可跨層調(diào)用底層的組件,例如在應(yīng)用程序中可直接調(diào)用公共設(shè)施和對(duì)象服務(wù)提供的功能。CORBA體系結(jié)構(gòu)OMG的對(duì)象模型對(duì)象模型描述了對(duì)象外部特征的標(biāo)準(zhǔn)語義。對(duì)象、類型、操作、屬性、對(duì)象實(shí)現(xiàn)等語義與Java,C++,Eiffel等面向?qū)ο蟪绦蛟O(shè)計(jì)語言十分相近,但同時(shí)具有組件的特征??蛻舫绦蚍?wù)對(duì)象ORB(ObjectRequestBroker,對(duì)象請(qǐng)求代理)ORB是OMA的核心基礎(chǔ)設(shè)施,CORBA底層通信的核心。主要功能:負(fù)責(zé)完成查找請(qǐng)求的對(duì)象實(shí)現(xiàn)、讓對(duì)象實(shí)現(xiàn)準(zhǔn)備好接收請(qǐng)求、傳遞構(gòu)成請(qǐng)求的數(shù)據(jù)等任務(wù)所需的全部機(jī)制。規(guī)定了分布對(duì)象的定義(接口)和語言映射,實(shí)現(xiàn)對(duì)象間的通訊和互操作,是分布對(duì)象系統(tǒng)中的“軟總線”。ORB–ORB核心結(jié)構(gòu)圖客戶程序?qū)ο髮?shí)現(xiàn)動(dòng)態(tài)調(diào)用接口IDLStubORB接口靜態(tài)IDLSkeleton動(dòng)態(tài)框架對(duì)象適配器ORB內(nèi)核對(duì)于所有的ORB實(shí)現(xiàn)都相同的接口每一對(duì)象類型都有樁和一個(gè)框架可能有多個(gè)對(duì)象適配器依賴于ORB具體實(shí)現(xiàn)的接口向上調(diào)用接口向下調(diào)用接口返回上頁ORB介紹對(duì)象接口定義客戶程序:想要執(zhí)行對(duì)象上操作的實(shí)體;對(duì)象實(shí)現(xiàn)(服務(wù)端):真正實(shí)現(xiàn)該對(duì)象的代碼與數(shù)據(jù)。接口采用IDL(InterfaceDefinitionLanguage)語言描述。客戶程序?qū)ο髮?shí)現(xiàn)接口接口對(duì)象接口定義客戶程序只能通過對(duì)象的接口定義掌握對(duì)象的邏輯結(jié)構(gòu),并通過發(fā)送請(qǐng)求來影響對(duì)象的行為與狀態(tài)??蛻舫绦虿槐亓私鈱?duì)象實(shí)現(xiàn)的具體實(shí)現(xiàn)方式,也不必知道該對(duì)象實(shí)現(xiàn)采用哪個(gè)對(duì)象適配器以及需要用哪個(gè)ORB訪問該對(duì)象實(shí)現(xiàn)。CORBA通過對(duì)象接口進(jìn)一步延伸了傳統(tǒng)程序設(shè)計(jì)語言的封裝與信息隱藏概念。Client發(fā)送請(qǐng)求客戶程序?qū)⒄?qǐng)求發(fā)送給ORB內(nèi)核,然后由ORB內(nèi)核將請(qǐng)求轉(zhuǎn)發(fā)給對(duì)象實(shí)現(xiàn)。兩種方式:靜態(tài)調(diào)用(SII)動(dòng)態(tài)調(diào)用(DII)--這兩種調(diào)用方式從外在形式上看,具有完全相同的能力(即兩者的調(diào)用語義相同),對(duì)象實(shí)現(xiàn)并不知道請(qǐng)求從客戶端是如何發(fā)出的。但實(shí)現(xiàn)的方式是不同的。Client發(fā)送請(qǐng)求靜態(tài)調(diào)用靜態(tài)調(diào)用借助于客戶程序樁(stub)完成,即事先需要生成客戶程序樁。樁與框架在編譯時(shí)創(chuàng)建并且在運(yùn)行時(shí)不再改變,所以這些接口稱為SII。IDL樁負(fù)責(zé)客戶程序的實(shí)現(xiàn)語言與ORB內(nèi)核之間的映射??蛻舫绦蜷_發(fā)者必須在程序編譯之前就知道操作的名字和所有參數(shù)與返回值的類型,實(shí)際的操作名字、參數(shù)值和返回值是編寫在應(yīng)用程序的源代碼中。Client發(fā)送請(qǐng)求動(dòng)態(tài)調(diào)用DII允許客戶程序調(diào)用在編譯客戶程序時(shí)尚未確定對(duì)象接口的對(duì)象實(shí)現(xiàn)??蛻舫绦蚴褂肈II時(shí)必須生成一個(gè)請(qǐng)求,其中包括對(duì)象引用、操作以及參數(shù)表。使用DII的應(yīng)用程序訪問對(duì)象實(shí)現(xiàn)提供的服務(wù)時(shí),不必包含由IDL編譯器生成的樁,只需在運(yùn)行時(shí)訪問ANY對(duì)象。代價(jià):程序員必須用DII接口指定操作和每個(gè)參數(shù)的類型與值,并且由程序員自己利用CORBA定義的類型碼(typecode)作類型檢查。Client發(fā)送請(qǐng)求:SIIorDII??選擇這兩種調(diào)用方式的基本原則:如果應(yīng)用程序可以用SII實(shí)現(xiàn),那么就應(yīng)使用SII,這是因?yàn)镈II需要更多的編碼(本質(zhì)上是要由程序員自己完成樁的所有任務(wù))并且運(yùn)行效率更低,并且編譯器無法幫助檢查類型和優(yōu)化代碼。后面的例子也是用的靜態(tài)調(diào)用方式(即編譯IDL文件時(shí)需生成客戶樁)

對(duì)象實(shí)現(xiàn)接受請(qǐng)求ORB通過IDL框架或DSI查找合適的實(shí)現(xiàn)代碼、傳送參數(shù),并將控制傳給對(duì)象實(shí)現(xiàn),對(duì)象實(shí)現(xiàn)執(zhí)行請(qǐng)求時(shí)可通過對(duì)象適配器OA(ObjectAdapter)獲取ORB的某些服務(wù),請(qǐng)求完成后控制與結(jié)果返回給客戶程序。方式:靜態(tài)方式(使用框架skeleton)

動(dòng)態(tài)方式(DSI)

多用靜態(tài)方式對(duì)象的ID和名稱所有的CORBA對(duì)象都有一個(gè)唯一的標(biāo)識(shí)符:IOR(InteroperableObjectReferences)。這個(gè)標(biāo)識(shí)符是由機(jī)器產(chǎn)生,編程中并不會(huì)直接用到。一個(gè)命名對(duì)象(namedobject)有一個(gè)唯一的、好記的名字,客戶可以通過這個(gè)名字訪問到對(duì)象。服務(wù)端進(jìn)程發(fā)布一個(gè)或多個(gè)的命名對(duì)象,客戶端進(jìn)程沒有命名對(duì)象。ObjectRequestBroker(ORB)運(yùn)行在每一個(gè)CORBA進(jìn)程里,職責(zé)是同其它ORB通信.作為對(duì)象間的通信總線.

ORB之間的通信協(xié)議是GIOP.點(diǎn)這里看ORB結(jié)構(gòu)圖WhatanORBDoes定位對(duì)象:決定消息(調(diào)用)將要被送往哪個(gè)對(duì)象。如果對(duì)象是在另外一個(gè)進(jìn)程里,把消息送往那個(gè)進(jìn)程所在的ORB中。如果對(duì)象在和ORB的同一個(gè)進(jìn)程里,保證這個(gè)對(duì)象做好了接受請(qǐng)求的準(zhǔn)備,并把參數(shù)傳給對(duì)象。CORBAInterfaceDefinitionLanguage(IDL)IDL是CORBA基于接口編程(interface-centricprogramming)的基礎(chǔ),它使得接口的編寫與具體語言選擇無關(guān)。特殊的語言編譯器會(huì)將IDL描述文件轉(zhuǎn)換成特殊語言的源代碼,然后在此源代碼的基礎(chǔ)上實(shí)現(xiàn)接口。IDL只是一種簡單的描述性語言,是為了將規(guī)范映射到各種具體編程語言中,本身不完成任何操作。

IDL語法基于C++的一些概念和語法支持typedefs,unions,enumeratedtypes,sequences需要用特殊的編譯器將IDL文件翻譯成與語言有關(guān)的接口,比如想將IDL翻譯成C++,需要用IDL2CPP編譯器IDL語法--ModulesIDL使用module結(jié)構(gòu)來創(chuàng)建名字空間。模塊將相關(guān)的定義組合成一個(gè)邏輯組,防止與全局名字空間混淆。一個(gè)模塊有三部分:structure定義、exception定義和interface定義。moduleM{

structS1{…};

structS2{…}; … exceptionE1{…}; exceptionE1{…}; … interfaceI1{…}; interfaceI1{…}; …};IDL語法--Structuresstruct

MyData{ shortx; stringy;

AnotherStructs;

MyInterfaceo;};IDL語法(cont.)--ExceptionsCORBA中處理錯(cuò)誤的標(biāo)準(zhǔn)方式。在語法上與structure一樣–有一個(gè)名字,還有一些成員數(shù)據(jù),這些數(shù)據(jù)在發(fā)生異常時(shí)將會(huì)被傳送

。exceptionOops{ stringwhatiswrong; longexceptioncode;};IDL語法(cont.)--Interfaces遠(yuǎn)程對(duì)象的接口在interface里定義IDLinterfaceI包含變量的聲明和方法的聲明interfaceI{ //constantdeclarations //methoddeclarations};AnExampleWritteninCORBAIDL//M.idlModuleM{ exceptionOops{ stringwhatisworng; }; interfaceMyInfo{ stringname; voidsetName(instringaName);//in:參數(shù)由客戶程序發(fā)送給服務(wù)程序 } interfaceInfoManager{ voidregister(inMyInfoinfo)raises(Oops);

booleanfind(instringname,outMyInfoinfo); };//out:參數(shù)由服務(wù)程序發(fā)送給客戶程序};

產(chǎn)品

(1)商品化CORBA產(chǎn)品IONAOrbix//功能強(qiáng)大BorlandVisiBroker//可視化好,編程簡單BEAWeblogicIBMWebsphere(2)免費(fèi)的CORBA產(chǎn)品OmniORBTAOORBitORBacus(3)CORBA產(chǎn)品實(shí)際上就是ORB產(chǎn)品應(yīng)用最廣泛EndofPartIICORBA應(yīng)用程序開發(fā)CORBA應(yīng)用程序開發(fā)過程具體開發(fā)實(shí)例典型的CORBA應(yīng)用表示層中間層數(shù)據(jù)層數(shù)據(jù)庫CORBA對(duì)象CORBA客戶端CORBA應(yīng)用開發(fā)過程CORBA規(guī)范并沒有限制ORB的具體實(shí)現(xiàn)方法,所以不同廠商對(duì)ORB的具體實(shí)現(xiàn)方法可能差別很大,這就導(dǎo)致不同廠商提供的ORB上操作可能有很大的差異。但基本過程都是類似的。利用OO方法進(jìn)行分析設(shè)計(jì)標(biāo)識(shí)應(yīng)用程序所需的對(duì)象實(shí)現(xiàn)每個(gè)對(duì)象,部署,運(yùn)行典型的CORBA應(yīng)用實(shí)現(xiàn)過程一個(gè)典型CORBA應(yīng)用的實(shí)現(xiàn)過程(可回到21頁)編寫對(duì)象接口對(duì)象接口是關(guān)于服務(wù)對(duì)象語法的規(guī)格說明。接口定義中包括:提供或使用的服務(wù)的名字參數(shù)返回值異常上下文環(huán)境等對(duì)象接口由OMGIDL語言定義編譯IDL文件廠商實(shí)現(xiàn)IDL編譯器時(shí)應(yīng)參照OMG制訂的語言的規(guī)范,編程人員只要選擇使用合適的編譯器就可以了。VisiBrokerforC++/Java/Delphi分別提供idl2cpp/idl2java/idl2pas編譯器將IDL映射到C++語言/Java語言/ObjectPascal語言,生成相應(yīng)語言的客戶端樁代碼以及服務(wù)端框架代碼。IDL編譯器IDL文件StubSkeleton輸入輸出輸出編寫客戶程序客戶程序操作流程初始化ORB綁定到服務(wù)對(duì)象調(diào)用服務(wù)對(duì)象提供的服務(wù)初始化ORB無論是客戶程序還是服務(wù)程序,都必須在利用ORB進(jìn)行通信之前初始化ORB。初始化ORB的作用讓ORB了解有新的成員加入。獲取ORB偽對(duì)象的引用,以備將來調(diào)用ORB內(nèi)核提供的操作。所謂偽對(duì)象專指在CORBA基礎(chǔ)設(shè)施中的一個(gè)對(duì)象偽對(duì)象是本地的。利用偽對(duì)象調(diào)用CORBA基礎(chǔ)設(shè)施提供的服務(wù)。用一種統(tǒng)一的觀點(diǎn)看待所有對(duì)象。偽對(duì)象也使用IDL定義。ORB服務(wù)ORB內(nèi)核提供了一些不依賴于任何對(duì)象適配器的操作(與用戶具體編程無關(guān))初始化ORB獲取初始引用的操作動(dòng)態(tài)調(diào)用相關(guān)的操作生成類型碼的操作線程和策略相關(guān)的操作編寫對(duì)象實(shí)現(xiàn)和服務(wù)程序代碼編寫對(duì)象實(shí)現(xiàn):IDL文件只定義了服務(wù)對(duì)象的規(guī)格說明,程序員必須另外編寫服務(wù)對(duì)象的具體實(shí)現(xiàn)。對(duì)象實(shí)現(xiàn)則有很多選擇的余地:Java、C++、C、Smalltalk等等對(duì)象實(shí)現(xiàn)所用的語言與客戶程序所選用的語言無關(guān),只要ORB產(chǎn)品供應(yīng)商支持IDL到這些語言的映射即可。程序員應(yīng)該熟悉IDL到所選擇的語言的映射規(guī)則,因?yàn)椋篒DL編譯器除了生成Stub和Skeleton外,還會(huì)自動(dòng)生成一些對(duì)象實(shí)現(xiàn)需要用到的輔助代碼。VisiBroker的idl2cpp/idl2java會(huì)生成一些對(duì)象適配器的C++/Java類和各種輔助性的C++/Java類,編寫對(duì)象實(shí)現(xiàn)的代碼時(shí)必須繼承其中的一些類或使用某些類提供的方法。編寫對(duì)象實(shí)現(xiàn)和服務(wù)程序代碼編寫對(duì)象實(shí)現(xiàn)后,還必須實(shí)現(xiàn)服務(wù)程序的main例程。服務(wù)程序利用可移植對(duì)象適配器(POA)激活伺服對(duì)象供客戶程序使用。服務(wù)程序通常是一個(gè)循環(huán)執(zhí)行的進(jìn)程,不斷監(jiān)聽客戶程序請(qǐng)求并為之服務(wù)。創(chuàng)建并部署應(yīng)用程序一些ORB產(chǎn)品提供了專門的編譯器以簡化這一過程客戶程序代碼IDL生成的Stub客戶端應(yīng)用程序編譯服務(wù)端代碼IDL生成的Skeleton服務(wù)端應(yīng)用程序編譯創(chuàng)建客戶端應(yīng)用程序創(chuàng)建服務(wù)端應(yīng)用程序創(chuàng)建并部署應(yīng)用程序部署應(yīng)用程序在部署階段由系統(tǒng)管理員規(guī)劃如何在終端用戶的桌面系統(tǒng)安裝客戶程序,或在服務(wù)器一類的機(jī)器上安裝服務(wù)程序。部署工作由單獨(dú)的角色來承擔(dān)運(yùn)行應(yīng)用程序運(yùn)行CORBA應(yīng)用程序時(shí),必須首先啟動(dòng)服務(wù)程序,然后才可運(yùn)行客戶程序。VisiBroker要求其ORB內(nèi)核(osagent)必須在客戶程序啟動(dòng)之前啟動(dòng)完成。3.2具體開發(fā)實(shí)例從應(yīng)用的角度介紹系統(tǒng)軟件開發(fā)環(huán)境介紹及選型具體實(shí)例——一個(gè)簡單的C/S響應(yīng)系統(tǒng)操作系統(tǒng)和編程語言CORBA能夠跨操作系統(tǒng),跨編程語言,因此原則上代碼的實(shí)現(xiàn)可以用操作系統(tǒng)支持的任何編程語言,這里我們就最常見的操作系統(tǒng)予以示例。Windows操作系統(tǒng)Linux操作系統(tǒng)支持各種編程語言包括C、C++、Perl、Java、Fortran、ObjectPascal、Basic等等。常用CORBA實(shí)現(xiàn)語言用C++、Java和ObjectPascal。后面的實(shí)例將就Windows下的C++語言討論。CORBA的ORB產(chǎn)品選型免費(fèi)產(chǎn)品種類較多缺乏正規(guī)商家開發(fā)功能上講不能及時(shí)跟進(jìn)最新的CORBA規(guī)范兼容性能上講有很大的局限性商品化產(chǎn)品IONA公司的OrbixInprise(原Borland)公司的VisiBroker具體實(shí)例——一個(gè)簡單的C/S響應(yīng)系統(tǒng)操作系統(tǒng)

Windows2000編程工具(語言)

BorlandC++Builder6(C++)ORB產(chǎn)品

VisiBrokerforC++,version4.5.00例子背景一個(gè)簡單的客戶/服務(wù)器響應(yīng)系統(tǒng)客戶端向服務(wù)器端提供客戶名稱和請(qǐng)求服務(wù)的名稱服務(wù)器端顯示服務(wù)日志對(duì)象認(rèn)定本例只有一個(gè)簡單對(duì)象TheResponse:即 服務(wù)器端根據(jù)客戶端上傳的數(shù)據(jù)產(chǎn)生的響應(yīng)。服務(wù)器(S)客戶端(C)ORBTheResponse()定義對(duì)象接口//C/S響應(yīng)系統(tǒng)對(duì)象接口定義interfaceCorbaObj{ stringTheResponse(

//客戶名稱 instringClientName,

//請(qǐng)求服務(wù)名稱 instringServiceName

);};可用文本編輯器編輯,保存文件為File1.idl也可以直接利用BC++Builder(下面簡稱為BCB)中的CorbaServer(Wizard)產(chǎn)生的IDL編輯窗編輯生成Stub與Skeleton可通過命令行編譯 prompt>idl2cppFile1.idl直接利用BCB中的CORBAObjectImplementation(Wizard)編譯生成存根(樁)和框架文件

idl2cppFile1.idlStubSkeleton輸入輸出其它輔助文件生成Stub與Skeleton(cont.)VisiBrokerforC++的IDL編譯器idl2cpp為每個(gè)接口自動(dòng)生成4個(gè)文件:File1_c.cpp(Stub存根文件)File1_c.hh(Stub的頭文件)File1_s.cpp(Skeleton框架文件)File1_s.hh(Skeleton的頭文件)由于接口存根對(duì)象及接口框架對(duì)象文件內(nèi)容總是大同小異,我們不詳細(xì)解釋,有興趣的同學(xué)可以自己做實(shí)驗(yàn)加深理解生成代碼框架對(duì)象實(shí)現(xiàn)向?qū)?CORBAObjectImplementation(Wizard))為接口對(duì)象生成一個(gè)代碼框架,用戶在此代碼框架上編寫具體對(duì)象實(shí)現(xiàn)代碼本例代碼框架文件:CorbaObjServer.hCorbaObjServer.cpp生成代碼框架(cont.)CorbaObjServer.h://-------------------------------------------------------------------------------------------#ifndef

CorbaObjServerH#defineCorbaObjServerH#include“File1_s.hh”//-------------------------------------------------------------------------------------------classCorbaObjImpl:public_sk_CorbaObj{protected:public:

CorbaObjImpl(constchar*object_name=NULL);char*TheResponse(constchar*ClientName, constchar*ServiceName);};#endif接口框架對(duì)象_sk_CorbaObj由CorbaObjImpl類實(shí)現(xiàn)生成代碼框架(cont.)CorbaObjServer.cpp//-------------------------------------------------------------------------------------------#include<vcl.h>#pragma

hdrstop#include<corba.h>#include“CorbaObjServer.h”//-------------------------------------------------------------------------------------------#pragmapackage(smart_init)CorbaObjImpl::CorbaObjImpl(constchar*object_name):_sk_CorbaObj(object_name){}char*CorbaObjImpl::TheResponse(constchar*ClientName,constchar*ServiceName){

//由用戶在此編寫具體對(duì)象實(shí)現(xiàn)代碼}編寫對(duì)象實(shí)現(xiàn)CorbaObjServer.cpp僅僅是對(duì)象實(shí)現(xiàn)的一個(gè)代碼框架,用戶必須自己編寫方法、操作以最終完成對(duì)象實(shí)現(xiàn)。在CorbaObjImpl::TheResponse函數(shù)中加入實(shí)現(xiàn)代碼:

//根據(jù)功能編寫實(shí)現(xiàn)代碼實(shí)現(xiàn)服務(wù)器端的日志顯示

AnsiStringLog=“客戶名稱:”; Log+=ClientName;//由客戶端傳入的客戶名稱 Log+=“;服務(wù)內(nèi)容:”; Log+=ServiceName;//由客戶端傳入的請(qǐng)求服務(wù)的名稱 Lo

溫馨提示

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