Corba初體驗(yàn)——概要筆記

一刹淌、OMG

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

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

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

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

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

? ? ? ? ?覆蓋了從分析活孩、設(shè)計(jì)到編碼、部署乖仇、運(yùn)行和管理的整個(gè)軟件開發(fā)過程憾儒。

? ? ? ? ? 這些規(guī)范是一種工業(yè)或行業(yè)標(biāo)準(zhǔn)

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

? ? UML:Unified Modeling Language

? ?CORBA:Common Object Request Broker Architecture。

? ? MDA: ??Model Driven Architecture

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

二训裆、OMA

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

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

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

2.OMA對象模型

? ? ? ? ? ? 在OMA對象模型中,對象是一個(gè)被封裝的實(shí)體记劝,它具有一個(gè)不可改變的標(biāo)識变姨,并能給客戶用戶提供一個(gè)或多個(gè)服務(wù)。如:

interface printer

{

attribute model;

void print(in string buffer);

};

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

4.在OMA參考模型中愧口,OMG定義了一條為對象所公用的通信總線睦番,即ORB(Object Request Broker)。同時(shí)耍属, OMG又定義了對象進(jìn)出這一總線的接口托嚣。這包括:對象服務(wù)(Object Services) 、公共設(shè)施(common facilities)厚骗、應(yīng)用接口(Application Interface)和域接口(Domain Interface)示启。

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

1.概念:是OMA參考模型的核心领舰,是基于分布式對象構(gòu)建應(yīng)用程序的基礎(chǔ)設(shè)施夫嗓,保證了在異構(gòu)平臺上對象的互操作性與可移植性迟螺。

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

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

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

2 )ORB解釋該調(diào)用并負(fù)責(zé)查找一個(gè)實(shí)現(xiàn)該請求的對象球订,

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

4) 客戶方不需要了解服務(wù)對象的位置浪谴、通信方式开睡、實(shí)現(xiàn)、激活或存儲機(jī)制较店。

四士八、對象服務(wù)

1.作用:提供所有應(yīng)用程序都可能用到的通用服務(wù)的接口(基本服務(wù),與具體的應(yīng)用領(lǐng)域無關(guān)的接口)梁呈。

2.支持的服務(wù)有:名字服務(wù)婚度、持久性服務(wù)、生命周期服務(wù)官卡、事務(wù)處理服務(wù)蝗茁、對象事件服務(wù)和安全服務(wù)等。

3.實(shí)質(zhì):通用的服務(wù)集合寻咒,將覆蓋對象整個(gè)生存期的對象管理任務(wù)標(biāo)準(zhǔn)化哮翘,可保證各種應(yīng)用程序均采用一致的風(fēng)格管理對象


五、CORBA體系結(jié)構(gòu)

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

2.建立在OMG的對象模型基礎(chǔ)之上毛秘,主要由三個(gè)關(guān)鍵部分組成

? ? ? ? ? ? ? ? 作為分布式對象通信基礎(chǔ)設(shè)施的對象請求代理ORB的體系結(jié)構(gòu)饭寺;

? ? ? ? ? ? ? ? 接口定義語言IDL的語法和語義以及到各種程序設(shè)計(jì)語言的映射;

? ? ? ? ? ? ? ?保證可互操作性的標(biāo)準(zhǔn)ORB間的通信協(xié)議GIOP/IIOP叫挟。



六艰匙、IDL語言

說明性語言,定義組件接口抹恳,不定義實(shí)現(xiàn)员凝。

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

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

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

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

f5刷新阶捆,生成Stub與Skeleton

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

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

每個(gè)對象實(shí)例都有一個(gè)用于唯一標(biāo)識自身的對象引用洒试。客戶程序利用對象引用指明調(diào)用的方向

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

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

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

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

