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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

3、) 體系結構委員會(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體系結構對象請求代理ORB使對象在分布式環(huán)境中透明地收發(fā)請求和響應對象服務是為使用和實現對象而提供的基本服務集合通用設施是為許多應用提供的共享服務集合領域接口是為特定應用領域提供的公共服務的集合應用接

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

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

7、言(面向對象及非面向對象的語言) 客戶和服務器可以使用不同的編程語言開發(fā)ORB產品 考察ORB:支持平臺、支持語言、性能 商業(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,美國華盛頓大學分布式對象計算研究小組 omniORB,AT&T劍橋實驗室CORBA實現系統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對象服務 CORBA公共對象服務將(分布式)應用軟件的開發(fā)中的基本服務和功能標準化,從而實現它們的可重用性,以降低開發(fā)的代價 CORBA公共對象服務在COSS規(guī)范中加以定義 目前,OMG組織制訂了14種服務:包括名錄服務、事件服務、永久對象服務、生命周期服務、并發(fā)控制服務、外部化服務、關系服務、事務服務、查詢服務、許可證服務、特征服務、時間服務、交易服務和安全服務領域接口 目前,OMG組織

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

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

12、 struct,union,enum,sequence,string,wstring,array Any 對象引用Data Types接口與操作 接口 屬性定義 操作定義 數據結構定義 用戶異常定義 操作定義調用語義+返回值類型+操作名+參數類型/方向+異常+上下文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語言完全是一種描述性語言,而非編程語言。它沒有控制結構,因而不能用于實現客戶方程序和對象實現方程序 OMG組織已經定義了OMG IDL語言到C、C

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

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

16、求目標對象的相應操作- 對調用請求的參數進行解碼,從傳輸格式轉化為對象實現所使用的編程語言的表示形式- 對調用請求的處理結果進行編碼,從對象實現所使用的編程語言的表示形式轉換為傳輸格式IDL構架和動態(tài)構架接口(DSI) 與IDL樁類似,IDL構架也是根據目標對象接口的IDL描述由IDL編譯器自動產生的調用對象實現的部件 動態(tài)構架接口(Dynamic Skeleton Interface)允許動態(tài)調用對象,對象實現需要實現動態(tài)調用例程(Dynamic Invocation Routing)的接口,該接口名字為DynamicImplementation IDL樁和IDL構架以及DII和DSI之間沒

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

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

19、OA可以提供不同的功能或者支持不同的特性。而且每個POA都提供一個獨立的對象 生存空間,相應有一套POA策略來決定這些寄存的對象如何被激活以及如何建立對象的參考。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協議 GIOP協議:- 公共數據表示(CDR)- GIOP消息- GIOP消息傳輸機制 IIOP(Internet Inter-ORB Protocol)是GIOP的一種映射,它定義了用于Internet之上的O

28、RB間標準互操作協議,它利用的運輸層協議就是Internet所采用的TCP協議GIOP/IIOP協議(續(xù)) GIOP協議版本 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的基礎上增加了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調用對象的方法 客戶如何得到對象引用 客戶如何調用對象方法客戶端C+ m

32、apping 客戶通過ORB接口獲得初始的對象引用 首先初始化ORB并獲得ORB接口 然后利用字符串形式的引用獲得內部的對象引用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負責創(chuàng)建對象引用、激活對象以及分發(fā)請求 POA負責從CORBA對象到servant之間的對應 CORBA對象與servant對象的生命周期相互分開 POA對于CORBA服務器在性能、資源利用、可伸縮性等方面具有重要的意義 POA策略,控制: 對象生命周期:永久對象、暫態(tài)對象 對象標

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

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

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

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

39、on Interface 服務器程序可以動態(tài)實現對象,而不利用IDL編譯器生成的skeleton代碼 服務器實現一個對象,如下所示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、函數的處理不變 重點在于invoke函數,利用CORBA:ServerRequest對象獲得所有的類型信息 對于客戶透明 比較:COM Automation中IDispatch接口的實現用C+開發(fā)CORBA應用:服務器 用IDL生成skeleton代碼以及類型定義頭文件 在客戶的main函數中,初始化orb,獲得orb對象 根據服務器應用的需要,處理POA 創(chuàng)建servant對象 如果使用DSI,那么invoke方法是servant對象的關鍵 如何把對象引用傳遞出去?字符串?名字服務? 調用orb-run()或者orb-perform_work()CORBA IIOP和IOR General

41、Inter-ORB Protocol:CORBA定義了GIOP作為其互用性框架結構,包括數據傳輸、數據表示、消息格式 Internet Inter-ORB Protocol:IIOP是GIOP的具體實現,建立在TCP/IP基礎上 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 建立起“名稱-對象引用”的映射關系 在內部以層次結構的形式組織名字映射,類似于文件系統的結構。 所有的類型和接口定義位于CosNaming域中 NamingContext接口負責所有有關命名服務相關的功能,例如: 創(chuàng)建新的context、刪除context bind操作、unbind操作 resolve操作 怎樣獲得初始namingcontext? 通過orb-resolve_init

44、ial_reference ORB廠商應該提供命名服務工具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、();/ 服務器方 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:其他服務 Event service 提供松耦合事件模型的機制 Trade Service 提供了更加靈活的對象查找服務 Time Service 提供了與時間有關的服務,統一了時間的表達方式 Concurrency service Security Service Transaction Service CORBA基本概念基本概念1、CORBA(Common Object Request Broker Architecture)公共對象請求代理程序體系結構)。CORBA是一個規(guī)范(specification)而不是程序實現 (implementation)。它提供了一個允許在分布式和異構型環(huán)境中應用程序之間進行互操作的框架。 2、ORB(Object Request Broker)對象請求代理:它作為一個“軟件總線”來連接網絡上的不同對象,提供對象的定位和方法調用,它是

溫馨提示

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

評論

0/150

提交評論