RMI小例

4162 ワード

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を実行する呼び出し(1)Dosウィンドウ実行コマンドjavacomを開く.unmi.HelloServer起動サービスHelloServer E:workspaceTestRMIbin>javacom.unmi.HelloServer Hello Server is ready. 実行に成功すると、Hello Server is ready(2)が別のDosウィンドウを開く実行コマンドjavacomが表示されます.unmi.HelloClientはクライアントプログラムE:workspaceTestRMIbin>javacomを実行する.unmi.HelloClient Hello, world! 呼び出しに成功するとHello,worldが見えます!そして、サービスを開始するウィンドウにHello Server is readyが表示されます.Called by HelloClientを印刷