一亿个衣的日常吧 关注:6贴子:280
  • 4回复贴,共1

RMI 远程方法调用

只看楼主收藏回复

一个正常工作的RMI系统由下面几个部分组成:
·远程服务的接口定义
·远程服务接口的具体实现
·桩(Stub)和框架(Skeleton)文件
·一个运行远程服务的服务器
·一个RMI命名服务,它允许客户端去发现这个远程服务
·类文件的提供者(一个HTTP或者FTP服务器)
·一个需要这个远程服务的客户端程序


IP属地:河南1楼2015-12-03 17:52回复
    以下用一个最简单的Hello的示例来介绍RMI的应用。
    1:定义一个远程接口
    IHello.java代码如下:
    import java.rmi.Remote;
    public interface IHello extends Remote {
    public String sayHello(String name) throws java.rmi.RemoteException;
    }


    IP属地:河南2楼2015-12-03 18:05
    回复
      2026-03-05 19:08:07
      广告
      不感兴趣
      开通SVIP免广告
      2:实现远程的接口(服务端就在此远程接口的实现类中)
      HelloImpl.java代码如下:
      import java.rmi.RemoteException;
      import java.rmi.server.UnicastRemoteObject;
      public class HelloImpl extends UnicastRemoteObject implements IHello {
      // 这个实现必须有一个显式的构造函数,并且要抛出一个RemoteException异常
      protected HelloImpl() throws RemoteException {
      super();
      }
      /**
      * 说明清楚此属性的业务含义
      */
      private static final long serialVersionUID = 4077329331699640331L;
      public String sayHello(String name) throws RemoteException {
      return "Hello " + name + " ^_^ ";
      }
      public static void main(String[] args) {
      try {
      IHello hello = new HelloImpl();
      java.rmi.Naming.rebind("rmi://localhost:1099/hello", hello);
      System.out.print("Ready");
      } catch (Exception e) {
      e.printStackTrace();
      }
      }
      }


      IP属地:河南3楼2015-12-03 18:05
      回复
        3:新建RMI客户端调用程序
        Hello_RMI_Client.java代码如下:
        import java.rmi.Naming;
        public class Hello_RMI_Client {
        public static void main(String[] args) {
        try {
        IHello hello = (IHello) Naming.lookup("rmi://localhost:1099/hello");
        System.out.println(hello.sayHello("zhangxianxin"));
        } catch (Exception e) {
        e.printStackTrace();
        }
        }
        }


        IP属地:河南4楼2015-12-03 18:05
        回复
          4:编译并运行
          4.1 用javac命令编译IHello.java、HelloImpl.java、Hello_RMI_Client.java
          >javac *.java
          4.2 用rmic命令生成桩和框架文件
          >rmic HelloImpl
          成功执行完上面的命令可以发现生成一个HelloImpl_stub.class文件,如果JDK是使用Java2SDK,那么还可以发现多出一个HelloImpl_Skel.class文件。如果服务端程序与客户端程序在同一台机器上并在同一目录中,则可以省略掉接口实现类生成的桩和框架文件,但这就失去了使用RMI的意义,而如果要在不同的JVM上运行时,客户端程序就必须得依靠服务端运程方法实现的桩和框架文件以及接口类。
          4.3 运行注册程序RMIRegistry,必须在包含刚写的类的目录下运行这个注册程序。
          >rmiregistry
          注册程序开始运行了,不要管他,现在切换到另外一个控制台运行服务器
          4.4 运行服务器HelloImpl
          >java HelloImpl
          当启动成功出现Ready...... 这个服务器就开始工作了,把接口的实现加载到内存等待客户端的联接。现在切换到第三个控制台,启动我们的客户端。
          4.5 启动客户端:为了在其他的机器运行客户端程序你需要一个远程接口(IHello.class) 和一个stub(HelloImpl_Stub.class)。 使用如下命令运行客户端
          >java Hello_RMI_Client
          当运行成功会在控制台打印:Hello zhangxianxin ^_^


          IP属地:河南5楼2015-12-03 18:06
          回复