Corba初體驗——概要筆記

一、OMG

? 1.成立于1989年的非盈利性聯(lián)盟;

? 2. 以促進在分布式系統(tǒng)開發(fā)中面向?qū)ο蠹夹g的理論與實踐的發(fā)展為目標;

? 3.為使該組織所采納的技術具有開放性,OMG所采用的方法是,針對某一領域發(fā)出RFP(Request For Proposal),然后以各方提交的建議為基礎,經(jīng)過一系列的討論和協(xié)商,產(chǎn)生最終的規(guī)范。

? 4.OMG負責制訂并維護一套規(guī)范(not software):

? ? ? ? 支持分布式、異類(heterogeneous)環(huán)境的軟件開發(fā)項目。

? ? ? ? ?覆蓋了從分析、設計到編碼、部署、運行和管理的整個軟件開發(fā)過程。

? ? ? ? ? 這些規(guī)范是一種工業(yè)或行業(yè)標準

? 5.OMG主要規(guī)范

? ? UML:Unified Modeling Language

? ?CORBA:Common Object Request Broker Architecture。

? ? MDA: ??Model Driven Architecture

? ? 由OMG制定的最關鍵的規(guī)范——對象管理結(jié)構(Object Management Architecture, OMA)和它的核心(也就是CORBA規(guī)范),提供了一個完整的體系結(jié)構。這個結(jié)構以足夠的靈活性、豐富的形式適用了各類分布式系統(tǒng)。

二、OMA

1.OMA描述了面向?qū)ο蠹夹g在分布式處理中的運用。它包括兩部分:

? ? ? ? ?對象模型(Object Model):定義如何描述分布式異質(zhì)環(huán)境中的對象

? ? ? ? ? 參考模型(Reference Model):描述對象之間的交互(組件,接口,協(xié)議)

2.OMA對象模型

? ? ? ? ? ? 在OMA對象模型中,對象是一個被封裝的實體,它具有一個不可改變的標識,并能給客戶用戶提供一個或多個服務。如:

interface printer

{

attribute model;

void print(in string buffer);

};

3.對象的訪問方式是通過向?qū)ο蟀l(fā)出請求來完成的。請求信息包括目標對象、所請求的操作、0個或多個實際參數(shù)和可選的請求上下文(描述環(huán)境信息)。每個對象的實現(xiàn)和位置,對客戶都是透明的。

4.在OMA參考模型中,OMG定義了一條為對象所公用的通信總線,即ORB(Object Request Broker)。同時, OMG又定義了對象進出這一總線的接口。這包括:對象服務(Object Services) 、公共設施(common facilities)、應用接口(Application Interface)和域接口(Domain Interface)。

三、ORB:Object request broker 對象請求代理

1.概念:是OMA參考模型的核心,是基于分布式對象構建應用程序的基礎設施,保證了在異構平臺上對象的互操作性與可移植性。

2.作用:把客戶發(fā)出的請求傳遞給目標對象,并把目標對象的執(zhí)行結(jié)果返回給發(fā)出請求的客戶。由ORB提供的通信機制負責完成查找請求的對象實現(xiàn),讓對象實現(xiàn)準備好接收請求,傳遞構成請求的數(shù)據(jù)。

3.ORB(Object Request Broker)是對象總線。

1)通過ORB,一個client可以透明的調(diào)用同一臺機器上或網(wǎng)絡上的一個server對象的方法。

2 )ORB解釋該調(diào)用并負責查找一個實現(xiàn)該請求的對象,

3 )找到后,把參數(shù)傳給該對象,調(diào)用它的方法,最后返回結(jié)果。

4) 客戶方不需要了解服務對象的位置、通信方式、實現(xiàn)、激活或存儲機制。

四、對象服務

1.作用:提供所有應用程序都可能用到的通用服務的接口(基本服務,與具體的應用領域無關的接口)。

2.支持的服務有:名字服務、持久性服務、生命周期服務、事務處理服務、對象事件服務和安全服務等。

3.實質(zhì):通用的服務集合,將覆蓋對象整個生存期的對象管理任務標準化,可保證各種應用程序均采用一致的風格管理對象


五、CORBA體系結(jié)構

1.C-ORB-A: “Common”+“ORB”+“Architecture”? 通用“orb”體系結(jié)構

2.建立在OMG的對象模型基礎之上,主要由三個關鍵部分組成

? ? ? ? ? ? ? ? 作為分布式對象通信基礎設施的對象請求代理ORB的體系結(jié)構;

? ? ? ? ? ? ? ? 接口定義語言IDL的語法和語義以及到各種程序設計語言的映射;

