远程方法调用(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

java 超时订单自动关闭_java rmi 超时

8.4.点击“运行”,在控制台里可以看到服务器程序正确运行;

8.5.最后,右键点击客户端程序,运行;