今天看了孙卫琴<Java网络编程精解>中的RMI部分,对RMI框架有了更进一步的了解:

上一篇里Java RMI中,看的参考资料及JDK都比较老,而在JDK5.0以上的版本中,不需要用rmic命令来为远程对象生成静态的存根类,RMI框架会在运行时自动为远程对象生成动态代理类。

创建的远程接口必须符合以下条件:直接或间接继承java.rmi.Remote接口,并且接口中的所有方法声明都要抛出java.rmi.RemoteException;


创建的远程类必须符合以下条件:

a. 远程类的构造方法必须声明抛出RemoteException

b.所有的远程方法必须声明抛出RemoteException

c.在远程类中可以定义一些本地方法,即不在远程接口中,这些本地方法无须抛出RemoteException,它们只能本地调用,但不允许被远程调用。

d.UnicastRemoteObject类覆盖了Object类的equals(),hashcode(),clone()等方法。如果一个远程类继承了其它类,无法继承UnicastRemoteObject,则可以通过在构造函数里调用UnicastRemoteObject.exportObject(this,0)方法,将自身导出为远程对象。


在远程方法中,只有基本类型的数据,远程对象及可序列化的对象才可以作为参数或者返回值进行传递。如果参数或返回值是一个远程对象,那么接收方得到的是远程对象的存根对象,若是可序列化对象,接收方得到的可序列化对象的复制品;若是基本类型的数据,接收方得到的发送方的数据的复制品的对象。

另外还在安全管理器中主要包括两个步骤:

a.创建一个安全策略文件。

b.为客户程序设置安全策略文件和RMISecurityManager安全管理器。