java rmi学习笔记(rmi文档翻译)(未完)

1.1 java.rmi.Remote接口:

      远程接口需要满足的条件:必须继承Remote接口,远程方法必须抛出RemoteException异常,

      如果远程对象作为远程方法的参数或者返回值——>参数或返回值必须声明为远程接口。

1.2 RemoteException 抛出该异常可能因为以下情况:

      交互失败:远程服务器不可达或拒绝连接

      在参数或返回值 marshalling 或unmarshalling期间失败

      协议错误

1.3 实现Remote接口:

      如果不继承UnicastRemoteObject,那就没有hascode()、equals()、toString()方法的自定义

      当导出远程对象没有指定socket Factory时,默认导出到所有本地地址

1.4 远程方法的参数或返回值,是远程对象或非远程对象(非远程对象需要实现Serializable接口)

      远程对象:如果远程对象已在服务端注册,那么传递的是存根(说明存根实现了Serializable),否则,传递的是这个远程对象实体(看做非远程对象)

      非远程对象:传递的是副本,非远程对象的内容,在服务端调用远程对象实体的远程方法之前已经复制好了

1.5 类注释

      当一个对象在一次远程方法调用中,从一个JVM传到另一个JVM中,rmi系统用类的信息(类的URL)注释调用流中的类描述,使得这个类能加载给接受者

1.6 在一次远程方法调用中,参数如何传递?

      参数被写到ObjectOutputStream流中,RMI的ObjectOutputStream子类会覆写replaceObject(Object obj)方法,用存根代替实体远程对象。

      在哪里调用replaceObject方法:在writeObject里面。

      算法:如果远程对象已在服务端注册,那么传递存根,否则,传递远程对象实体,如果参数不是Remote实例,则replaceObject()直接返回原对象

      MarshalOutputStream是RMI的ObjectOutputStream子类之一,有replaceObject方法和writeLocation方法

1.7 

      

 

 

上一篇:GDI不规则圆弧菜单控件----------WinForm控件开发系列


下一篇:java – 如何在RMI方法中传递参数中的对象?