从零开始RMI编程开发:HelloWorld


本章使用经典的HelloWorld程序来作为RMI开发的第一篇,对于理论知识,笔者在这里也不做过多的阐述,主要目的通过HelloWorld这个经典的程序来说明在windows下的RMI开发的一些基本步骤.笔者也是刚接触RMI,有什么差强人意的地方请各位大虾们口下留情。

RMI技术 1.0:HelloWorld(jdk1.5以前版本)

    — 创建远程接口:Hello    

  1. package org.tony.rmi.demo ;   
  2. import java.rmi.Remote;   
  3. import java.rmi.RemoteException;   
  4. public interface Hello extends Remote   
  5. {   
  6. String sayHello() throws RemoteException ;   
  7. }   


    —  创建服务器类:HelloImpl    

  1. package org.tony.rmi.demo;   
  2. import java.rmi.Naming ;   
  3. import java.rmi.RemoteException;   
  4. import java.rmi.RMISecurityManager ;   
  5. import java.rmi.server.RemoteServer ;   
  6. import java.rmi.server.UnicastRemoteObject ;   
  7. import org.tony.rmi.demo.Hello ;   
  8. public class HelloImpl implements Hello{   
  9.     public HelloImpl() throws RemoteException{   
  10.       UnicastRemoteObject.exportObject(this,1234) ;   
  11.     }   
  12.     public String sayHello(){   
  13.        return "Hello ,Rmi world!" ;   
  14.     }   
  15.     public static void main(String[] args) {   
  16.     System.setProperty("java.security.policy","HelloWorld.policy");    if(System.getSecurityManager() == null) {   
  17.            System.setSecurityManager(new RMISecurityManager());   
  18.        }   
  19.        try  
  20.        {   
  21.         Hello hello = new HelloImpl() ;   
  22.         Naming.rebind("HelloWorld",hello);   
  23.         System.out.println("注册成功...") ;   
  24.        }   
  25.        catch (Exception e){   
  26.            e.printStackTrace();   
  27.        }   
  28.       }   
  29. }   


    — 创建客户端类:HelloClient    

  1. package org.tony.rmi.demo ;   
  2. import java.rmi.Naming ;   
  3. import java.rmi.RMISecurityManager ;   
  4. public class HelloClient {   
  5.     private static final String HOST_NAME = "localhost" ;   
  6.     public static void main(String[] args) {   
  7.       System.setProperty("java.security.policy","HelloWorld.policy");   
  8.       if(System.getSecurityManager() == null) {   
  9.         System.setSecurityManager(new RMISecurityManager()) ;   
  10.       }   
  11.       try {   
  12.         Hello hello = (Hello)Naming.lookup("//" + HOST_NAME + "/HelloWorld");   
  13.         String result = hello.sayHello() ;   
  14.         System.out.println(result);   
  15.       } catch (Exception e) {   
  16.           e.printStackTrace();   
  17.       }   
  18.      }   
  19. }   

     —创建安全策略文件:HelloWorld.policy

    

  1. grant{   
  2.   permission java.net.SocketPermission "*:1024-65535""accept, connect, listen, resolve";   
  3. };   

到此为止,此HelloWorld项目所需的文件全部编写完成。接下来就是谈怎样运行这个HelloWorld程序了,当然在JDK1.5以后的RMI编程中,要想启动RMI注册表程序是件很容易的事情,但是在以前的版本还是有点麻烦,本例中未使用IDE开发,所有操作均基于命令提示符下完成的。假定所有文件Hello.javaHelloImpl.javaHelloClient.javaD:\Data 目录下:(classpath=D:\Data

1.编译所有源程序: javac  -d . *.java,生成相应的二进制码文件

2. 要想让客户能够远程访问远程接口中的方法,那么我们应该创建一个代理对象供远程客户使用,也就是存根,我们的stub文 件。调用命令 rmic: rmic org.tony.rmi.demo.HelloImpl 当然这样做生成的存根源代码是被删除了的,如果你   想保存源代码,那么你可以使用-keepgrneratedflag rmic保存源代码

3. 启动RMI注册表程序,新开一个命令提示符窗口,切换到安全策越文件所在目录下本例中的D:\Data:

  键入命令:rmiregistry –J-Djava.security.policy=HelloWorld.policy 敲击回车后你不会看到任何的结果显示,除了命令提 示符窗口变成了以rmiregistry –J-Djava.security.policy=HelloWorld.policy结尾外。

4. 启动构建和注册HelloImpl对象的服务器程序HelloImpl。新开一个命令提示符窗口

  切换到工作目录下,键入以下命令启动服务器程序:java –Djava.rmi.server.codebase=file:/D:\Data\   org.tony.rmi.demo.HelloImpl , 如果操作中未出现其他的错误,那么你会看到在控制台打印了一行字符:”注册成   功,证明服务器启动成功。那么接下来就是通过客户端去调用了

5. 当前面的步骤我们都顺利的完成以后,那么我们就要启动客户端访问远程对象了。

  新开一个命令提示符窗口并切换到工作目录下:执行HelloClient程序,你会看到控制台打印了一行字符:HelloRMI world。证明我们的第一个HelloWorld程序成功完成了

相关内容