分布式-RMI

2019-02-20  本文已影响0人  watermountain

RMI(Remote Method Invoke 远程方法调用)

主要涉及的接口和类如下图所示:

RMI 思维导图

接口Remote:

    远程对象的接口必须扩展Remote 接口。

    接口中的所有方法还必须生命抛出RemoteException 异常(原因:远程方法调用缺乏本地调用的可靠性,远程调用总是存在失败的可能。)

异常RemoteException

    每一次远程方法调用都必须捕获RemoteException 异常, 并且指明当调用不成功时应执行的相应的操作

类UnicastRemoteObject

类UnicastRemoteObject 的构造器使得它的对象可供远程访问。原因是它的构造器中调用了exportObject 方法。代码如下:

protected UnicastRemoteObject(int port) throws RemoteException{

    this.port = port;

    exportObject((Remote) this, port);

}

public static Remote exportObject(Remote obj, int port) throws RemoteException{

    return exportObject(obj, new UnicastServerRef(port));

}

    实现远程接口中声明方法的类可以继承类UnicastRemoteObject 或在远程对象的构造器中像如下方式调用exportObject 方法:

UnicastRemoteObject.exportObject(this,0); // 第二个参数为0,表明任何合适的端口都可用来监听客户连接。

类LocateRegistry

用于获取特定主机(包括本地主机)上远程对象注册表的引用,或用于创建一个接受对特定端口调用的远程对象注册表。

实际上通过LocateRegistry类方法获取到的是Registry对象引用(一个 stub),然后我们可以通过该Registry对象引用对“远程对象注册表”进行操作的。更进一步,没有Naming类照样可以进行所有的操作。

接口Registry

接口和类的关系如下:

RMI 使用的接口和类的关系图

备注:

    使用了Serializable 接口

    Naming类提供存储和获得“远程对象注册表”上远程对象的引用的方法

Ref:

    Java RMI原理与使用

    Java RMI 框架(远程方法调用)

    java.rmi.Naming和java.rmi.registry.LocateRegistry的区别

上一篇下一篇

猜你喜欢

热点阅读