JavaIDL

JavaIDL是Java 2開發平台中的CORBA功能擴展。在Java 2中引入JavaIDL,使得利用OMG IDL能夠定義服務對象的基本功能,並且將IDL根據CORBA規範的要求,映射到Java語言,並以此開發出標準的具有互操作性和可連線性的分散式套用

基本介紹

  • 中文名:JavaIDL
  • 介紹:JavaIDL使分散式、支持Web的
  • 過程 :進行系統分析,確定服務對象
  • 過程2:根據系統分析結果,
簡介,建立過程,

簡介

JavaIDL介紹
JavaIDL使分散式、支持Web的Java套用可以基於IIOP協定透明地調用遠程服務
JavaIDL運行期(Runtime)組件包括一個全兼容的對象請求代理——Java ORB,用於基於IIOP協定實現分散式對象之間的通信。該ORB支持瞬態CORBA對象和瞬態名字伺服器,並且ORB生存期受運行ORB進程生存期的限制。
程式設計中,首先對要實現的服務對象功能進行系統分析,並創建IDL接口描述檔案對功能進行描述。然後利用JavaIDL提供的IDL到Java語言的映射工具將IDL檔案映射為客戶端樁(Stub)檔案和伺服器骨架(Skeleton)檔案。
在實現的客戶端應用程式中,包括對遠程對象的引用、服務功能請求的傳送以及服務對象返回結果的解析處理等功能。通常,客戶端應用程式利用命名服務實現對遠程對象的綁定,並通過客戶端ORB將客戶端與服務對象聯繫起來,實現方法的遠程調用。
在伺服器端,ORB利用服務對象骨架將調用請求和參數的數據格式進行轉換,把遠程調用轉換為對本地對象中方法的調用。當方法返回時,骨架對計算結果進行轉換和封裝,通過ORB把結果返回給客戶機。

建立過程

建立CORBA應用程式的過程
分散式應用程式設計的主要問題是確定建立在對象級上的客戶與服務對象的關係,從其最根本的功能來講,服務對象提供遠程接口,客戶對象調用遠程接口,客戶對象不需要了解遠程CORBA對象的位置以及實現細節,也不需要了解哪個ORB 用於對象之間的互動。
按照實現的基本過程,CORBA對象服務的實現方式分為兩種: 對象的命名引用方式和字元串化對象引用方式。CORBA創建分散式應用程式的過程大體如下:
● 進行系統分析,確定服務對象需要實現的功能;
● 根據系統分析結果,編寫IDL接口說明檔案;
● 編譯接口說明檔案,產生服務對象的骨架與客戶對象的樁(可選);
● 基於客戶對象的樁,編寫客戶對象程式;
● 基於服務對象的骨架或者動態請求實現,編寫服務對象程式;
● 分別編譯客戶對象和服務對象程式;
● 啟動服務對象程式;
● 啟動客戶對象程式。
分散式應用程式示例
以下用一個例程說明建立分散式應用程式的過程:
1. 對象功能描述和系統簡要設計
在服務對象端將一個字元串對象賦值,客戶端通過調用服務對象方法獲取該字元串的值。根據對象功能的說明,用UML描述出服務對象需要實現的功能:
getIt() : String[]
2. 服務對象接口定義
根據系統分析結果,用IDL編寫出服務對象方法描述程式getMessage.idl:
module getMessage
{ interface getIt
{ string returnObject();
};
};
3. 編譯getMessage.idl
idltojava -fno-cpp getMessage.idl。
4. 編寫客戶端程式
//引入相關類庫
import org.omg.CosNaming.*;
import org.omg.CORBA.*;
//客戶端對象方法
public class client
{ public static void main(String args[])
{ // 創建和初始化ORB
ORB orb = ORB.init(args, null);
// 獲取根命名服務上下文對象
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));
// 調用服務對象方法
String result=method.returnObject();
}
}
5. 編寫服務對象程式
// 引入相關類庫
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContext
Package.*;
import org.omg.CORBA.*;
//服務方法
class returnMethod extends _getMessage-
ImplBase
{ public String getIt()
{ String result =“How about it”;
return result;
}
}
//伺服器端方法
public class server
{ public static void main(String args[])
{ // 創建和初始化ORB
ORB orb = ORB.init(args, null);
// 創建服務對象並將其向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);
// 等待來自客戶機的調用
java.lang.Object sync=new java.lang
.Object();
synchronized (sync)
{ sync.wait();
}
}
}
6. 分別編譯伺服器端和客戶端程式
(1)編譯伺服器端程式:
javac getMessage\server.java
(2)編譯客戶端程式:
javac getMessage\client.java
7. 運行
(1)打開一個仿真終端視窗,啟動命名服務,其中3388為通信連線埠號
tnameserv -ORBInitialPort 3388
(2)在另一個視窗中輸入以下命令,運行服務端程式:
java server -ORBInitialPort 3388
(3)在另一個視窗中輸入以下命令,運行客戶端程式:
java client -ORBInitialPort 3388

相關詞條

熱門詞條

聯絡我們