5.對於RMI的理解

下面我將介紹一個完整的實例,讓初學者能快速體驗RMI的功用。
分爲以下四個步驟
1. 創建遠程接口及聲明遠程方法(HelloInterface.java)
2. 實現遠程接口及遠程方法(繼承UnicastRemoteObject)(Hello.java)
3. 啓動RMI註冊服務,並註冊遠程對象(HelloServer.java)
4. 客戶端查找遠程對象,並調用遠程方法(HelloClient)
5. 執行程序:啓動服務HelloServer;運行客戶端HelloClient進行調用

具體代碼及對應步驟如下:

1. 創建遠程接口及聲明遠程方法(HelloInterface.java)
package com.unmi;
import java.rmi.*;
/**
 * 遠程接口必須擴展接口java.rmi.Remote
 */
public interface HelloInterface extends Remote
{
   /**
    * 遠程接口方法必須拋出 java.rmi.RemoteException
    */
   public String say() throws RemoteException;
}

2. 實現遠程接口及遠程方法(繼承UnicastRemoteObject)(Hello.java)
package com.unmi;
import java.rmi.*;
import java.rmi.server.*;
/**
 * 擴展了UnicastRemoteObject類,並實現遠程接口 HelloInterface
 */
public class Hello extends UnicastRemoteObject implements HelloInterface
{
   private String message;
   /**
    * 必須定義構造方法,即使是默認構造方法,也必須把它明確地寫出來,因爲它必須拋出出RemoteException異常
    */
   public Hello(String msg) throws RemoteException
   {
      message = msg;
   }
   /**
    * 遠程接口方法的實現
    */
   public String say() throws RemoteException
   {
      System.out.println("Called by HelloClient");
      return message;
   }
}

3. 啓動RMI註冊服務,並註冊遠程對象(HelloServer.java)
package com.unmi;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class HelloServer
{
   /**
    * 啓動 RMI 註冊服務並進行對象註冊
    */
   public static void main(String[] argv)
   {
      try
      {
     /*啓動RMI註冊服務,指定端口爲1099 (1099爲默認端口)
         也可以通過命令 $java_home/bin/rmiregistry 1099啓動
         這裏用這種方式避免了再打開一個DOS窗口
     而且用命令rmiregistry啓動註冊服務還必須事先用RMIC生成一個stub類爲它所用*/
         LocateRegistry.createRegistry(1099);
     /*創建遠程對象的一個或多個實例,下面是hello對象
         可以用不同名字註冊不同的實例*/
         HelloInterface hello = new Hello("Hello, world!");
         //把hello註冊到RMI註冊服務器上,命名爲Hello
         Naming.rebind("Hello", hello);
         /*如果要把hello實例註冊到另一臺啓動了RMI註冊服務的機器上*/
         Naming.rebind("//192.168.1.105:1099/Hello",hello);
         System.out.println("Hello Server is ready.");
      }
      catch (Exception e)
      {
         System.out.println("Hello Server failed: " + e);
      }
   }
}

4. 客戶端查找遠程對象,並調用遠程方法(HelloClient)
package com.unmi;
import java.rmi.Naming;
public class HelloClient
{
   /**
    * 查找遠程對象並調用遠程方法
    */
   public static void main(String[] argv)
   {
      try
      {
         HelloInterface hello = (HelloInterface) Naming.lookup("Hello");
      /*如果要從另一臺啓動了RMI註冊服務的機器上查找hello實例
         HelloInterface hello = (HelloInterface)Naming.lookup("//192.168.1.105:1099/Hello");
     調用遠程方法*/
         System.out.println(hello.say());
      }
      catch (Exception e)
      {
         System.out.println("HelloClient exception: " + e);
      }
   }
}

5. 執行程序:啓動服務HelloServer;運行客戶端HelloClient進行調用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章