偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

基于JavaIDL的分布式程序設(shè)計

開發(fā) 后端 分布式
Java2中引入Java IDL,將IDL根據(jù)CORBA規(guī)范的要求,映射到Java語言并以此開發(fā)出標(biāo)準(zhǔn)的具有互操作性和可連接性的分布式應(yīng)用。本文將介紹基于Java IDL的分布式程序設(shè)計。

JavaIDL介紹

JavaIDL是Java 2開發(fā)平臺中的CORBA功能擴展。在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

【編輯推薦】

  1. 2008十大優(yōu)秀Java應(yīng)用程序
  2. Java開發(fā)中的23種設(shè)計模式
  3. 理解Java平臺上的CRM系統(tǒng)
責(zé)任編輯:楊鵬飛 來源: 計世網(wǎng)
相關(guān)推薦

2010-01-15 10:15:34

分布式交換技術(shù)

2017-10-24 11:28:23

Zookeeper分布式鎖架構(gòu)

2015-04-21 09:39:03

javajava分布式爬蟲

2023-10-08 10:49:16

搜索系統(tǒng)分布式系統(tǒng)

2017-04-13 10:51:09

Consul分布式

2022-03-08 15:24:23

BitMapRedis數(shù)據(jù)

2018-10-29 12:51:35

分布式存儲元數(shù)據(jù)

2019-06-19 15:40:06

分布式鎖RedisJava

2021-07-05 09:28:11

Flink分布式程序

2022-04-07 17:13:09

緩存算法服務(wù)端

2019-09-05 09:02:45

消息系統(tǒng)緩存高可用

2024-01-31 22:08:18

分布式重試框架

2021-04-15 22:02:53

區(qū)塊鏈金融比特幣

2025-05-16 08:58:47

Mongodb分布式存儲

2018-05-19 00:26:13

UAI Train分布式訓(xùn)練

2012-11-06 13:58:26

分布式云計算分布式協(xié)同

2013-05-13 10:30:26

分布式架構(gòu)架構(gòu)設(shè)計網(wǎng)站架構(gòu)

2022-10-27 10:44:14

分布式Zookeeper

2022-03-24 09:44:54

TypeScriptSOLID

2020-07-15 09:20:48

MyCatMySQL分布式
點贊
收藏

51CTO技術(shù)棧公眾號