国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

RMI與CORBA在Java中的應用

2019-11-18 12:41:18
字體:
來源:轉載
供稿:網友

  本篇用實例來說明采用java進行RMI遠程方法調用及CORBA服務調用的實現方法,并分析它們的異同,從而為分布應用軟件的開發者提供參考和幫助。
  Internet/Intranet的飛速發展使得Web應用日益廣泛而復雜,Web早已不僅僅是超媒體信息的瀏覽工具,它正逐步發展成為分布異構環境中企業應用的通用前端和事務處理的展現窗口。在分布式環境異構中,各種機器所采用的操作系統、網絡通信協議和應用軟件千差萬別,要實現信息共享和軟件資源的整合十分困難,然而一個健壯的分布式計算框架能為可移植的分布式應用軟件開發帶來巨大的便利和好處。
  分布式對象技術主要是在分布式異構環境下建立應用系統框架和對象構件。在應用系統框架的支撐下,開發者可以將軟件功能封裝為更易治理和使用的對象,這些對象可以跨越不同的軟、硬件平臺進行互操作。目前,分布式互操作標準主要有Microsoft的COM/DCOM標準、Sun公司的Java RMI標準和OMG組織的CORBA標準。
  Java RMI調用實例
  Java RMI簡介
  遠程方法調用(RMI,Remote Method Invocation)是jdk1.1中引入的分布式對象軟件包,它的出現大大簡化了分布異構環境中Java應用之間的通信。
  
  要使用RMI,必須構建四個主要的類:遠程對象的本地接口、遠程對象實現、RMI客戶機和RMI服務器。RMI服務器生成遠程對象實現的一個實例,并用一個專有的URL注冊。RMI客戶機在遠程RMI服務器上查找服務對象,并將它轉換成本地接口類型,然后像對待一個本地對象一樣使用它。
  
  下面是一個簡單的RMI實例,RMI客戶機通過RMI服務器提供的方法實現對兩個雙精度浮點數的加減運算。例子雖然很簡單,但把握了Java RMI調用的基本原理和方法,在實現復雜應用時,我們需要做的也只是完善遠程對象的實現類而已。
  
  RMI實例分析
  
  1.遠程對象的本地接口聲明(RMIOperate.java)
  
  該類僅僅是一個接口聲明,RMI客戶機可以直接使用它,RMI服務器必須通過一個遠程對象來實現它,并用某個專有的URL注冊它的一個實例。
  
  具體代碼如下:
  
  package wf.rmi; //包名
  import java.rmi.*; //導入類包
  /*RMI本地接口必須從Remote接口派生*/
   public interface RMIOperate extends Remote
  {
   /*接口中的具體方法聲明,注重必須聲明拋出RemoteException*/
   public double add(double x, double y) throws RemoteException;
  //輸入兩個浮點數,返回其和
   public double minus(double x, double y) throws RemoteException;
  //輸入兩個浮點數,返回其差
  }
  2.遠程對象實現類(OperateImpl.java)
  這個類應實現RMI客戶機調用的遠程服務對象的本地接口,它必須從UnicastRemoteObject繼續,構造函數應拋出RemoteException異常。
  具體代碼如下:
  
  package wf.rmi; //包名
  //導入需要的類包
  import java.rmi.*;
  import wf.rmi.RMIOperate;
  import java.rmi.server.UnicastRemoteObject;
  public class OperateImpl extends UnicastRemoteObject implements RMIOperate
  {
   /*構造函數*/
   public OperateImpl() throws RemoteException
   {
   }
   /*實現本地接口中聲明的add方法*/
   public double add(double x, double y) throws RemoteException
   {
   double z = x + y;
   return z;
   }
   /*實現本地接口中聲明的minus方法*/
   public double minus(double x, double y) throws RemoteException
   {
   double z = x - y;
   return z;
   }
  }
  3.RMI服務器類(RMIServer.java)
  該類創建遠程對象實現類OperateImpl的一個實例,然后通過一個專有的URL來注冊它。所謂注冊就是通過Java.rmi.Naming.bind()方法或Java.rmi.Naming.rebind()方法,將OperateImpl實例綁定到指定的URL上。
  
  具體實現代碼如下:
  
  package wf.rmi; //包名
  //導入需要的類包
  import java.rmi.Naming;
  import wf.rmi.OperateImpl;
  public class RMIServer
  {
   public static void main(String[] args)
   {
   try
   {
  //創建遠程對象的實現實例
  OperateImpl operObj = new OperateImpl();
  //提示信息
  System.out.PRintln("RMI Server Starting...");
  //將實例注冊到專有的URL
  Naming.rebind("rmi:///RMIOperate", operObj);
  //等待RMI客戶機調用的提示信息
  System.out.println("Waiting RMI Client Invoke...");
   }
   catch(Exception e)
   {
  e.printStackTrace();
   }
   }
  }
  4.RMI客戶機類(RMIClient.java)
  
  RMI客戶使用java.rmi.Naming.lookup()方法,在指定的遠程主機上查找RMI服務對象,若找到就把它轉換成本地接口RMIOperate類型。它與CORBA不同之處在于RMI客戶機必須知道提供RMI服務主機的URL,這個URL可以通過rmi://host/path或rmi://host:port/path來指定,假如省略端口號,就默認使用1099。Java.rmi.Naming.lookup()方法可能產生三個異常:Java.rmi.RemoteException、Java.rmi.NotBoundException、java.net. MalformedURLException,三個異常都需要捕捉。
  
  下面是具體代碼:
  
  package wf.rmi; //包名
  //導入需要的類包
  import java.rmi.*;
  import java.net.*;
  import java.io.*;
  public class RMIClient
  {
  public static void main(String[] args)
  {
    try
    {
      BufferedReader readIn = new BufferedReader(new
  InputStreamReader(System.in));
      String host = "localhost"; //默認為本地主機
   //帶輸入參數時,將host設置為指定主機
      if (args.length > 0)
        host = args[0];
      //根據指定的URL定位遠程實現對象
  RMIOperate rmiObj = (RMIOperate)Naming.lookup("rmi://" + host +
  "/RMIOperate");      //提示輸入運算參數1
  System.out.println("Please Input Data1: ");
      String str1 = readIn.readLine(); //讀取輸入參數1
      double x = 0;
      try
      {
   x = Double.parseDouble(str1); //分析輸入參數1,轉換為double類型
      }
     catch(NumberFormatException nfe)
      {
        x = 0; //假如轉換異常,則重置x為0
      }
   //提示輸入運算參數2
      System.out.println("Please Input Data2: ");
      String str2 = readIn.readLine();//讀取輸入參數2
      double y = 0;
      try
      {
        y = Double.parseDouble(str2); //分析輸入參數2,轉換為double類型
      }
      catch(NumberFormatException nfe)
      {
        y = 0; //假如轉換異常,則重置y為0
      }
   //調用遠程對象的本地接口方法,實現輸入參數的加、減運算,并輸出結果
     System.out.println("Data1 Add Data2 Result is: " + rmiObj.add(x, y));
     System.out.println("Data1 minus Data2 Result is: " +
    rmiObj.minus(x, y));
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
  }
  RMI Server/Client的編譯與運行
  
  (1).編譯所有的源代碼(如圖1)
   RMI與CORBA在Java中的應用(圖一)
  圖1
  (2).生成客戶端存根和服務器框架(如圖2)
   RMI與CORBA在Java中的應用(圖二)
  圖2
  這將構造OperateImpl_Stub.class和OperateImpl_Skel.class。這時可將所有的Class文件打包成jar,并將其分別置于RMI客戶機和RMI服務器的ClassPath中(如圖3):
   RMI與CORBA在Java中的應用(圖三)
  圖3
  當然,也可以只將RMIOperate.class、RMIClient.class和OperateImpl_Stub.class復制到RMI客戶機,將RMIOperate.class、OperateImpl.class 、RMIServer.class和OperateImpl_Skel.class復制到RMI服務器。
  (3).啟動RMI注冊(如圖4)
   RMI與CORBA在Java中的應用(圖四)
  圖4
  (4).運行和調用
  ● 在服務器上執行RMIServer(如圖5)
   RMI與CORBA在Java中的應用(圖五)
  圖5
  ● 在本地客戶機上運行RMIClient(如圖6)
   RMI與CORBA在Java中的應用(圖六)
  圖6
  ● 在遠程客戶機上運行RMIClient(須指明RMI服務器主機名或ip地址,如圖7)
   RMI與CORBA在Java中的應用(圖七)
  圖7
  至

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 工布江达县| 广南县| 四会市| 清徐县| 奉节县| 华宁县| 景东| 雅安市| 军事| 霍山县| 济阳县| 阳山县| 马关县| 长沙县| 吉安县| 潜山县| 东乌珠穆沁旗| 偃师市| 灵璧县| 石棉县| 尉犁县| 宜黄县| 罗平县| 齐齐哈尔市| 霍州市| 安庆市| 酒泉市| 萨迦县| 清水县| 岚皋县| 安平县| 黄大仙区| 连云港市| 房山区| 阳信县| 北宁市| 定安县| 宣化县| 肥东县| 安吉县| 钟山县|