chapter3-面向對象的分布計算環境3CORBA_第1頁
chapter3-面向對象的分布計算環境3CORBA_第2頁
chapter3-面向對象的分布計算環境3CORBA_第3頁
chapter3-面向對象的分布計算環境3CORBA_第4頁
chapter3-面向對象的分布計算環境3CORBA_第5頁
已閱讀5頁,還剩80頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

分布計算環境鄒華北京郵電大學網絡技術研究院2015.9

Chapter3

面向對象的分布計算環境分布式系統中的面向對象技術開放式分布處理ODPCORBA技術:CommonObjectRequestBrokerArchitecture主要內容緒論

OMG組織制定的一個工業規范,是一個體系結構和一組規范。目的:在分布式環境下實現應用的集成,使基于對象的軟件成員,在分布的、異構的環境下可重用、可移植、可互操作。OMG的理念:不存在統一的硬件平臺、不存在統一的操作系統、編程語言、網絡協議、應用模式,必須在互操作上達成一致。方法:提供一個框架,如果符合這一框架,就可以在主要的硬件平臺和操作系統上建立一個異質的分布式應用。CORBA結合了計算機工業中的兩個重要趨勢:面向對象軟件開發和客戶機/服務器計算。主要內容

綜述基于CORBA的軟件開發基本過程RM-ODP與CORBA總結綜述

對象管理體系結構OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務ORB之間的互操作綜述

對象管理體系結構OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務ORB之間的互操作對象管理體系結構OMA

定義異構環境下對象透明地發送請求和接收響應的基本機制。支持客戶程序與對象實現在一個分布式環境中通信。基于分布式對象的所有應用程序都可能用到的通用服務的接口可用于大多數應用領域的面向終端用戶的工具接口水平公用設施:領域間可共享垂直公用設施:面向某個領域由CORBA支持的頂層業務對象和應用系統,是針對特定應用開發的接口OMACORBA不只定義了面向對象的遠程調用機制,它還定義了不同抽象層次的框架。OSORBServicesFacilitiesObjectObjectObject核心ORB提供了網絡編程復雜性的抽象以面向對象的方式提供了典型的系統級功能。提供了領域間共享或面向特定領域的服務綜述

對象管理體系結構OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務ORB之間的互操作OMG接口定義語言IDL

僅定義接口,不定義實現分隔“對象作什麼(WHAT)”與“如何做(HOW)”強類型、面向對象、語言中立的說明(描述)型語言ANSIC++的子集支持多繼承支持到多種語言的映射ORBCC++AdaIDLIDLIDLIDLIDLIDLClientSideObjectImplementationSideCOBOLCAdaC++SmalltalkJAVAIDLIDLIDLIDLIDLIDLORBCOBOLSmalltalkJAVARoleofCORBAIDLIDL

&Stub

一個實例(1)ModuleBANK{

InterfaceBANKAccount{

enumaccount_kind{checking,saving};

exceptionaccount_not_available{string,reason};

exceptionincorrect_PIN{};

readonly

attributefloatbalance;

attribueaccount_kindkind_of_account;

voidaccess(instringaccount,instringpin)

raises(accout_not_available,incorrect_pin);一個實例(2)voiddeposit(in

floatf,out

floatnew_balance)

raises(account_not_available);

voidwithdraw(infloatf,outfloatnew_balance)

raises(account_not_available);

onewayop1(ininti); }}IDL到編程語言的映射定義相應編程語言所用到的數據類型的定義,如:

OMGIDL Java short short longlong longlong octet byte……目前有:Ada、C、C++、Java、Lisp、COBOL、Python、Smalltalk。IDL的使用綜述

對象管理體系結構OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務ORB之間的互操作對象請求代理ORB

對象請求代理ORB(ObjectRequestBroker):定義異構環境下對象透明地發送請求和接收響應的基本機制。ORB為客戶隱藏:對象位置對象實現方式對象執行狀態對象通信機制ORB并不需要作為一個單獨的組件來實現。它定義了一系列的接口,任何一種支持了該接口的實現方式都是可行的。ORB體系結構

主要內容

接口對象引用客戶和對象實現ORB核心接口庫和實現庫動態調用和靜態調用對象適配器主要內容

