一、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的過程?
◎POA:POA是對象實現(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)提供的服務
