摘要:為了解決目前異構測試設備相互獨立、測試功能單一、測試能力難以獲得進一步提升的問題,提出利用CORBA技術應用于異構測試設備互聯互通的需求。分析CORBA技術在異構平臺的信息交互系統體系結構的設計思想,通過操作方式,實現狀態信息的交互,運用CORBA的事件服務實現消息的傳遞,達到不同具有異構特性測試設備之間的設備狀態和測量信息的交互和互操作的目的。
關鍵詞:CORBA;IDL;事件服務IC/S模式
中圖分類號:TP311
文獻標識碼:B
文章編號:1004—373X(2008)04—040—03
CORBA是一個面向對象的分布式通信平臺,為異構環境中實現對象間互操作提供支持,具備完全分布性,高度互操作性,完全面向對象的特點。CORBA的接口定義語言可以向不同的語言結構的映射,實現對不同語言平臺的通用性。因此,在異構信息交互的設計中,引入CORBA有助于解決異構設備互不關聯,多點多參數測試數據難以獲取,各網絡節點的信息不能交互,異構平臺的資源模塊的信息交互和協同互操作性難等問題。
1 系統設計
本系統是通過對c0RBA體系結構的研究,設計出適合于異構資源模塊的通信平臺,應用于異構通信平臺中的所設計的CORBA結構的目標如下:
(1)實現異構資源模塊的分布對象間進行基于C/S模式狀態信息的傳遞;
(2)實現基于C/S模式下異構的資源模塊的互操作;
(3)實現基于推模式下的事件通道消息傳遞模式。
系統體系結構設計如圖1所示,服務器端以推模式向消費者代理提供測試設備的狀態信息和測量信息。對象客戶(處理中心、顯示、數據庫消費者)與客戶端代理交互,而對象實現(信息供應者)與服務器端代理交互。在客戶端,ORB層軟件充當客戶端代理與客戶系統的網絡之間的中介。在服務器端,ORB層軟件充當服務器端代理與客戶系統的網絡之間的中介。通過公共協議,雙方的ORB層能夠解析對象編程語言及兩臺主機平臺(網絡及操作系統)之間的區別,從而協助雙方的數據通信。ORB層之間的互操作是通過OMG定義的GIOP協議來實現。該規范提供了一個通用框架,用于在特定的傳輸層上構建互操作協議。對象客戶使用名字服務來定位對象。

2 系統實現
2.1狀態信息
用IDL定義接口,生成ResourceModule.idl文件,然后用IDL編譯器進行編譯,在生成的文件中為方法添加實現體。由于篇幅所限,下面只列出IDL接口,沒有寫出具體的實現體,但在操作的詳細描述中給出了具體的實現方法。資源模塊的IDL接口定義如下:

在上述接口中,對所需要的消息類型及其序列進行自定義,并給出發布、訂閱、管理3個操作。
發布操作 其中包括2個out屬性參數,分別是發布消息提供者的狀態信息列表和測量信息。狀態信息列表主要包括:任務代號、任務類型、定義設備的IP地址、設備標識、設備ID號、設備類型等。發布的測量數據信息主要包括:測量數據格式,測量數據類型以便于消費者訂閱。該操作的返回值表示發布是否成功。
訂閱操作 其中有一個屬性為in的參數和一個屬性為out的參數,處理過程是在發布的消息列表中查找消費者需求的數據,在消費者端訂閱該數據的供應者。同時,向消息的發布者返回一個訂閱請求。建立消息的邏輯傳遞連路。該操作返回值表示訂閱是否成功。
管理操作 其中包括三個屬性為in的參數,分別為服務質量優先級管理、發布列表管理和訂閱列表管理。服務質量管理主要是對消息的優先級和發布,訂閱的狀態列表的更新進行管理等。定義優先級的等級設置為1~10,一般信息的等級設置為5,等級越低,傳遞的優先級越高。發布列表和訂閱列表的管理是對那些新增加的供應者和消費者,那些供應者和消費者需要刪除的管理。該操作的返回值表示管理是否成功。
2.2 消息的傳遞
在異構平臺信息交互中有許多消息的供應者和消費者,如果直接用對象間的直接調用實現他們之間的消息傳遞是非常困難的。因此,通過CORBA事件服務實現的許多不同的消息供應者和消費者之間的消息傳遞。事件傳遞的模式有2種:推模式和拉模式。在靶場中各個消息供應者主動向網絡提供設備的狀態信息和測量信息,所以,以推模式來設計靶場中消息的傳遞。消息的傳遞以操作調用的形式進行,操作的參數就是消息的內容。在推模式中,這個操作取名為push,他的定義在消費者中,由消費者實現這個操作。供應者如果希望傳遞消息,可以主動調用消費者提供的這個push操作,使消息從供應者送達消費者。事件通道的兩側可以連接相同模式的供應者和消費者,也可以連接不同模式的供應者和消費者。供應者和消費者的數目也不受限制。因此,只需編寫提供者和消費者的代理,就可以進行消息提供者和消費者的擴展。


消息供應者利用CORBA命名服務NamingContext接口中的bind()操作,給出事件通道名,獲得事件通道的對象引用。調用事件通道對象引用上的操作for_supp-li-ers(),得到供應者管理的對象引用。再調用供應者管理上的操作obtain_push_consumer(),得到消費者代理的對象引用。消息供應者調用消費者代理上的操作connect_push_supplier(),連接到消費者代理上,從而使供應者的一個實例與一個事件通道的實例關聯起來。
消費者調用bind()操作,創建與供應者所創建的相同的通道名。獲得事件通道的對象引用。調用事件通道對象引用上的操作for_consumers(),得到消費者管理的對象引用。再調用消費者管理上的操作obtain_push_suppli—er(),得到供應者代理的對象引用。消息消費者調用供應者代理上的操作connect_push_consumer(),連接到供應者代理上,從而使消費者的一個實例與一個事件通道的實例關聯起來。
供應者調用消費者代理上的push操作。因為消費者代理是消費者的一個映像,因此,所調用的push操作實際上在消費者中執行的,這樣,事件消息就推到了消費者那里。完成事件消息的傳遞。
事件發送完畢后,供應者和消費者調用所連接的代理上的操作disconnect_push_consumer()和disconnect_push_supplier(),斷開與他們的連接,并釋放相應的資源。
3 結 語
本文設計和實現CORBA技術在異構平臺信息交互的應用。解決異構測試設備互不相關、測試功能單一、測試能力難以獲得進一步提升、異構測試設備的交互和互操作等問題。通過對發布、訂閱和管理操作的定義,實現不同消息供應者和消費者之間的信息的發布和訂閱,為事件通道建立邏輯鏈路。建立推模式下的事件通道,實現消息的傳遞。