接口對象引用客戶和對象實現ORB核心接口庫和實現庫動態調用和靜態調用對象適配器接口接口:客戶程序與對象實現之間的界面,描述了客戶可訪問的對象操作的一個集合;完全獨立于對象所處的位置、實現對象的程序設計語言以及對象接口中未反映的其他特性;客戶程序只能通過對象的接口定義掌握對象的邏輯結構,并通過發送請求來影響對象的行為與狀態對象接口采用接口定義語言IDL定義;ORB的各種接口主要內容

接口對象引用客戶和對象實現ORB核心接口庫和實現庫動態調用和靜態調用對象適配器對象引用對象引用-臨時的不透明的句柄,標識ORB中的一個對象實例。它用于定位響應請求的對象實現。可互操作的對象引用IOR:在異構ORB間傳遞OR。對象引用的獲取從命名服務或交易服務中獲取使用工廠對象使用對象引用字符串。轉換為字符串,在文件中、email等中傳遞。Object_to_string()和string_to_object();特定ORB實現的方法獲取初始引用,如:CORBA::ORB::resolve_initial_references()作為方法調用的返回值主要內容

接口對象引用客戶和對象實現ORB核心接口庫和實現庫動態調用和靜態調用對象適配器客戶和對象實現客戶(Client)客戶訪問對象的對象引用,并且調用對象上的操作客戶只知道對象的接口,通過調用感受對象的行為對象實現(ObjectImplementation)通過為對象實例定義數據和為對象方法定義代碼提供對象的語義;對象可以具有不同的實現方式;對象實現不依賴于ORB或者客戶調用對象的方式;一個對象的實現可以是其它對象的客戶;對象實現的實例Servant:譯為伺服對象或者仆從服務器服務器是一個(或一組)組件,能為其它組件提供某種服務。即,如果某個組件創建了一個對象,并能被其它組件通過對象引用來訪問,則擁有對象的組件就是該對象的服務器,其它組件對這個對象的請求操作都將由創建該組件的服務器來執行。例如一個進程;客戶客戶服務器服務器對象實現的實例:Servant主要內容

接口對象引用客戶和對象實現ORB核心接口庫和實現庫動態調用和靜態調用對象適配器ORB核心ORB核心提供的接口ORB內核提供的服務對象接口,同時為客戶方和對象實現方所見,可直接為應用程序所使用:對象引用操作:提供對象引用的串化和反串化及對象引用復制、刪除、比較及探測對象引用存在與否等操作。如object_to_string();release();ORB和對象適配器初始化:使應用得到指向ORB的對象引用。如ORB_init();獲取初始對象引用:ORB規定了客戶對象在ORB初始時獲取初始對象引用的方法,如resolve_initial_references();主要內容

接口對象引用客戶和對象實現ORB核心接口庫和實現庫動態調用和靜態調用對象適配器接口庫和實現庫主要功能接口庫(IFR,InterFaceRepository)ORB的一個組件,提供服務,用于接口定義的存儲、查找和管理;CORBA對其接口進行了定義;實現庫(IR,ImplemetationRepository)ORB的一個組件,用于存儲對象實現的相關信息,如;如何定位對象實現,如何激活對象實現,以及其它的與ORB和操作系統相關的信息;OMG沒有對其進行詳細規范,與具體實現相關;如OrbixWeb:

putit-hHostNameServerName-jServerAbsoluteClassName主要內容

接口對象引用客戶和對象實現ORB核心接口庫和實現庫動態調用和靜態調用對象適配器靜態和動態調用從IDL到存根和骨架靜態調用:存根和骨架OMGIDL編譯器根據接口定義來產生客戶方的存根和服務方的骨架。靜態IDL存根(IDLstubs):

編譯時確定的的靜態接口,位于客戶對象本地,對客戶來說相當于遠程的執行對象。由存根向ORB提交請求。負責對請求參數的封裝和發送,以及對返回結果的接收和解封裝,并以適當的格式進行通信傳輸。靜態IDL骨架(IDLskeletons):在本地調用執行對象服務,并與ORB通信。針對執行對象來說,代表了遠程客戶。骨架接收經ORB來的請求,將請求參數解封裝,識別客戶所請求的服務,(向上)調用服務器中的對象實現,把執行結果封裝,并將結果返回給客戶程序。主要內容