Skeleton(框架存在于服務(wù)器,是把遠(yuǎn)程命令解碼具练,調(diào)用服務(wù)端的遠(yuǎn)程對象的方法乍构,把

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

VisiBroker for Java的IDL編譯器idl2java為每個(gè)接口自動(dòng)生成7個(gè)文件:

(1)_IntefaceNameStub.java

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

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

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

(2)IntefaceName.java

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

(3)IntefaceNameHelper.java

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

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

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

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

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

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

編程時(shí)會用到該類中提供的方法牍鞠。

(4)IntefaceNameHolder.java

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

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

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

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

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

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

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

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

(5)IntefaceNameOperations.java

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

(6)IntefaceNamePOA.java

Hello對象的服務(wù)端框架代碼文虏,該類的功能:

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

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

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

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

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

(7)IntefaceNmaePOATie.java

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

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

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

八、Server端

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

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

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

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

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

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

服務(wù)程序

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

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

2.編寫服務(wù)程序

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

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

的任務(wù)华匾,從而簡化了ORB的設(shè)計(jì)映琳。

作用:管理服務(wù)器端伺服對象,對象標(biāo)識瘦真,CORBA對象以及它們之間關(guān)聯(lián)刊头。決定在收到一個(gè)

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

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

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

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

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

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

激活:對象引用通過對象標(biāo)識與伺服對象建立關(guān)聯(lián)验庙。如果POA采用RETAIN策略,可有三種激活方式:顯示激活社牲,隱式激活粪薛,按需激活;若采用NON_RETAIN策略搏恤,對象只能按需激活违寿。

CORBA對象和伺服對象的關(guān)系。

①CORBA對象與具體的伺服對象是兩個(gè)不同抽象層次的概念:它們之間的徹底分離使得CORBA獨(dú)立于任何特定程序設(shè)計(jì)語言熟空,并為服務(wù)端程序的可移植性打下基礎(chǔ)藤巢。對象適配器是一個(gè)重要的ORB組件,它負(fù)責(zé)將抽象的CORBA對象映射到具體的伺服對象息罗。

②CORBA對象可看作是一個(gè)具有對象標(biāo)識菌瘪、對象接口及對象實(shí)現(xiàn)的抽象實(shí)體。

③伺服對象(servant)是指具體程序設(shè)計(jì)語言的對象或?qū)嶓w阱当,通常存在于一個(gè)服務(wù)程序進(jìn)程之中∶庸ぃ客戶程序通過對象引用發(fā)出的請求經(jīng)過ORB擔(dān)當(dāng)中介角色弊添,轉(zhuǎn)換為對特定的伺服對象的調(diào)用。

④伺服對象通過對象標(biāo)識關(guān)聯(lián)到CORBA對象捌木。

三油坝、編寫客戶程序

初始化ORB

是應(yīng)用程序進(jìn)入CORBA的起點(diǎn)

作用

讓ORB了解有新的成員加入

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

偽對象(pseudo object):在CORBA基礎(chǔ)設(shè)施中的一個(gè)對象

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


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澈圈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子帆啃,更是在濱河造成了極大的恐慌瞬女,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件努潘,死亡現(xiàn)場離奇詭異诽偷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)疯坤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門报慕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人压怠,你說我怎么就攤上這事眠冈。” “怎么了菌瘫?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵蜗顽,是天一觀的道長布卡。 經(jīng)常有香客問我,道長诫舅,這世上最難降的妖魔是什么羽利? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮刊懈,結(jié)果婚禮上这弧,老公的妹妹穿的比我還像新娘。我一直安慰自己虚汛,他們只是感情好匾浪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卷哩,像睡著了一般蛋辈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上将谊,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天冷溶,我揣著相機(jī)與錄音,去河邊找鬼尊浓。 笑死逞频,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的栋齿。 我是一名探鬼主播苗胀,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓦堵!你這毒婦竟也來了基协?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤菇用,失蹤者是張志新(化名)和其女友劉穎澜驮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刨疼,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泉唁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了揩慕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亭畜。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖迎卤,靈堂內(nèi)的尸體忽然破棺而出拴鸵,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布劲藐,位于F島的核電站八堡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏聘芜。R本人自食惡果不足惜兄渺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汰现。 院中可真熱鬧挂谍,春花似錦、人聲如沸瞎饲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗅战。三九已至妄田,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驮捍,已是汗流浹背疟呐。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留东且,地道東北人萨醒。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像苇倡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子囤踩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. 你認(rèn)為什么是中間件旨椒?中間件的主要作用是什么? 定義:中間件是介于應(yīng)用系統(tǒng)和系統(tǒng)軟件之間的一類軟件堵漱,是位于操作...
    溫柔的謝世杰閱讀 1,226評論 0 4
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法综慎,類相關(guān)的語法,內(nèi)部類的語法勤庐,繼承相關(guān)的語法示惊,異常的語法,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • 小編費(fèi)力收集:給你想要的面試集合 1.C++或Java中的異常處理機(jī)制的簡單原理和應(yīng)用愉镰。 當(dāng)JAVA程序違反了JA...
    八爺君閱讀 4,592評論 1 114
  • 萬丈碧波鎖長空米罚,章臺妖嬈惹河童。 從此故門只冬日丈探,不聞山下藕花風(fēng)录择。 20...
    熊大我們走閱讀 288評論 4 4
  • 每日打卡。 來評論區(qū)記錄下今天的收獲和成長吧!
    樹洞君閱讀 279評論 6 1