使用Java的RMI框架建立分布式服务

ZDNet软件频道 时间:2003-11-06 作者:ZDNnet China |  我要评论()
本文关键词:javatips
Java的远程方法调用(RMI)框架可以为你建立虚拟的透明的分布式服务和程序。基于RMI的程序包含能够使不同位置的程序进行相互调用的方法。这一特性使得Java对象能够调用其他虚拟机器上的Java对象,同样的,其他虚拟机器上的Java对象也可以以相同方式调用这一台机器上的Java对象
本文译自Builder.com,未经许可请勿转载

Java的远程方法调用(RMI)框架可以为你建立虚拟的透明的分布式服务和程序。基于RMI的程序包含能够使不同位置的程序进行相互调用的方法。这一特性使得Java对象能够调用其他虚拟机器上的Java对象,同样的,其他虚拟机器上的Java对象也可以以相同方式调用这一台机器上的Java对象。

界面

每一个远程对象都必须具有输出端口,这样它才能接收输入的远程方法请求。远程对象可以通过调用以下的方法人工地设置输出端口:

java.rmi.server.UnicastRemoteObject.exportObjec方法或者

java.rmi.activation.Activatable.exportObject方法。

当远程对象使用java.rmi.server.UnicastRemoteObject

或者java.rmi.activation.Activatable时,它们也自动地设置了输出口。

传递java.rmi.RemoteException的构造函数不能够被忽略,因为输出过程可能会失败。表A列举了我们使用的TimeKeeper远程对象界面的一个合法的执行操作。

 

RMI注册表

RMI定义了作为RMI注册表的一个远程对象库。一个RMI注册表其实是一个简单的名称服务器,它保持对远程对象的引用,并使它们与RMI服务器连接。

在一个基于UNIX的操作系统,使用以下的命令行来启动RMI注册表:

rmiregistry &

在Windows操作系统,RMI注册表必须运行在端口1099。当启动注册表时,你可以通过指定端口数目来设置一个不同的端口。例如,以下的代码行将启动Windows系统中3000端口的注册表:

start rmiregistry 3000

RMI服务器

为了能够保证远程对象得到连接与使用,远程对象客户必须连接到包含对象引用的RMI服务器。一个RMI服务器是一个简单的Java类,它能够执行一个主程序,输出每一个远程对象,连接对象实例到RMI注册表的名称。

无论在任何时候通过JVM下载代码,一定要考虑到安全问题,以此避免系统出现对象执行不安全的操作。所以,RMI服务器的主程序一定建立和安装一个安全管理系统,如以下范例所示:

   if (System.getSecurityManager() == null)
    {
      System.setSecurityManager(new RMISecurityManager());
    }


RMI服务器建立远程对象的例子,然后将它们连接到一个可以被远程客户识别和调用的名称,如下代码所示:

TimeKeeperImplobj = new TimeKeeperImpl();  // instantiate the object
Naming.rebind("//myhost/TimeKeeper", obj);  // bind the object to a name

当远程对象被示例化时,它即被设置输出端口并可以接收请求的调用。

一旦一个远程对象被示例化,以及被一个名称连接,远程调用者可以通过名称而识别能者对象,获得远程对象引用,并且能够调用对象中的方法。

Listing B中范例演示了一个简单的RMI服务器,这一服务器安装一个安全管理器,然后建立和连接一个远程对象。

 

启动服务器

启动一个RMI服务器只需要运行服务器,这与运行一个普通的Java程序一样。然而,几个名称/值的属性必须在命令行中得到定义:

  • java.rmi.server.codebase属性被定义,这样类就可以被动态地下载到注册表,然而传递到客户端。

  • java.security.policy属性被定义,这样服务器就可以识别哪些安全措施需要执行。

     

    Listing C中的命令行范例演示了如何启动SimpleRMIServer,设置java.rmi.server.codebase属性到http://myhost/~jeff/remoteobjects及java.security.policy属性到OME/jeff/policies/policy。

    SimpleRMIServer被启动之后,你可以看到以下的输出:

    TimeKeeper is bound in the registry

    总结

    在这一篇文章中,我们探索了RMI如何被用于建立远程连接,能够为开发人员集中精力于通讯体系之外的有关难点。Java的远程方法调用框架能够让你建立虚拟的透明的分布式服务和程序。基于RMI的程序可以使得Java对象相互得到调用。



    责任编辑:李宁

    欢迎评论投稿

  • 百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
    中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
    京公网安备:1101082134