? ? ? ? ? ? ? ?保證可互操作性的標準ORB間的通信協(xié)議GIOP/IIOP。



六、IDL語言

說明性語言,定義組件接口,不定義實現(xiàn)。

語法上可以看成C++的一個子集,規(guī)定組件的屬性、所繼承的父類、產(chǎn)生的異常、事件和各類數(shù)據(jù)類型。

編譯器作用:將IDL映射到具體程序設計語言,產(chǎn)生樁代碼和框架代碼

調(diào)用請求經(jīng)客戶端樁傳遞給ORB,然后轉(zhuǎn)發(fā)到服務端框架,最后到達真正要執(zhí)行請求的對象實現(xiàn)實例

Run---->External Tools----->IDL Compiler,

f5刷新,生成Stub與Skeleton

IDL編譯器作用是將IDL映射到具體程序設計語言,產(chǎn)生樁代碼和框架代碼

Visibroker for java提供的編譯器idl2java將IDL映射到java語言,生成java語言的樁和框架語言

每個對象實例都有一個用于唯一標識自身的對象引用??蛻舫绦蚶脤ο笠弥该髡{(diào)用的方向

表面上看,客戶程序調(diào)用的是遠程對象實現(xiàn)上的操作,實際被調(diào)用的代碼是作為其代理的IDL樁

七、RMI存根和框架的作用?

Stub(存根類)存在于客戶端,為客戶端編碼遠程命令并把他們發(fā)送到服務器,等待服務器

返回結(jié)果,stub再解碼返回調(diào)用結(jié)果給客戶端。

Skeleton(框架存在于服務器,是把遠程命令解碼,調(diào)用服務端的遠程對象的方法,把

結(jié)果再編碼發(fā)給stub。

VisiBroker for Java的IDL編譯器idl2java為每個接口自動生成7個文件:

(1)_IntefaceNameStub.java

Hello對象在客戶端的樁代碼,它實現(xiàn)了Hello接口。

程序員編寫的客戶程序代碼通常不直接調(diào)用這個類中的方法。

VisiBroker for Java生成了另外的輔助類HelloHelper。

(2)IntefaceName.java

客戶程序代碼中,程序員通常使用的是操作接口的派生接口Hello(位于Hello.java)

(3)IntefaceNameHelper.java

IDL編譯器為每一個用戶自定義類型還生成一個輔助工具類。HelloHelper.java聲明了HelloHelper類,

該類為Hello接口定義了許多實用功能和支持功能的靜態(tài)方法(又稱類方法)。

--從Any對象提取或向Any對象插入對象(extract和insert方法);

--從輸入/輸出流讀寫對象(read和write方法);

--獲取對象的庫標識和類型碼(id和type方法);

--綁定對象與類型轉(zhuǎn)換操作(bind和narrow方法)等等。

編程時會用到該類中提供的方法。

(4)IntefaceNameHolder.java

AccountHolder.java聲明的AccountHolder類為傳遞對象提供支持。

--IDL有三種參數(shù)傳遞方式:in、out和inout。

--in類型的參數(shù)以及返回結(jié)果與Java的參數(shù)傳遞方式與結(jié)果返回方式完全相同。

--out和inout兩種類型的參數(shù)允許參數(shù)具有返回結(jié)果的能力,無法直接映射到

Java語言的參數(shù)傳遞機制,這時AccountHolder類為傳遞out和inout參數(shù)提供了一個托架(holder)。

*In表明實際參數(shù)從客戶程序傳向?qū)ο髮崿F(xiàn)

*Out表明數(shù)據(jù)從實現(xiàn)對象傳遞給客戶程序,并且對象實現(xiàn)無需從客戶程序獲取參數(shù)的初始值

*Inout表明數(shù)據(jù)從客戶程序傳給對象實現(xiàn),然后經(jīng)對象實現(xiàn)加工后再返回給客戶程序

(5)IntefaceNameOperations.java

(操作基調(diào))定義了Hello接口中定義的所有常量和方法。

(6)IntefaceNamePOA.java

Hello對象的服務端框架代碼,該類的功能:

-解包in類型的參數(shù)并將參數(shù)傳遞給對象實現(xiàn)。

-打包返回值與所有out類型的參數(shù)。

--打包(marshal):指將特定程序設計語言描述的數(shù)據(jù)類型轉(zhuǎn)換為CORBA的IIOP流格式。

--解包(unmarshal):從IIOP流格式轉(zhuǎn)換為依賴于具體程序設計語言的數(shù)據(jù)結(jié)構。

*編寫對象實現(xiàn)的最簡單途徑是繼承這些POA類,即把它們作為對象實現(xiàn)的基類。

(7)IntefaceNmaePOATie.java

創(chuàng)建并部署應用程序

客戶端:客戶程序代碼與IDL編譯器自動生成的IDL樁代碼一起編譯

服務端:對象實現(xiàn)代碼與服務程序代碼與IDL框架代碼一起編譯

八、Server端

1.編寫對象實現(xiàn)和服務程序

IDL文件只定義了對象的語法規(guī)格說明,必須編寫這些對象的具體實現(xiàn)代碼

對象實現(xiàn)可用各種語言實現(xiàn),且與客戶程序的語言無關

IDL到編程語言的映射規(guī)則

生成IDL框架代碼和各種輔助性的java接口或類

編寫對象實現(xiàn)代碼時必須繼承或使用其中的某些接口或類

服務程序

利用POA激活伺服對象供客戶對象使用

通常是一個循環(huán)執(zhí)行的進程,不斷監(jiān)聽客戶程序請求并為之服務

2.編寫服務程序

通常程序員都會編寫一個名為Server.java的服務程序,服務程序創(chuàng)建伺服對象供客戶端使用。

對象適配器:對象適配器是聯(lián)系對象實現(xiàn)與ORB本身的紐帶。它的引入還大大減輕了ORB

的任務,從而簡化了ORB的設計。

作用:管理服務器端伺服對象,對象標識,CORBA對象以及它們之間關聯(lián)。決定在收到一個

客戶請求時應調(diào)用哪一個伺服對象,然后調(diào)用該伺服對象上的合適操作。對象適配器主要完

成以下工作:對象登記、對象引用(OR, Object Reference)的產(chǎn)生、服務器進程的激活、對

象的激活、對象的撤消、對象向上調(diào)用。

什么是POA?簡述創(chuàng)建并激活POA的過程?

POAPOA是對象實現(xiàn)與ORB其他組件之間的中介,它將客戶請求傳送到伺服對象,按需創(chuàng)建子POA,提供管理伺服對象的策略。

創(chuàng)建:利用create_POA()方法可以創(chuàng)建一個新的POA作為該POA的子POA, 可以根據(jù)實際需要以這種方式創(chuàng)建多個子POA,從而形成一個POA層次

激活:對象引用通過對象標識與伺服對象建立關聯(lián)。如果POA采用RETAIN策略,可有三種激活方式:顯示激活,隱式激活,按需激活;若采用NON_RETAIN策略,對象只能按需激活。

CORBA對象和伺服對象的關系。

①CORBA對象與具體的伺服對象是兩個不同抽象層次的概念:它們之間的徹底分離使得CORBA獨立于任何特定程序設計語言,并為服務端程序的可移植性打下基礎。對象適配器是一個重要的ORB組件,它負責將抽象的CORBA對象映射到具體的伺服對象。

②CORBA對象可看作是一個具有對象標識、對象接口及對象實現(xiàn)的抽象實體。

③伺服對象(servant)是指具體程序設計語言的對象或?qū)嶓w,通常存在于一個服務程序進程之中??蛻舫绦蛲ㄟ^對象引用發(fā)出的請求經(jīng)過ORB擔當中介角色,轉(zhuǎn)換為對特定的伺服對象的調(diào)用。

