基于CORBA的分布式平臺.ppt_第1頁
基于CORBA的分布式平臺.ppt_第2頁
基于CORBA的分布式平臺.ppt_第3頁
基于CORBA的分布式平臺.ppt_第4頁
基于CORBA的分布式平臺.ppt_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

,第二章 基于CORBA的分布式平臺,苗啟廣,計算機學(xué)院,,4.7 CORBA編程Hello World例程,分布式HelloWord程序的操作,客戶機調(diào)用HelloServer的sayhello()操作 ORB把調(diào)用傳給為IDL接口注冊的提供服務(wù)的對象 提供服務(wù)的sayhello()方法運行并返回Java String ORB將該String傳回客戶機 客戶機打印string值,運行環(huán)境,運行環(huán)境由jdk1.3+idltojava 組成,具體的安裝步驟如下: 安裝JDK1.3: 從SUN公司下載jdk 1.3或者通過其他方式得到j(luò)dk 1.3進行安裝,再設(shè)定相應(yīng)的環(huán)境變量,在本文測試用的電腦上是如下所示: 下載idltojava: Java IDL編輯器(idltojava)在/products/jdk/idl/中單獨提供。在JDK 1.3版中則提供了新的IDL編輯器idlj,內(nèi)容,編輯IDL文件則用任何文本編輯器即可,具體的編寫過程如下: 1、 編寫 IDL 接口包括: l 如何編寫簡單的 IDL 接口定義; l 如何將 IDL 接口轉(zhuǎn)換到 Java ; l idltojava 編譯器生成的每個文件的用途 。 2、開發(fā)客戶機應(yīng)用程序,說明如何編寫簡單的客戶機應(yīng)用程序,包括: l 如何創(chuàng)建 ORB 對象 ; l 如何使用命名服務(wù)來取得初始的對象引用 ; l 如何調(diào)用 CORBA 對象上的操作 。,內(nèi)容,3、開發(fā)客戶機 Applet ,說明如何編寫與客戶機應(yīng)用程序執(zhí)行同樣功能的客戶機 applet 。 4、開發(fā) Hello World 服務(wù)器,說明如何編寫簡單的服務(wù)器,包括: l 為服務(wù)器創(chuàng)建 ORB 對象 ; l 實例化服務(wù)程序并將它連接到 ORB ; l 通過命名服務(wù)來注冊該服務(wù)程序 ; l 使服務(wù)器等待對服務(wù)程序的調(diào)用 。,編寫 IDL 接口,IDL接口定義了應(yīng)用程序中客戶機部分和服務(wù)器部分之間的約定,同時指定可用的操作和屬性 用來指定分布式應(yīng)用程序的操作接口,與編程語言無關(guān) 編寫實現(xiàn)代碼前,必須將IDL接口映射到Java(自動完成) 實現(xiàn)映射后,IDL每條語句都轉(zhuǎn)換為所選編程語言中的相應(yīng)語句,4.7.1 編寫 IDL 接口,啟動自己熟悉的文本編輯器,創(chuàng)建名為 Hello.idl 的文件,編寫如下代碼: module HelloApp interface Hello string sayHello(); ; ; 可以看出用于 Hello World 的 IDL 非常簡單,它的單一接口執(zhí) 行單一操作。僅需執(zhí)行三步: l 聲明 CORBA IDL 模塊 l 聲明接口 l 聲明操作,1、編寫 Hello.idl,是一個名字空間,是相關(guān)接口和聲明的容器,每條模塊語句都被映射到一條Java Package語句,聲明一個對象與其它對象的API約定,映射后,IDL中的每條interface語句都映射到一條Java Interface語句,服務(wù)器將代表調(diào)用他們的客戶機執(zhí)行的行為,每條操作語句都在所生成的JAVA接口中生成相應(yīng)的方法語句,2、將 Hello.idl 從 IDL 映射到 Java,工具IDLtoJava讀取IDL文件并創(chuàng)建所需的JAVA文件,執(zhí)行: 進入命令行提示 將目錄改為hello.idl文件所在的位置 輸入編譯器命令:idltojava hello.idl 或 idlj fall hello.idl 生成Helloapp目錄,生成一些文件。,2、將 Hello.idl 從 IDL 映射到 Java,生成的五個主要文件分別是: _HelloImplBase.java:此抽象類是服務(wù)器 skeleton,為服務(wù)器提供基本 CORBA 功能。它實現(xiàn) Hello.java 接口。服務(wù)器類 HelloServant 擴展 _HelloImplBase。 _HelloStub.java:該類是客戶機 stub,為客戶機提供 CORBA 功能。它實現(xiàn) Hello.java 接口。 Hello.java :此接口包含 IDL 接口的 Java 版本。它包含方法 sayHello()。Hello.java 接口擴展 org.omg.CORBA.Object,也提供標(biāo)準(zhǔn) CORBA 對象功能。 HelloHelper.java :此終態(tài)類提供輔助功能,其中特別有用的是narrow() 方法,可用于將 CORBA 對象引用強制轉(zhuǎn)換為適當(dāng)類型。 HelloHolder.java:此終態(tài)類保存類型 Hello 的公共實例成員,可提供對 out 和 inout 參數(shù)的操作。,Hello.java,代碼如下所示: /* idltojava 生成的 Hello.java */ package HelloApp; public interface Hello extends org.omg.CORBA.Object String sayHello(); ,Hello.idl module HelloApp interface Hello string sayHello(); ;,2.6.2 編寫客戶機應(yīng)用程序,HelloClient.java 程序源碼: import HelloApp.*; import org.omg.CosNaming.*; import org.omg.CORBA.*; public class HelloClient public static void main(String args) try ORB orb = ORB.init(args, null); org.omg.CORBA.Object objRef = orb.resolve_initial_references(“NameService“); NamingContext ncRef = NamingContextHelper.narrow(objRef); NameComponent nc = new NameComponent(“Hello“, “); NameComponent path = nc; Hello helloRef = HelloHelper.narrow(ncRef.resolve(path); String Hello = helloRef.sayHello(); System.out.println(Hello); catch(Exception e) System.out.println(“ERROR : “ + e); e.printStackTrace(System.out); ,CORBA客戶機需要本地ORB對象來執(zhí)行其所有編組和IIOP操作,4.7.3 編寫 Hello World 服務(wù)器程序,import HelloApp.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; public class HelloServer public static void main(String args) try ORB orb = ORB.init(args, null); HelloServant helloRef = new HelloServant(); orb.connect(helloRef); org.omg.CORBA.Object objRef = orb.resolve_initial_references(“NameService“); NamingContext ncRef = NamingContextHelper.narrow(objRef); NameComponent nc = new NameComponent(“Hello“, “); NameComponent path = nc; ncRef.rebind(path, helloRef); java.lang.Object sync = new java.lang.Object(); synchronized(sync) sync.wait(); catch(Exception e) System.err.println(“ERROR: “ + e); e.printStackTrace(System.out); ,class HelloServant extends _HelloImplBase / sayHello() 方法。 public String sayHello() /加入方法實現(xiàn)。 return “nHello world!n“; ,4.7.4 編譯和運行,1.客戶機安裝 創(chuàng)建Client新目錄,將helloclient.java拷入 2.編譯客戶機應(yīng)用程序 進入client目錄, 運行Java編譯器 javec helloclient.java 3.服務(wù)器安裝 創(chuàng)建server目錄,將helloserver.java和helloclent.class拷入 將helloapp目錄內(nèi)容拷入 4.編譯服務(wù)器 進入server目錄,運行java編譯器 javac helloserve.java,4.7.4 編譯和運行,5.運行 l 啟動 Java IDL 名字服務(wù)器: tnameserv -ORBInitialPort

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論