接口對象引用客戶和對象實現ORB核心接口庫和實現庫動態調用和靜態調用對象適配器對象適配器CORBA對象和伺服對象CORBA對象:可看作是一個具有對象標識、對象接口及對象實現的抽象實體。從客戶程序的角度看,IOR中包含了對象的標識、接口類型及其他信息以查找對象實現。伺服對象(Servant):指具體程序設計語言的對象實例或實體,通常存在于一個服務程序進程之中。對象適配器(ObjectAdaptor):一個重要的ORB組件,它負責將抽象的CORBA對象映射到具體的伺服對象。主要功能服務器利用對象實現創建伺服對象,然后將這些服務端本地的對象實例轉換為可供遠程使用的CORBA對象:給該本地對象實例關聯了對象標識、對象引用;對象引用=宿主服務器地址端口+POA標識+ObjectID例:CORBA Hello_implhelloImpl=newHello_impl(); Hellohello=helloImpl._this(orb);對象適配器是管理服務端伺服對象、對象標識、對象引用及它們之間關聯的主要工具。它負責決定在收到客戶請求時應調用哪個伺服對象,然后調用該伺服對象上的合適操作;例:POA:PortableObjectAdapterPOA概貌P101存儲允許ORB的定位和激活對象實現的信息,如Server支持的類、實例化對象、這些對象的ID等運行時信息。對象引用的生成、維護,方法調用、對象的激活與終止、對象定位等功能。BOA:BasicObjectAdapterPOA:PortableObjectAdapterDII在Server方的對應。DSI從進入的消息找出調用的目標對象及相應的方法,并提供運行時的連接機制。允許動態地構造對象調用。客戶機可推遲到運行時選擇對象的實現接口和操作。靜態IDL存根在Server側的對應。由IDL編譯程序自動生成。服務的靜態接口。由IDL編譯程序自動生成。在客戶端,如同一本地調用,是遠程SERVER對象的代理。訪問某個對象實現所提供的服務的程序。根據其接口了解其邏輯結構,并通過調用掌握對象的行為所定義的IDL接口的真正實現。可用語言:C,C++,Java,Smalltalk,Ada…是ORB最關鍵的部分,負責請求的通信設施:對象的定位編組與解組啟動初始服務屏蔽底層網絡細節提供接口庫和其它的APIORB體系結構回顧

對象的IDL接口定義的存儲、分布和管理。客戶對象可以在運行時查閱接口倉庫的內容,獲得對象實現的IDL接口信息,從而向對象實現發出請求。當客戶程序要調用遠程對象上的方法時,首先要得到這個遠程對象的引用,之后就可以像調用本地方法一樣調用遠程對象的方法。當發出一個調用時,實際上ORB會截取這個調用(通過客戶Stub完成),因為客戶和服務器可能在不同的網絡、不同的操作系統上甚至用不同的語言實現,ORB還要負責將調用的名字、參數等編碼成標準的方式(稱Marshaling)通過網絡傳輸到服務器方(有時在同一臺機器上也如此),并通過將參數Unmarshaling的過程,傳到正確的對象上(這整個過程叫重定向,Redirecting),服務器對象完成處理后,ORB通過同樣的Marshaling/Unmarshaling方式將結果返回給客戶。ORB內核提供的服務對象接口,同時為客戶方和對象實現方所見,可直接為應用程序所使用。綜述

對象管理體系結構OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務ORB之間的互操作CORBA服務公共對象服務:系統級的對象框架。擴展了基本的CORBA體系結構。CORBA服務代表了一組預先實現的,軟件開發商通常需要的分布式對象。CORBA服務清單例命名服務(NamingService):為客戶程序通過名字查找對象實現提供支持。事件服務(EventService):使對象間的通信能夠以松耦合的方式進行。生命周期服務(LifeCycleService):為對象的創建、刪除、拷貝和移動提供支持。持久狀態服務(PersistentStateService):為對象持久狀態的維護和管理提供支持。事務服務(TransactionService):為事務處理提供支持。并發服務(ConcurrencyService):為多個客戶協調一致地同時訪問共享資源提供支持。CORBA服務清單例(2)關系服務(RelationshipService):為實體和它們之間地關系的外在表示提供支持。外部服務(ExternalizationService):為對象的外部化(externalizing)和內在化(internalizing)提供支持.查詢服務(QueryService)::為客戶在對象集合中查找滿足某種查詢標準的對象提供支持。許可證服務(LicensingService):為軟件許可證的管理提供支持。屬性服務(PropertyService):為對象屬性的定義和操縱提供支持。時間服務(TimeService):為客戶獲取當前時間以及可能的誤差提供支持。安全服務(SecurityService):為基于CORBA的整個系統的安全提供支持。CORBA服務清單例(3)交易對象服務(TradingObjectService):為提供和查找具有特定屬性的對象提供支。集合服務(CollectionsService):為創建以及操縱各種常用集合類型提供支持。通知服務(NotificationService):對事件服務的擴展,支持事件的類型定義、過濾條件的設定、服務質量的設定等。增強的時間視圖服務(EnhancedViewofTimeService

):為一致地使用具有各種自身特點的時鐘提供支持。

