


版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、公共對象請求規(guī)范(CORBA)是在不同、不同語言之間實現(xiàn)對象通信的模型,它為分布式應用環(huán)境下對象資源共享、代碼重用、可移植和對象間相互建立了通用標準,同樣也為在大量硬件、之間實現(xiàn)互操作提供了良好的解決方案。 與傳統(tǒng)的 DCOM 和 RIM 相比,CORBA 體系結(jié)構獨立于語言、獨立于工作等方面的特點,使得基于 CORBA 開發(fā)的應用系統(tǒng)在網(wǎng)絡實現(xiàn)中具有更大的優(yōu)勢。本文通過利用 Java 語言編制的客戶/服務器程序,簡要分析了CORBA 的體系結(jié)構,希望能對讀者理解CORBA 有所幫助。CORBA 規(guī)范的體系結(jié)構1對象請求對象請求(ORB)(ORB)是 CORBA 規(guī)范的基礎,其主要功能是定位服
2、務對象,分析客戶對象的請求,獲取服務對象的功能接口,在客戶與服務對象間建立通信連接。2接口定義語言(IDL)IDL 是 CORBA 的另外一個重要組成部分,用于說明 CORBA 服務對象完成的功能,但不能夠利用 IDL 實現(xiàn)該功能。IDL 是獨立于其他編程語言的功能描述性語言,這從另外一個側(cè)面說明了CORBA 的語言環(huán)境獨立性。利用IDL,完成CORBA工具,將用 IDL 定義的 CORBA 對象服務對象方法的說明,然后利用語言方法說明翻譯成高級編程語言的接口說明,最后根據(jù)接口說明,利用 C或 Java 編寫對象實現(xiàn)程序。3 Stub 和Skeleton客戶對象的樁(Stub)和服務對象的骨架
3、(Skeleton)是 IDL 與對象實現(xiàn)語言之間的橋梁??蛻魧ο蟮臉妒荌DL 定義的方法接口經(jīng)IDL 編譯器編譯后,在編寫客戶對象時,高級編程語言可應用的用于識別服務對象方法的代碼??蛻魧ο蟮臉短峁┓諏ο蠼涌诘暮喢?。服務對象的骨架是 IDL 定義的方法接口經(jīng) IDL 編譯器編譯后,形成的說明服務對象提供方法的框架。對于服務對象接口中的每個方法,必須在服務對象程序中實現(xiàn)。基于 CORBA 的分布式應用 分布式應用程序設計的主要問題是確定建立在對象級上的客戶與服務對象的關系。從其最根本的功能來講,服務對象提供接口,客戶對象調(diào)用接口,客戶對象不需要了解對象的位置以及實現(xiàn)細節(jié),也不需要了解哪個 O
4、RB 用于對象之間的交互。按照實現(xiàn)過程,CORBA 的實現(xiàn)分為兩種方式:命名服務對象方式和字符串化對象方式。下面介紹基于CORBA 技術,用 Java 語言在網(wǎng)絡中建立分布式應用的具體方法。1對象功能描述在服務對象端,模擬系統(tǒng)的信息發(fā)布,隨機生成 10 支的名稱與價格。在客戶端,服務器,獲得名稱與價格。其獲取方式分為兩種:取得全部的信息和取得某支的價格。2系統(tǒng)簡要設計根據(jù)對象功能的說明,用 UML 描述出服務對象需要實現(xiàn)的功能:StockSymbol :StringgetStockValue( StockSymbol :symbol ) :float StockSymbolList getSt
5、ockSymbols() :StockSymbol 3服務對象接口定義根據(jù)系統(tǒng)分析及設計結(jié)果,用IDL 編寫出服務對象方法描述程序。/StockMarket.idl 服務對象方法接口定義文件/模塊定義module StockMarkettypedef string StockSymbol;typedef sequen/接口定義tockSymbol StockSymbolList;erfatockServerfloat getStockValue(in StockSymbol symbol); StockSymbolList getStockSymbols();4編譯StockMarket.id
6、l在命令行中鍵入: idltojava fnocpp StockMarket.idl其中idltojava 為IDL 程序翻譯程序,該隨 JDK 1.3 開發(fā)工具包提供。如果使用的 JDK 版本為 1.2 以下,可以在 Sun 公司的 Java 分類主頁中該軟件,為:/developer/earlyAcs/jdk12/idltojava.htmlfnocpp 為idltojava 的程序參數(shù),強制編譯過程中不使用C 語言預處理。編譯StockMarket.idl 后,在該文件所在目錄中生成名稱為 StockMarket 的子目錄。其中 StockServer.java 文件中包括在 Stock
7、Market.idl 中定義的服務對象接口 StockServer,服務對象必須實現(xiàn)該接口。_StockServerImplBase.java 中包括實現(xiàn)服務對象程序時用到的其他類,服務對象在實現(xiàn)時必須繼承該類。5編寫服務對象實現(xiàn)程序/StockServerImpl.java 服務對象實現(xiàn)程序/ 包定義package StockMarket;/ 引入應用類庫import java.util.Vector;import import import import.omg.CORBA.ORB;.omgponent;.omg.CosNaming.NamingContext;.omg.CosNaming
8、.NamingContextHelper;public class StockServerImpl extends_StockServerImplBase implements StockServer/定義名稱與價格對象private Vector myStockSymbols; private Vector myStockValues;/ 隨機生成名稱需要用到的字母private sic char ourCharacters = A, B, C, D, E, F, G,H, I, J, K, L, M, N,O, P, Q, R, S, T,U, V, W, X, Y, Z;/ 服務對象名稱
9、,用于生成 ORBprivate sic String ourPathName = “StockServer”;/ StockServerImpl 類的構造函數(shù)public StockServerImpl()myStockSymbols = new Vector(); myStockValues = new Vector();/ 隨機生成名稱及相應價格for (i = 0; i 10; i)/ 生成含有 4 個空格的字符數(shù)組StringBuffer stockSymbol=new StringBuffer(“ ”);/ 將每個字符替換為隨機生成的字符for (j = 0; j 4; j)sto
10、ckSymbol.setCharAt(j,ourCharacters()(Math.random()26f);/ 將名稱在myStockSymbols 中myStockSymbols.addElement(stockSymbol. toString();/將在myStockValues 中價格myStockValues.addElement(new Float (Math.random() 100f);/ 在服務對象的標準輸出中打印出信息System.out.prln(“Generated stock symbols:”);for (i = 0; i 10; i)System.out.prln
11、(myStockSymbols.elemen(i) “” myStockValues.elemen(i);System.out.pr/用于返回給定ln();的價格public float getStockValue(String symbol)/ 在服務對象的價格對象中匹配給定的名稱stockIndex = myStockSymbols.indexOf(symbol);/ 如果匹配成功,返回該if (stockIndex != 1)的價格return (Float)myStockValues.elemenelse / 在服務對象中未發(fā)現(xiàn)給定的return 0f;(stockIndex).flo
12、atValue();名稱/ 返回服務對象中全部名稱public String getStockSymbols()Stringsymbols = new String myStockSymbols.size();myStockSymbols.copy return symbols;o(symbols);/ main 方法定義public sic void main(String args)try/ 初始化 ORBORB orb = ORB.init(args, null);/ 生成StockServerImpl 實例StockServerImpl stockServer = new StockS
13、erverImpl();/將orb 與StockServer 實例進行連接orb.connect(stockServer);/在CORBA 中獲取命名服務.omg.CORBA.Object obj =orb.resolve_initial_referen/縮小命名服務對象尋找范圍 NamingContext namingContext = NamingContextHelper.narrow(obj);/ 將StockServer 對象與命名服務進行綁定(“NameService”);ponentponent = newponent(ourPathName,“”); ponent path =
14、 ponent ; namingContext.rebind(path,stockServer);/ 生成任意對象,等待客戶對象調(diào)用服務對象方法java.lang.Object waitOnMe = newjava.lang.Object();/ 方法同步synchronized (waitOnMe)waitOnMe.wait();catch (Exception ex)/ 捕獲例外System.err.prln(“Couldnt bind StockServer: ” ex.getMessage();6編寫客戶對象實現(xiàn)程序/StockMarketCnt.java 客戶對象實現(xiàn)程序/包定義pa
15、ckage StockMarket;/引入應用的類庫import import import import.omg.CORBA.ORB;.omgponent;.omg.CosNaming.NamingContext;.omg.CosNaming.NamingContextHelper;/ 客戶對象public class StockMarketCnt/ 定義客戶 ORBpublic sic ORB ourORB;/ 服務對象StockServer 實例定義private StockServer myStockServer;/ 客戶對象構造方法StockMarketCnt() / 運行客戶對象p
16、ublic void run()connect();if (myStockServer != null)doSomething();/ 建立與服務對象StockServer 連接的方法protected void connect()try/ 獲得命名服務.omg.CORBA.Object obj = ourORB.resolve_initial_referen NamingContext namingContext =(“NameService”);NamingContextHelper.narrow(obj);/ 定位服務對象ponentponent path = ponent = newp
17、onent ;ponent(“StockServer”,“”);myStockServer =StockServerHelper.narrow(namingContext.resolve(path);/ 捕獲例外catch (Exception ex)System.err.prln(“Couldnt resolveStockServer: ” ex); myStockServer = null; return;System.out.prln(“Sucfully bound to a StockServer.”);/ 調(diào)用服務對象方法protected void doSomething()try
18、/ 獲取服務對象中全部名稱和價格StringstockSymbols=myStockServer. getStockSymbols();/ 在客戶端打印出名稱和價格for (i = 0; i stockSymbols.length; i)System.out.prln(stockSymbolsi “” myStockServer.getStockValue(stockSymbols i);/ 捕獲例外catch (.omg.CORBA.SystemException ex)System.err.prln(“Fatal error: ” ex);/ 客戶對象main 方法定義public sic
19、 void main(String args)/ 初始化 ORBourORB = ORB.init(args, null);/ 生成客戶對象實例StockMarketCnt stockCnt = new StockMarketCnt();/ 執(zhí)行客戶對象的run()方法 stockCnt.run();7編譯客戶和服務對象實現(xiàn)程序在命令行中鍵入如下命令編譯服務對象實現(xiàn)程序,注意 StockServerImpl.java 和StockServerImpl.java在StockMarket 目錄中。在 Unix中,用“/”代替“”:javac StockMarketStockServerImpl.java在命令行中鍵入如下命令編譯客戶對象實現(xiàn)程序:java StockMarketStockServerImpl.java 8啟動CORBA 對象命名服務在服務對象的計算機中鍵入如下命令啟動對象命名服務:tnameserv ORBInitial
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學英語試卷聽力稿
- 書籍設計印刷合同范本文檔
- 個體診所自查報告
- 廈門落戶中介合同范本
- 業(yè)務員個人年度工作總結(jié)
- 三年級語文備課組工作總結(jié)
- 廚房調(diào)味采購合同范例
- 公司代運營合同范本
- 農(nóng)業(yè)種植工合同范本
- 中式糕轉(zhuǎn)讓店鋪合同范本
- 中國腦出血診治指南
- 信息安全意識培訓課件
- 社團活動情況登記表
- 基本樂理及音樂常識類知識考試題及答案
- 山東省濰坊市2023-2024學年高二下學期期末測試+英語試卷
- 2023年北京市初三一模數(shù)學試題匯編:選擇壓軸(第8題)
- AIGC視域下非遺文創(chuàng)產(chǎn)品的數(shù)字化轉(zhuǎn)型升級路徑研究
- 生涯規(guī)劃與就業(yè)創(chuàng)業(yè)全套課件電子教案板
- 公司投資占股協(xié)議書模板
- 石油采油井場水土保持方案報告書
- 2024-2030年中國護眼臺燈行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
評論
0/150
提交評論