1. 程式人生 > >5.對於RMI的理解

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進行呼叫