提到OOP的概念大家一定不会陌生,这次我们将来研究如何通过它实现客户程序连接到RMI服务器中并且了解一下为这些用户开发的类运行时间。
在远程对象上的方法被调用之前,RMI的客户必须包含一个引用,这个引用由在RMI服务器上注册的远程对象来执行。当引用和Java远程方法协议(JRMP)一起工作的时候,引用中包含了java.RMI.Naming类中的lookup方法。
Lookup方法接受远程对象使用URL格式的名字,这个远程对象包括一个主机名和顺着RMI://localhost/RMIServer的可选通道数。这个远程对象的分支类必须容易的使用当前的路径,一旦远程分支被建立,连接就被执行并且客户程序可以自由的调用远程对象上的方法,就好像这个方法位于客户自己的JVM上。
如果远程对象被建立,那么客户程序将调用远程对象上的getMessage方法。
当创建了一个RMI服务器,在任何正常的Java类中,你必须运行.java源文件。但是,紧接着你必须运行RMI编译器来创建客户端代理类和服务器端代理类。一个客户端代理,它作为stub而被大家所熟知,RMI调用服务器端代理,服务器端代理接着调用实际远程对象。在使用JRMP协议服务器端代理被认为是skeleton,在使用IIOP协议的时候,它被认为是tie。一个服务器端代理包括那些被分派调用真实远程对象实现的方法。
Figure A例图演示了它们之间的关系。
为了创建服务器代理文件,RMIc 编译器根据编译后的的 Java类(含有远程对象实现)名,为远程对象 stub 和 skeleton在 RMIc命令中所給的类必须是经 javac 命令成功编译且是完全包限定的类。RMIc命令使用了一个或者多个名字作为参数并产生了类似于RemoteObject_Skel.class和RemoteObject_Stub样式的类文件。在调用RMIc的时候使用-iiop选项将产生stubs和ties,他们将遵照下面的命名约定:
_Remote()Object_Tie.class
产生的stub类正确的执行了相同的一组远程接口,将它们作为远程对象的自身。这意味着一个拥护可以使用Java程序为转型和检查数据类型创建操作数。它同样意味着Java平台的远程对象支持真正的面向对象的多态性。
RMI客户程序不需要特别的工具或者步骤。尽管RMI服务器的stub 类可以在JVM的类路径中被定义,但是客户程序可以象任何普通的Java类一样执行。注意到任何远程对象的方法调用应该附属在try/catch块中。