远程方法调用(RMI)是java中最早的关于处理对象分布的机制,了解其工作原理为今后学习RMI-IIOP,XML-RPC以及SOAP等都有较大的帮助。
简单归纳如下:
1.RMI允许一个JVM实例中的所有对象调用另一个JVM实例中所有对象的方法;
这两个JVM可以运行在同一台机器的不同进程上,也可以运行在不同的机器上。
2.可以被远程访问的对象必须创建一个接口,并extends java.rmi.Remote接口;
接口中定义的所有方法必须抛出java.rmi.RemoteException。
3.可以被远程访问的对象除了要实现该接口外,还要extends java.rmi.server.UnicastRemoteObject;
4.使用rmic工具生成_Stub类和_Skel类;
在cmd窗口中,输入:rmic 编译好的实现类名
若出现Class Not Found错,则检查class路径设置是否正确。
这样,客户端实际是在对_Stub对象进行操作,而不是对实际的远程对象操作。服务器端则用_Skel对象和实际的远程对象进行通信。
5.编写服务器端应用程序;
需要用Naming.rebind()方法将注册名与对象绑定在一起。
6.编写客户端程序;
首先要用Naming.lookup()方法搜索注册名,之后cast成远程接口。
这里,如果是在不同的机器上分别开发客户端和服务器端的话,则需要将接口复制到两边。
最后,就是象调用本地方法一样,调用该远程接口的方法,实现分布计算的功能了。
7.要运行RMI的话,需要启动三个程序:
7.1.在第一个cmd中,启动rmiregistry,注意要在远程实现类所在的目录下运行;
7.2.在第二个cmd中,启动服务器端程序;
注意点:a).java参数(-Djava.security.policy)中要指定策略文件名(包含路径)
b).路径中若目录名里含有空格,须将整个路径用""包起来,否则会报Class Not Found错
c).如果机器上安装有防火墙软件,可能会导致connect超时,异常中断,须关闭防火墙
7.3.在第三个cmd中,启动客户端程序;
8.下面介绍如何在eclipse中运行一个简单的RMI程序:
8.1.先在eclipse里新建一个java项目,然后,创建RMI接口,实现类,服务器端程序,客户端程序;
8.2.打开cmd窗口,启动rmiregistry;
8.3.在eclipse里,右键点击服务器端程序,打开“运行...”配置窗口,切换到“Arguments”,在“VM arguments”里输入:-Djava.security.policy=xxxxxxx
8.4.点击“运行”,在控制台里可以看到服务器程序正确运行;
8.5.最后,右键点击客户端程序,运行;