命名服務目的:為通過名字查找對象提供支持。方法:定義了一系列的接口,使客戶可以管理對象的命名空間、在命名空間中查找對象。基本概念:命名上下文Namingcontext:一種命名空間,在該范圍內,所有名字是唯一的。名字Name:一個有序的由組件(component)構成的序列,也叫對象的復合名。在這個序列中,除最后一個組件以外,其它都是一個命名空間的名字。最后的組件是這個對象的簡單名。名字綁定Namebinding:名字到對象的關連。支持分層命名的CORBA對象命名服務的使用使用NamingContext接口提供的API,可以:將一個對象與一個名字綁定:voidbind(inNamen,inObjectobj);在一個命名空間中,刪除一個對象綁定:voidunbind(inNamen);通過名字查找一個對象:Objectresolve(inNamen);創建一個命名空間:NamingContextbind_new_context(inNamen);等等.使用BindingIterator接口,可以在一個給定的命名空間中漫游(Navigate)。CORBA服務小結OMG為每個服務定義了標準API通過IDL定義實現廠商提供支持這些API的具體產品,它們的實現方法可能不同,但接口是一致的用戶購買、部署需要的服務產品買源代碼或者可執行代碼安裝并在需要的時候實例化在程序中使用時,首先獲取服務中相應對象的IOR,然后調用它的操作即可。綜述

對象管理體系結構OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務ORB之間的互操作ORB的互操作可互操作性(interoperability)是指在一個系統中用不同工具或不同供應商的產品開發出來的兩個組件是否可以協調工作。ORB之間的互操作與基于DCE、DCOM等的系統的互操作GIOP、IIOP和ESIOP為了不同的ORB間可以互操作,有必要制訂傳輸請求的統一標準,規定傳輸底層的數據表示方法與消息格式,GIOP:通用ORB間協議,定義了傳送語法和消息格式的標準集,能夠在任何面向連接的傳輸上實現ORB間的互操作性。IIOP:InternetORB間協議,定義了如何在TCP/IP傳輸上構建GIOP。GIOP和IIOP之間的關系類似于接口定義及其實現。ESIOP:能夠針對已使用特定分布式計算基礎結構的特殊情況(例如DCE-CIOP)構建ORB。GIOP的基本組成部分

TheCommonDataRepresentation(CDR)definition:通用數據表示定義,它實際上是IDL數據類型在網上傳輸時的編碼方案。它對所有IDL數據類型的映射都作了規定。GIOPMessageFormats:規定了Client和Server兩個角色之間要傳輸的消息格式。7種消息格式:Request、Reply、CancelRequest、LocateRequest、LocateReply、CloseConnection、MessageError、Fragment。GIOPTransportAssumptions:主要規定在任何面向連接的網絡傳輸層上的一些操作規則。如:傳輸應該是面向連接的;傳輸應是可靠的;在非正常情況下斷開連接時,傳輸應能提供某種通知機制等;綜述

對象管理體系結構OMAOMG的接口定義語言IDL對象請求代理ORBCORBA服務ORB之間的互操作主要內容

綜述基于CORBA的軟件開發基本過程RM-ODP與CORBA總結ORBacus簡介什么是ORBacus:

ORBacus是IONA公司的ORB產品。ORBacus小巧但功能齊全,尤其是性能很高,提供實時CORBA特性,非常適合于電信領域。另外,ORBacus提供源代碼,這對我們進一步揭開CORBAORB內幕、提高程序性能、解決棘手問題都有好處。同時它還是免費的,當然商業用途例外。支持Java、C++本節使用Java

環境安裝本節使用ORBacus4.0.5ORBacus不需要安裝過程,只需將它拷貝到某個目錄下就行。這里假設在C:\ORBacus目錄下。ORBacus的bin\目錄,存放可執行文件,如jidl.exe(ORBacus的IDL編譯器)。其lib\目錄,存放ORBacus的庫文件,以壓縮包(.jar)的形式存在為CLASSPATH增加:C:\Orbacus\lib\ob.jar;.\;.\classes為PATH增加:C:\Orbacus\bin需要安裝Java環境,如JDK1.3等。示例來源ORBacus附帶的一個例子:src\ob\demo\hello需要使用的文件:Hello.idl idl定義文件Hello_Impl.java 對象實現Client.java 客戶程序Server.java 服務器程序拷貝hello目錄到某一個工作目錄,如D:\mywork基于ORB的軟件開發過程回顧第一步:定義IDLHello.idl定義如下:interfaceHello{voidsay_hello();};第二步:編譯IDL為JavaStub和

