一刹淌、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的過程?
◎POA:POA是對象實(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ù)