關於Java的RMI程式設計的一個簡單的例子 (轉)

amyz發表於2007-08-16
關於Java的RMI程式設計的一個簡單的例子 (轉)[@more@]

現在雖然我們很少用到進行,但是做為一個最早的分散式解決方案,我們還是有了解的必要,從例子開始吧(雖然是幾年前的了)!

介面RmiHelloRemoteIntfc .java

import java.rmi.*;

public interface RmiHelloRemoteIntfc extends Remote
{
  String helloRemoteObj(String client) throws RemoteException;
}

遠端介面的實現類RmiHelloRemoteObj.java

import java.rmi.server.*;
import java.rmi.*;

public class RmiHelloRemoteObj extends UnicastRemote implements RmiHelloRemoteIntfc
{

  public RmiHelloRemoteObj() throws RemoteException
  {
  super();
  }

  public String helloRemoteObj(String client) throws RemoteException
  {
  return "Hello World"+client;
  }

}

類RmiHelloServer.java

import java.io.*;
import java.rmi.*;
import java.rmi.server.*;
import sun.applet.*;
import java.rmi.registry.LocateRegistry;

public class RmiHelloServer
{

  public RmiHelloServer()
  {
  }
  public static void main(String[] args)
  {
  //建立並管理器
  if(System.getSecurityManager()==null)
  {
  System.setSecurityManager(new RMISecurityManager());
  }

  try{
  //建立遠端
  RmiHelloRemoteObj ttt=new RmiHelloRemoteObj();
  //啟動登錄檔
  LocateRegistry.createRegistry(2222);
  //獎名稱繫結到物件
  Naming.rebind("//Fangm:2222/helloObj",ttt);

  System.out.println("RMI伺服器正在執行。。。。。。");
  }
  catch(Exception e)
  {
  e.printStackTrace();
  }


  }
}

伺服器端的RmiHelloServer.policy

grant codeBase
"file:/e://rmitest/"
{
 permission java.SocketPermission
  "*:1000-9999","accept,connect,listen,resolve";
};

 

現在就看看Client端是如何連線伺服器和進行遠端方法的的吧

import java.rmi.*;
import java.rmi.server.*;

public class RmiHelloClient
{

  public RmiHelloClient()
  {
  }
  public static void main(String[] args)
  {
  //建立並安裝安全管理器
  if(System.getSecurityManager()==null)
  {
  System.setSecurityManager(new RMISecurityManager());
  }

  try{
  RmiHelloRemoteIntfc c1=(RmiHelloRemoteIntfc)Naming.lookup("rmi://Fangm:2222/helloObj");
  System.out.println(c1.helloRemoteObj("Everyone"));
  }
  catch(Exception e)
  {
  e.printStackTrace();
  }
  System.exit(0);

 

  }
}

Client端的許可權檔案RmiHelloClient.policy

grant codeBase
"file:/e:/download/rmitest/"
{
  permission java.net.SocketPermission
  "*:1000-9999","accept,connect,listen,resolve";
};

好了,一個最簡單的RMI例子就安無了,對了還少了最重要的一步,那就是編譯和執行呢?我們就來了個Bat或Cmd的批處理來進行吧,

看看RmiHello.bat吧

javac RmiHelloRemoteIntfc.java

javac RmiHelloRemoteObj.java

rmic RmiHelloRemoteObj

javac RmiHelloServer.java

javac RmiHelloClient.java

echo 在另一個視窗啟動伺服器,請稍後。。。
start java  -Djava.security.policy=RmiHelloServer.policy RmiHelloServer

echo 執行客戶。。。
java -Djava.security.policy=RmiHelloClient.policy RmiHelloClient

這個檔案很簡單吧!包你一試就通,雖然簡單,不過對於初學者來說,還是很不錯的哦!


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962430/,如需轉載,請註明出處,否則將追究法律責任。

相關文章