OMG IDL語法規則及ORB
發表于:2008-02-20來源:作者:點擊數:
標簽:OMG
9. 接口的繼承 與C++和 Java 中類的繼承類似,OMG IDL中關于接口的繼承分為兩種類型: ● 單繼承: 一個接口繼承另一個接口的屬性及方法特征; ● 多繼承: 一個接口繼承兩個或兩個以上接口的屬性及方法特征。 用繼承關系編寫接口定義時,如果在接口定義之前該
9. 接口的繼承
與C++和Java中類的繼承類似,OMG IDL中關于接口的繼承分為兩種類型:
● 單繼承: 一個接口繼承另一個接口的屬性及方法特征;
● 多繼承: 一個接口繼承兩個或兩個以上接口的屬性及方法特征。
用繼承關系編寫接口定義時,如果在接口定義之前該接口的父接口沒有定義,則需要在定義接口之前先聲明父接口,即所謂的前置聲明(Forward Declaration)。下面舉例說明接口繼承。
在前一講中,曾定義了人力資源管理接口JobManager,由于實際需要,還要根據該接口定義資源服務接口,而該接口應繼承管理接口的特征。因此,以管理接口為父對象定義新的接口JobServer:
interface JobServer : JobManager
{ void MailToManager( in long ManagerId, out string status); }
JobServer : JobManager表明接口JobServer繼承JobManager的對象特征。
上例中僅說明了單繼承類型,多繼承需要用逗號將被繼承的類分開,如:
interface JobCenter : JobServer,JobManager { }
10. 異常處理(Exception)
與C++和Java的語法規則類似,CORBA同樣提供了異常處理機制,稱為“引發異?!保≧aising an Exception)。CORBA本身定義了一部分由調用請求或ORB傳遞引發的異常,稱為系統異常(有關CORBA系統異常請查閱相關資料)。因此,在OMG IDL中定義的異常通常稱為“自定義異?!?。
OMG IDL中用Exception關鍵字定義用戶異常,在定義的方法后面加上raise關鍵字來聲明,如果符合異常的觸發條件,則引發定義類型的異常。如下例所示:
enum ErrorStatus {Fatal,Important,Slight,NoMeaning};
Exception ReasonOfMail
{ ErrorStatus status; }
interface JobManager
{ string QueryJobStatus( in long Number, out string property)
raises (ReasonOfMail);}
11.定義方法傳遞的上下文
在前面幾講中,曾提到過上下文,上下文在接口定義的方法中是如何傳遞的呢?上下文對象中包括一個稱為特征名-特征值的名值對,在方法中使用context關鍵字定義。ORB在每次客戶機發出調用請求時,在對象實現中匹配特征值。如下例所示:
string QueryJobStatus( in long Number, out string property)
raise(ReasonOfMail) context(“who”);
按照以上定義,執行QueryJobStatus方法時,ORB在服務對象實現端的上下文序列中匹配特征名為“who”的特征值。
ORB互操作體系結構
ORB的互操作性(InterOperability)體現在分布于網絡中的多個對象借助Internet ORB間協議(IIOP)和通用ORB間協議(GIOP),達到不同廠商ORB之間操作的一致性。
具體來說,ORB互操作是指對于兩個獨立開發的ORB,一個ORB中的客戶端應用可以調用在另外一個ORB中利用OMG IDL定義的服務對象實現的方法。實現互操作的基本條件有:
● 多廠商ORB之間不需要預先知道對方的實現細節;
● 每個ORB必須實現其規范中定義的全部內容;
● 保留每個ORB獨立服務的實現。
ORB間互操作能力的實現,極大地豐富了分布式程序設計思想的內涵,使得構建基于整個互聯網的分布式應用成為可能。
通過在CORBA中引入內聯橋接(In-line Bridging)和請求級橋接(Request-level Bridging), 使ORB在不需要了解對方ORB實現細節的情況下,就可以實現ORB間的互操作。
上面兩種ORB間的橋接方式只是說明了ORB間相互發送請求時的虛擬連接方式。為了實現ORB間的通信,在CORBA規范中定義了兩種用于在不同廠商ORB間進行通信的協議,即通用ORB間互操作協議(General Inter_ORB Protocol ,GIOP)和環境相關的ORB間互操作協議(Environment-Specific Inter-ORB Protocol,ESIOP)。這兩種協議屏蔽了操作系統類型、實現語言以及具體廠商等因素。只要ORB支持該協議,就能夠在不同的ORB之間實現通信。
1.通用ORB間互操作協議(GIOP)
CORBA中定義的一種面向連接的互操作協議為通用ORB間互操作協議(General Inter_ORB Protocol ,GIOP)。在CORBA規范中,該協議只是一個框架,給用戶在具體實現過程中留下了充足的空間。GIOP規范包括如下內容:
● 公共數據表示(Common Data Representation,CDR)的定義:該數據定義用于將OMG IDL數據類型映射為ORB之間的橋接(Bridge)可以理解的二進制數據類型。
● GIOP消息:在CORBA規范中定義了用于實現ORB之間通信的七種類型的消息,它們分別是: 請求(Request)、響應(Reply)、請求取消(RequestCancel)、請求定位(LocateRequest)、響應定位(LocateReply)、連接關閉(CloseConnection)和消息錯誤(MessageError)。
通過定義這些消息,使得除了能夠在不同的ORB間支持CORBA規范中定義的全部功能外,還能夠支持對象實現的定位、對象的動態激活和通信資源的動態管理。
● GIOP消息傳遞: GIOP消息傳遞用于規范在網絡中傳遞應用數據和GIOP消息的方式。GIOP消息傳遞具有如下特點:面向連接,保持字節流的傳輸順序,確??煽總鬏?,傳輸內容的長度無關,達到TCP/IP協議規范的初始化性能等。
GIOP互操作協議規范了在網絡中實現ORB互操作的方式。GIOP協議還有相對于具體的網絡協議類型的鏡像,最典型的就是GIOP在TCP/IP協議中的實現: 基于Internet的ORB間協議(Internet Inter-ORB Protocol,IIOP)。IIOP規范繼承了GIOP規范的全部內容,并且增加了如下要素:
● 打開TCP/IP連接的方式;
● 利用連接實現GIOP消息傳遞的方式。
可以這樣理解IIOP協議:在遵守GIOP中關于公共數據表示和消息格式定義的前提下,以TCP/IP協議為實現藍本,具體化GIOP消息的傳遞方式。
2.環境相關的ORB互操作協議
CORBA規范中定義的另外一種ORB間的互操作協議是環境相關的ORB間互操作協議(Environment-Specific Inter-ORB Protocol,ESIOP),該協議規范了在具體的應用環境中實現ORB間互操作的方式。由于該協議與分布式應用環境有著密切的關系,使得該協議在不同的實現和應用方式方面具有較大的變化,因此稱基于ESIOP的特定環境協議為環境相關的ORB互操作協議族。
ESIOP協議中最具代表性的、同時也是在CORBA規范中明確說明了的是分布式計算環境中公共ORB互操作協議(Distributed Computing Environment Common Inter-ORB Protocol,DCE-CIOP)。在該協議中,數據的表示方式與前面講述GIOP協議完全相同,但是在消息的定義以及傳遞方式中,采用的是遠程方法調用(Remote Procedure Call,RPC)中的Locate和Invoke方法實現消息以參數形式傳遞,進而實現ORB間的互操作。
原文轉自:http://www.anti-gravitydesign.com