六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

基于Java IDL的分布式程序設(shè)計(jì)

[摘要]本文轉(zhuǎn)載自軟件工程專家網(wǎng)www.21cmm.comJava IDL介紹   JavaIDL是Java 2開發(fā)平臺中的CORBA功能擴(kuò)展。在Java 2中引入JavaIDL,使得利用OMG IDL能夠定義服務(wù)對象的基本功能,并且將IDL根據(jù)CORBA規(guī)范的要求,映射到Java語言,并以此開發(fā)出標(biāo)準(zhǔn)的...
本文轉(zhuǎn)載自軟件工程專家網(wǎng)www.21cmm.com

Java IDL介紹

  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運(yùn)行期(Runtime)組件包括一個全兼容的對象請求代理——Java ORB,用于基于IIOP協(xié)議實(shí)現(xiàn)分布式對象之間的通信。該ORB支持瞬態(tài)CORBA對象和瞬態(tài)名字服務(wù)器,并且ORB生存期受運(yùn)行ORB進(jìn)程生存期的限制。

  在程序設(shè)計(jì)中,首先對要實(shí)現(xiàn)的服務(wù)對象功能進(jìn)行系統(tǒng)分析,并創(chuàng)建IDL接口描述文件對功能進(jìn)行描述。然后利用JavaIDL提供的IDL到Java語言的映射工具將IDL文件映射為客戶端樁(Stub)文件和服務(wù)器骨架(Skeleton)文件。

  在實(shí)現(xiàn)的客戶端應(yīng)用程序中,包括對遠(yuǎn)程對象的引用、服務(wù)功能請求的發(fā)送以及服務(wù)對象返回結(jié)果的解析處理等功能。通常,客戶端應(yīng)用程序利用命名服務(wù)實(shí)現(xiàn)對遠(yuǎn)程對象的綁定,并通過客戶端ORB將客戶端與服務(wù)對象聯(lián)系起來,實(shí)現(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)方法返回時,骨架對計(jì)算結(jié)果進(jìn)行轉(zhuǎn)換和封裝,通過ORB把結(jié)果返回給客戶機(jī)。

建立CORBA應(yīng)用程序的過程

  分布式應(yīng)用程序設(shè)計(jì)的主要問題是確定建立在對象級上的客戶與服務(wù)對象的關(guān)系,從其最根本的功能來講,服務(wù)對象提供遠(yuǎn)程接口,客戶對象調(diào)用遠(yuǎn)程接口,客戶對象不需要了解遠(yuǎn)程CORBA對象的位置以及實(shí)現(xiàn)細(xì)節(jié),也不需要了解哪個ORB 用于對象之間的交互。

  按照實(shí)現(xiàn)的基本過程,CORBA對象服務(wù)的實(shí)現(xiàn)方式分為兩種: 對象的命名引用方式和字符串化對象引用方式。CORBA創(chuàng)建分布式應(yīng)用程序的過程大體如下:

  ● 進(jìn)行系統(tǒng)分析,確定服務(wù)對象需要實(shí)現(xiàn)的功能;

  ● 根據(jù)系統(tǒng)分析結(jié)果,編寫IDL接口說明文件;

  ● 編譯接口說明文件,產(chǎn)生服務(wù)對象的骨架與客戶對象的樁(可選);

  ● 基于客戶對象的樁,編寫客戶對象程序;

  ● 基于服務(wù)對象的骨架或者動態(tài)請求實(shí)現(xiàn),編寫服務(wù)對象程序;

  ● 分別編譯客戶對象和服務(wù)對象程序;

  ● 啟動服務(wù)對象程序;

  ● 啟動客戶對象程序。

分布式應(yīng)用程序示例

 以下用一個例程說明建立分布式應(yīng)用程序的過程:

1. 對象功能描述和系統(tǒng)簡要設(shè)計(jì)

  在服務(wù)對象端將一個字符串對象賦值,客戶端通過調(diào)用服務(wù)對象方法獲取該字符串的值。根據(jù)對象功能的說明,用UML描述出服務(wù)對象需要實(shí)現(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);

  // 等待來自客戶機(jī)的調(diào)用

  java.lang.Object sync=new java.lang

  .Object();

  synchronized (sync)

  { sync.wait();

    }

    }

  }

6. 分別編譯服務(wù)器端和客戶端程序

  (1)編譯服務(wù)器端程序:

  javac getMessage\server.java

  (2)編譯客戶端程序:

  javac getMessage\client.java

7. 運(yùn)行

  (1)打開一個仿真終端窗口,啟動命名服務(wù),其中3388為通信端口號:

     tnameserv -ORBInitialPort 3388

  (2)在另一個窗口中輸入以下命令,運(yùn)行服務(wù)端程序:

     java server -ORBInitialPort 3388

  (3)在另一個窗口中輸入以下命令,運(yùn)行客戶端程序:

     java client -ORBInitialPort 3388


主站蜘蛛池模板: 亚洲国产高清视频在线观看 | 日本在线看 | 欧美亚洲人成网站在线观看刚交 | 日韩啪啪网站 | 青青青在线免费观看 | 日韩中文字幕视频在线 | 中文区永久区乱码六区 | 天堂资源网 | 视频一区在线 | 亚洲一级片免费 | 亚洲免费二区 | 日韩图色| 日本五级床片在线观看 | 中文字幕亚洲一区二区v@在线 | 日本免费一区二区三区看片 | 日日夜夜婷婷 | 亚洲国产青草 | 色射色| 日韩在线小视频 | 三级视频在线观看 | 日韩成人高清 | 小xav导航福利网址 香蕉中文在线 | 永久视频免费 | 亚洲免费在线 | 色吊丝最新永久免费观看网站 | 婷婷视频网站 | 日日日天天射天天干视频 | 在线观看 一区二区 麻豆 | 天堂免费 | 日韩精品一区二区三区中文在线 | 亚洲成a人v天堂网 | 日韩国产三级 | 欧美性猛交乱大交xxxx | 亚洲高清视频在线观看 | 色吊丝国产永久免费网址 | 亚洲a人| 星辰影院免费 | 五月婷婷伊人 | 青青草华人在线 | 一区二区三区视频在线播放 | 青娱乐最新网站 |