本篇內(nèi)容介紹了“JavaIDL的分布式程序設(shè)計方法是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
專注于為中小企業(yè)提供網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)獲嘉免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
JavaIDL介紹
JavaIDL是Java 2開發(fā)平臺中的CORBA功能擴(kuò)展。在Java 2中引入JavaIDL,使得利用OMG IDL能夠定義服務(wù)對象的基本功能,并且將IDL根據(jù)CORBA規(guī)范的要求,映射到Java語言,并以此開發(fā)出標(biāo)準(zhǔn)的具有互操作性和可連接性的分布式應(yīng)用。JavaIDL使分布式、支持Web的Java應(yīng)用可以基于IIOP協(xié)議透明地調(diào)用遠(yuǎn)程服務(wù)。
JavaIDL運行期(Runtime)組件包括一個全兼容的對象請求代理??Java ORB,用于基于IIOP協(xié)議實現(xiàn)分布式對象之間的通信。該ORB支持瞬態(tài)CORBA對象和瞬態(tài)名字服務(wù)器,并且ORB生存期受運行ORB進(jìn)程生存期的限制。
在程序設(shè)計中,首先對要實現(xiàn)的服務(wù)對象功能進(jìn)行系統(tǒng)分析,并創(chuàng)建IDL接口描述文件對功能進(jìn)行描述。然后利用JavaIDL提供的IDL到Java語言的映射工具將IDL文件映射為客戶端樁(Stub)文件和服務(wù)器骨架(Skeleton)文件。
在實現(xiàn)的客戶端應(yīng)用程序中,包括對遠(yuǎn)程對象的引用、服務(wù)功能請求的發(fā)送以及服務(wù)對象返回結(jié)果的解析處理等功能。通常,客戶端應(yīng)用程序利用命名服務(wù)實現(xiàn)對遠(yuǎn)程對象的綁定,并通過客戶端ORB將客戶端與服務(wù)對象聯(lián)系起來,實現(xiàn)方法的遠(yuǎn)程調(diào)用。
在服務(wù)器端,ORB利用服務(wù)對象骨架將調(diào)用請求和參數(shù)的數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換,把遠(yuǎn)程調(diào)用轉(zhuǎn)換為對本地對象中方法的調(diào)用。當(dāng)方法返回時,骨架對計算結(jié)果進(jìn)行轉(zhuǎn)換和封裝,通過ORB把結(jié)果返回給客戶機。
建立CORBA應(yīng)用程序的過程
分布式應(yīng)用程序設(shè)計的主要問題是確定建立在對象級上的客戶與服務(wù)對象的關(guān)系,從其最根本的功能來講,服務(wù)對象提供遠(yuǎn)程接口,客戶對象調(diào)用遠(yuǎn)程接口,客戶對象不需要了解遠(yuǎn)程CORBA對象的位置以及實現(xiàn)細(xì)節(jié),也不需要了解哪個ORB 用于對象之間的交互。
按照實現(xiàn)的基本過程,CORBA對象服務(wù)的實現(xiàn)方式分為兩種: 對象的命名引用方式和字符串化對象引用方式。CORBA創(chuàng)建分布式應(yīng)用程序的過程大體如下:
◆ 進(jìn)行系統(tǒng)分析,確定服務(wù)對象需要實現(xiàn)的功能;
◆ 根據(jù)系統(tǒng)分析結(jié)果,編寫IDL接口說明文件;
◆ 編譯接口說明文件,產(chǎn)生服務(wù)對象的骨架與客戶對象的樁(可選);
◆ 基于客戶對象的樁,編寫客戶對象程序;
◆ 基于服務(wù)對象的骨架或者動態(tài)請求實現(xiàn),編寫服務(wù)對象程序;
◆ 分別編譯客戶對象和服務(wù)對象程序;
◆ 啟動服務(wù)對象程序;
◆ 啟動客戶對象程序。
分布式應(yīng)用程序示例
以下用一個例程說明建立分布式應(yīng)用程序的過程:
1. 對象功能描述和系統(tǒng)簡要設(shè)計
在服務(wù)對象端將一個字符串對象賦值,客戶端通過調(diào)用服務(wù)對象方法獲取該字符串的值。根據(jù)對象功能的說明,用UML描述出服務(wù)對象需要實現(xiàn)的功能:
getIt() :String[]
2. 服務(wù)對象接口定義
根據(jù)系統(tǒng)分析結(jié)果,用IDL編寫出服務(wù)對象方法描述程序
getMessage.idl:
module getMessage { interface getIt { string returnObject(); }; }; |
3. 編譯getMessage.idl
idltojava -fno-cpp getMessage.idl
4. 編寫客戶端程序
//引入相關(guān)類庫 import org.omg.CosNaming.*; import org.omg.CORBA.*; //客戶端對象方法 public class client { public static void main(String args[]) { // 創(chuàng)建和初始化ORB ORB orb = ORB.init(args, null); // 獲取根命名服務(wù)上下文對象 org.omg.CORBA.Object naming = orb.resolve_initial_references(“NameService”); NamingContext namingContext = NamingContextHelper.narrow(naming); //解析命名中的對象引用 NameComponent nc = new NameComponent(“getMessage”, “”); NameComponent path[] = {nc}; getMessage.getIt method =getMessage- Helper.narrow(namingContext.resolve(path)); // 調(diào)用服務(wù)對象方法 String result=method.returnObject(); } }
5. 編寫服務(wù)對象程序
// 引入相關(guān)類庫 import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContext Package.*; import org.omg.CORBA.*; //服務(wù)方法 class returnMethod extends _getMessage- ImplBase { public String getIt() { String result =“How about it”; return result; } } //服務(wù)器端方法 public class server { public static void main(String args[]) { // 創(chuàng)建和初始化ORB ORB orb = ORB.init(args, null); // 創(chuàng)建服務(wù)對象并將其向ORB注冊 returnMethod obj=new returnMethod(); orb.connect(returnMethod); // 獲取根命名上下文 org.omg.CORBA.Object objRef = orb.resolve_initial_references (“NameService”); NamingContext ncRef = Naming ContextHelper.narrow(objRef); // 綁定命名中的對象引用 NameComponent nc = new NameComponent(“getMessage”, “”); NameComponent path[] = {nc}; ncRef.rebind(path, objRef); // 等待來自客戶機的調(diào)用 java.lang.Object sync=new java.lang .Object(); synchronized (sync) { sync.wait(); } } }
6.分別編譯服務(wù)器端和客戶端程序
a.編譯服務(wù)器端程序:
javac getMessage\server.java
b.編譯客戶端程序:
javac getMessage\client.java
7.運行
a.打開一個仿真終端窗口,啟動命名服務(wù),其中3388為通信端口號:
tnameserv -ORBInitialPort 3388
b.在另一個窗口中輸入以下命令,運行服務(wù)端程序:
java server -ORBInitialPort 3388
c.在另一個窗口中輸入以下命令,運行客戶端程序:
java client -ORBInitialPort 3388
“JavaIDL的分布式程序設(shè)計方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!