④伺服對象通過對象標識關聯(lián)到CORBA對象。

三、編寫客戶程序

初始化ORB

是應用程序進入CORBA的起點

作用

讓ORB了解有新的成員加入

獲取ORB偽對象的引用,以備調(diào)用ORB內(nèi)核提供的操作時使用

偽對象(pseudo object):在CORBA基礎設施中的一個對象

獲取分布式對象引用,利用其調(diào)用對象實現(xiàn)提供的服務


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1. 你認為什么是中間件?中間件的主要作用是什么? 定義:中間件是介于應用系統(tǒng)和系統(tǒng)軟件之間的一類軟件,是位于操作...
    溫柔的謝世杰閱讀 1,394評論 0 4
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評論 18 399
  • 小編費力收集:給你想要的面試集合 1.C++或Java中的異常處理機制的簡單原理和應用。 當JAVA程序違反了JA...
    八爺君閱讀 5,234評論 1 114
  • 萬丈碧波鎖長空,章臺妖嬈惹河童。 從此故門只冬日,不聞山下藕花風。 20...
    熊大我們走閱讀 303評論 4 4
  • 每日打卡。 來評論區(qū)記錄下今天的收獲和成長吧!
    樹洞君閱讀 289評論 6 1

友情鏈接更多精彩內(nèi)容