Skeleton打開DOS窗口,轉到D:\mywork\hello目錄下鍵入:jidl--packagehelloHello.idl編譯后生成以下幾個文件:Client側:HelloOperations.java:定義publicinterfaceHelloOperationsHello.java:定義接口InterfaceHello_HelloStub.java:樁代碼,定義了class_HelloStub HelloHelper.java:定義publicclassHelloHelper對象Server側:HelloOperations.java:定義publicinterfaceHelloOperationsHelloHolder.java:定義publicfinalclassHelloHolderHelloPOA.java:定義類abstractpublicclassHelloPOA第三步:編寫對象實現對象實現代碼所在的類名字可由程序員自由掌握,只要不與IDL編譯器自動產生的Java類產生名字沖突即可。客戶程序也無須了解對象實現是由哪一個Java類完成的。CORBA應用程序的對象實現最常用、最簡單的實現方式是使用繼承,即直接繼承由IDL編譯器生成的xxxPOA類。當對象實現需要利用繼承機制達到其他目的時,就必須改用CORBA對象實現的另一種實現方式──紐帶機制(tiemechanism)。我們的例子程序采用簡單的繼承方式編寫對象實現,即繼承xxxPOA類。HelloPOA類HelloPOA.java是Hello對象的服務端框架代碼。xxxPOA類的主要功能:解包in類型的參數并將參數傳遞給對象實現。打包返回值與所有out類型的參數。打包(marshal):指將特定程序設計語言描述的數據類型轉換為CORBA的IIOP流格式。解包(unmarshal):從IIOP流格式轉換為依賴于具體程序設計語言的數據結構。編寫對象實現的最簡單途徑是繼承這些POA類,即把它們作為對象實現的基類。對象實現類packagehello;publicclassHello_implextendsHelloPOA{publicvoid;say_hello(){ System.out.println("HelloWorld!");}}第四步:編寫ServerServer用來創建相應的Servant對象,準備接受來自Client的請求。本例主要包括兩個方法。run()方法:1.獲取RootPOAManager的引用。2.創建實現對象,并將其引用保存在某個適當的地方,以便客戶程序獲取。3.激活POA管理器,以允許接受請求。4.將控制權交給ORB,并處于運行狀態。Main()方法:初始化ORB;調用run()方法運行結束后,撤銷ORB對象,退出;第五步:編寫ClientClient程序發起CORBA調用,本例定義了兩個方法。Run()方法:1.獲取遠程對象的引用;2.調用遠程對象上的方法;Main()方法:初始化ORB;調用run()方法;運行結束后,撤銷ORB對象,退出;第六步:編譯和運行轉到D:\mywork\hello目錄下,創建classes目錄:mkdirclasses編譯Java文件:javac–dclasseshello\*.javajavac–dclassesClient.javajavac–dclassesHello_impl.javajavac–dclassesServer.java進入classes目錄,先運行Server:javahello.Server重開一個DOS窗口,進入D:\mywork\hello\classes目錄,運行Client:javahello.Client運行結果在Client運行的DOS窗口,輸入:Enter‘h’forhelloor‘x’forexit:>h>在Server運行的DOS窗口運行結果如下:>HelloWorld!主要內容

綜述基于CORBA的軟件開發基本過程RM-ODP與CORBA總結RM-ODP是分布式計算領域內容最廣泛的一個國際標準,是功能最強的分布計算“元標準”。CORBA是開放式分布處理思想的一個實現。體系結構的比較--語言語言:CORBA沒有企業語言、信息語言和技術語言計算語言RM-ODP的每個對象都可以調用其它對象在接口上所提供的操作。系統分布的特性對系統設計者應該是透明的。CORBA支持RM-ODP計算語言中的接口類型概念,由OMGIDL表示。

RM-ODP主要支持兩種類型的操作:詢問型和公告型。CORBA支持三種類型的調用:同步調用、單向調用和延遲調用.前兩種方式分別對應于

溫馨提示

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

評論

0/150

提交評論