




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
CommonObjectRequestBrokerArchitecture公共對象請求代理結構第七章分布式對象技術CORBA1.1對象管理組織OMG的CORBAOMG(ObjectManagementGroup)成立于1989年,OMG是個非營利性組織,不開發軟件,僅僅制定標準。目前有900多名成員:
OracleSunSoftIBMSybaseInformixHPDEC……2.1990年11月,OMG發表對象管理體系指南,初步闡明了CORBA思想。3.1991年10月,OMG推出CORBA1.0,定義了接口定義語言(IDL)、對象管理模型、動態請求API和接口倉庫等內容。4.1991年12月,OMG推出CORBA1.1,引入對象適配器概念。5.1996年8月,OMG推出CORBA2.0,對象請求代理間協議
(IIOPInternetInter-ORBProtocol)完全基于面向對象技術6.現在,CORBA3.0更好支持EJB和JavaRMI
基于面向組件。各種技術發展歷程DNA:WindowsDistributedinterNetApplicationarchitectureOLE:ObjectLinkingandEmbedding,對象連接與嵌入
什么是CORBA?CORBA是由OMG組織制訂的一種標準的面向對象應用程序體系結構(規范),為解決分布式處理環境(DCE)中,硬件和軟件系統的互連而提出的一種解決方案。DCE:DistributedComputingEnvironment
1.2CORBA用途CORBA是為實現軟件全方位集成而設計的。分布式軟件開發需解決以下五個問題:跨平臺(硬件)跨操作系統跨語言跨協議跨版本Internet使計算機聯結起來,CORBA使應用軟件聯結起來。解決這五個問題的唯一方案,采用CORBA作為分布式軟件開發人員,CORBA使我們獲益如下:混合編程//我只會C++,不會Java豐富的編程元素//眾多基于CORBA的Toolkits高效的開發手段//軟件模塊重用十分便利,我不需要從零開始!版本無關性//CORBA版本向上向下兼容CORBA將在Internet上實現軟件的即插即用!1.3CORBA采用的技術CORBA采用了面向對象技術//從軟件重用角度考慮問題CORBA采用了分布式計算模型CORBA采用多層體系結構CORBA采用接口技術//從軟件集成角度考慮問題1.4CORBA體系結構應用程序及各種對象CORBA工具集橫向:用戶界面、信息管理、系統及任務管理等工具集縱向:醫療保健、金融保險、電訊等面向行業的工具集CORBA對象請求代理---ORBCORBA服務對象生存期、對象關系、命名服務、對象查詢、事件服務對象屬性服務、對象安全、許可服務、事務服務等對象級別服務域接口是為應用領域服務而提供的接口RFP(RequestForProposal)公共設施面向用戶的應用對象管理體系結構OMA1.4.1對象管理體系結構OMA由OMG制定的規范——對象管理體系結構(ObjectManagementArchitecture,OMA)和它的核心(也就是CORBA規范),提供了一個完整的體系結構。OMA描述了面向對象技術在分布式處理中的運用。OMA包括兩部分:對象模型(ObjectModel)和參考模型(ReferenceModel)。對象模型:定義如何描述分布式異構環境中的對象。參考模型:描述對象之間的交互。OMA對象模型在OMA對象模型中,對象是一個被封裝的實體,它具有一個不可改變的標識,并能給客戶用戶提供一個或多個服務。interfaceprinter{ attributelongmodel; voidprint(instringbuffer);};OMA參考模型在OMA參考模型中,OMG定義了一條為對象所公用的通信總線,即ORB。OMG還定義了對象進出這一總線的界面。包括:對象服務(ObjectServices)公共設施(CommonFacilities)應用界面(ApplicationInterface)域界面(DomainInterface)1.4.2對象請求代理ORB聯結應用程序、各種對象、CORBA服務、CORBA工具集的核心。ORB接口結構動態調用接口
DII靜態調用接口直接調用一些ORB內部的功能
PortableObjectAdapterCORBA允許用戶以兩種不同的方式提出對象請求:1.靜態調用:通過給定接口的存根,在編譯了對象代碼后,進入客戶端的程序。因此,靜態調用必須在編譯時就知道對象及其類型。
2.動態調用:
通過ORB的動態調用接口DII,在運行時生成訪問對象的代碼。
DII:DynamicInvocationInterfaceORB的任務是:找出所要對象的位置,激活該對象,向對象傳遞此請求。對象執行所請求的服務后,把輸出值返回給ORB,然后再由ORB返回給客戶。ORBCLIENTSTUBSSKELETONSSERVERORBIIOPMETHODREQUESTOBJECTREFERENCESERVANTCORBA一次請求過程InternetInter-ORBProtocolCORBAORB優點:1.靜態和動態方法調用。2.高級語言綁定。//CORBAORB并不介意服務對象是用何種語言編寫。3.位置透明。//ORB能夠單機模式運行,也能通過IIOP與其它ORB互連。4.內置安全和事物處理。5.與遺留系統(legacysystem)共存。//CORBA能夠讓對象的定義與實現分離。使用IDL將原有的過程或函數封裝。1.4.3IDL(InterfaceDefinitionLanguage)接口定義語言OMGIDL接口定義語言不是作為程序設計語言體現在CORBA體系結構中的,而是用來描述產生對象調用請求的客戶對象和服務對象之間的接口的語言。OMGIDL文件描述了服務器提供的服務功能,客戶機可以根據該接口文件描述的方法向服務器提出業務請求。在大多數CORBA產品中都提供IDL到相關編程語言的編譯器。//就是ORB
如:JavaIDL即idlj編譯器idl-to-c++compilerOMGIDL文件接口倉庫OMGIDL編譯器客戶端本地代理(stub)服務器框架(skeleton)客戶機應用服務器應用IDL文件的應用過程IDL-DefinitionClient
ProgramSourceObjekt
ImplementSourceIDL-CompilerSkeleton
SourceStub
SourceJava/C++CompilerClient-ProgramJava/C++CompilerObjekt-Implement使用CORBA應用開發圖示OMGIDL的語法規則(參閱IDL手冊)1.模塊定義模塊指定一個獨立的名字空間,類似于C++的名字空間
//Compute.idlmoduleCompute
{typedefdoubleradius;
typedeflongtimes;
interfacePI{doublegetResult(inradiusaRadius,intimestime);};……};
2.接口interfaceinterface
JobManager
{readonlyattributestringfirstName;
attributestringstatus;
stringQueryJobStatus(inlongnumber,outstringproperty);};類型聲明符號typedef與C++一樣IDL模塊和接口moduleFruitsBasket{interfaceApple{……};interfaceOrange{……};};從VegetablesBasket
模塊中引用
Apple要這樣做:FruitsBasket::Apple。moduleFruitsBasket{interfaceApple{……};};moduleFruitsBasket{interfaceOrange{……};};#include"orange.idl"moduleFruitsBasket{interfaceApple{……};};1.2.3.IDL范例:moduleMeineBank{
exceptionBankFehler{//異常定義
stringinfo;
};
//基本賬戶
interfaceBasisKonto{
readonlyattributelongnummer;
doubleeinzahlen(indoublebetrag)raises(BankFehler)//存錢
};
//接口繼承---支票賬號
interfaceGiroKonto:BasisKonto{
doubleattributedispoKredit;//信貸額度
};
//儲蓄賬號
interfaceSparKonto:BasisKonto{
doubleattributezinssatz;//存款利率
};
//接口多重繼承
interfaceGiroSparKonto:SparKonto,GiroKonto{......};
};
我的銀行必須為操作中的每一個參數指明方向屬性in:由客戶機在運行時聲明參數的類型并賦值,服務器只能使用不能修改其值。out:由客戶機在運行時聲明參數的類型,服務器運行中為其賦值。inout:由客戶機在運行時聲明參數的類型并賦值,服務器可以使用或修改其值。3.基本數據類型shortlongunsignedshortunsignedlongfloatdoublecharbooleanoctetany
any可以和任意的數據類型匹配,也可以在運行中被動態轉換為任意數據類型。像C++中的Variant。4.構造數據類型和數組structunionenumsequencestringtypedefstring<80>aName;typedefsequence<long,80>aSequence;typedeflongaDimension[20][100];enum
GoodsStatus{GOODS_SALED,GOODS_INSTOCK};1.4.4創建CORBA應用程序CORBA對象服務的實現方式分兩種:1.對象的命名引用方式//常用方式2.字符串化對象引用方式創建CORBA應用程序的過程:進行系統分析,確定服務對象需要提供的功能。根據分析結果,編寫IDL文件。編譯接口文件,產生服務對象的骨架與客戶本地代理。基于服務器框架,編寫服務對象實現程序。基于客戶端本地代理,編寫客戶對象調用程序。編譯客戶對象和服務對象程序。啟動服務對象程序。啟動客戶對象程序。//Hello.idlinterfaceHello{voidsay_hello();};IDL-to-C++translatorHello.h
Hello.cpp
Hello_skel.h
Hello_skel.cppIDL-to-JavatranslatorHello.java
HelloHelper.java
HelloHolder.java
HelloOperations.java
HelloPOA.java
_HelloStub.javaCORBA實例服務對象接口定義:通過兩種不同的IDL編譯器:Hello-ObjectinC++#include“Hello_skel.h”classHello_impl:publicPOA_Hello{public:virtualvoidsay_hello()throw(CORBA::SystemException);};#include<iostream.h>#include<OB/CORBA.h>#include“Hello_impl.h”voidHello_impl::say_hello()throw(CORBA::SystemException){
cout<<"HelloWorld!"<<endl;}定義頭文件Hello_impl.h實現頭文件Hello_impl.cppServer-PrograminC++#include<OB/CORBA.h>#include<Hello_impl.h>#include<fstream.h>intmain(int
argc,char*argv[]){try{
CORBA::ORB_varorb=CORBA::ORB_init(argc,argv);
CORBA::Object_var
poaObj=orb->resolve_initial_references("RootPOA");
PortableServer::POA_var
rootPoa=PortableServer::POA::_narrow(poaObj);
PortableServer::POAManager_varmanager=rootPoa->the_POAManager();
Hello_impl*helloImpl=newHello_impl();
Hello_varhello=helloImpl->_this();
CORBA::String_vars=orb->object_to_string(hello);constchar*refFile="Hello.ref";
ofstream
out(refFile);out<<s<<endl;out.close();manager->activate();orb->run();orb->destroy();}catch(constCORBA::Exception&e){cerr<<e<<endl;
}}打開POA創建一個實例的引用保存IORPOA激活ORB啟動
等待ClientsInteroperableObjectReference可互操作對象引用
Client-PrograminJavapublicclassClient{publicstaticvoidmain(String[]
args){java.util.Propertiesprops=System.getProperties();
try{
org.omg.CORBA.ORBorb=org.omg.CORBA.ORB.init(args,props);
org.omg.CORBA.Object
obj=null;StringrefFile="Hello.ref";
java.io.BufferedReaderin=newjava.io.BufferedReader(newjava.io.FileReader(refFile));Stringref=in.readLine();
obj=orb.string_to_object(ref);Hellohello=HelloHelper.narrow(obj);
hello.say_hello();
orb.destroy(); }catch(Exceptione){e.printStackTrace();}}讀出IOR字符串還原為對象引用采用何種語言完全取決于自己的編程愛好//Hello_impl.javapublicclassHello_implextendsHelloPOA{publicvoidsay_hello(){
System.out.println("HelloWorld!");}}如Hello_impl.java實現Hello-ObjectinJavaServerinC++使用Name
Service方式#include<OB/CORBA.h>#include<Hello_impl.h>#include<fstream.h>intmain(int
argc,char*argv[]){try{
CORBA::ORB_varorb=CORBA::ORB_init(argc,argv);
CORBA::Object_var
poaObj=orb->resolve_initial_references("RootPOA");
PortableServer::POA_var
rootPoa=PortableServer::POA::_narrow(poaObj);
PortableServer::POAManager_varmanager=rootPoa->the_POAManager();
Hello_impl*helloImpl=newHello_impl();
Hello_varhello=helloImpl->_this();
CORBA::String_vars=orb->object_to_string(hello);constchar*refFile="Hello.ref";
ofstream
out(refFile);out<<s<<endl;
out.close();manager->activate();orb->run();orb->destroy();}catch(constCORBA::Exception&e){cerr<<e<<endl;
}}
CORBA::Object_varns=orb->resolve_initial_references("NameService");
CosNaming::NamingContext_var
nc=CosNaming::NamingContext::_narrow(ns.in());
CosNaming::Name
aName;aName.length(1);aName[0].id=CORBA::string_dup("hello");aName[0].kind=CORBA::string_dup("");
nc->bind(aName,hello.in());ClientinJava使用NameService方式publicclassClient{publicstaticvoidmain(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年智能科技與數字經濟驅動的未來工業制造模式與創新研究報告
- 世界文化遺產地旅游資源的保護與旅游開發平衡研究
- 2025年全自動開水器項目投資可行性研究分析報告
- 2025秋四年級語文上冊-【1 觀潮】作業課件
- 農業園區農產品冷鏈貯藏庫及物流配送中心建設項目可行性研究報告
- 宜興環保項目商業計劃書
- 煤礦項目可行性研究報告完整版
- 某小區項目可行性研究報告
- 中西醫結合治療脂肪肝的療效分析
- 輕醫美商業計劃書模板
- 安徽宣城郎溪開創控股集團有限公司下屬子公司招聘筆試題庫2025
- 帝國的興衰:修昔底德戰爭史學習通超星期末考試答案章節答案2024年
- 16J914-1 公用建筑衛生間
- 4008S血液透析機 簡易操作說明書
- 內痔并出血+外痔病歷模板
- 學生社會勞動實踐表
- TSG11-2020 鍋爐安全技術規程
- 【45精品】新蘇教版四年級音樂下冊教案全冊
- 測井工考試(高級)測井工題庫(930題)
- 昆蟲化學生態學資料
- 計控 基于PID電加熱爐溫度控制系統設計
評論
0/150
提交評論