什么是存根类 Stub
转自: <p style="font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;"> <p style="font-family:Verdana,sans-serif;font-size:14px;"> ? <p style="font-family:Verdana,sans-serif;font-size:14px;"> ======================================================== <p style="font-family:Verdana,sans-serif;font-size:14px;"> 什么是RMI? 分布式计算系统要求运行在不同地址空间不同主机上的对象互相调用。各种分布式系统都有自己的调用协议,如CORBA的IIOP(Internet InterORB Protocol),MTS的DCOM。那么EJB组件呢?在Java里提供了完整的sockets通讯接口,但sockets要求客户端和服务端必须进行应用级协议的编码交换数据,采用sockets是非常麻烦的。? 一个代替Sockets的协议是RPC(Remote Procedure Call),它抽象出了通讯接口用于过程调用,使得编程者调用一个远程过程和调用本地过程同样方便。RPC 系统采用XDR来编码远程调用的参数和返回值。? <p style="font-family:Verdana,sans-serif;font-size:14px;"> 但RPC 并不支持对象,而EJB构造的是完全面向对象的分布式系统,所以,面向对象的远程调用RMI(Remote Method Invocation)成为必然选择。采用RMI,调用远程对象和调用本地对象同样方便。RMI采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。? <p style="font-family:Verdana,sans-serif;font-size:14px;"> RMI调用机制? RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的。? <p style="font-family:Verdana,sans-serif;font-size:14px;"> stub? <p style="font-family:Verdana,sans-serif;font-size:14px;"> 每个远程对象都包含一个代理对象stub,当运行在本地Java虚拟机上的程序调用运行在远程Java虚拟机上的对象方法时,它首先在本地创建该对象的代理对象stub,然后调用代理对象上匹配的方法,代理对象会作如下工作:? <p style="font-family:Verdana,sans-serif;font-size:14px;"> 与远程对象所在的虚拟机建立连接? <p style="font-family:Verdana,sans-serif;font-size:14px;"> 每一个远程对象同时也包含一个skeleton对象,skeleton运行在远程对象所在的虚拟机上,接受来自stub对象的调用。当skeleton接收到来自stub对象的调用请求后,skeleton会作如下工作:? <p style="font-family:Verdana,sans-serif;font-size:14px;"> 解包stub传来的参数? <p style="font-family:Verdana,sans-serif;font-size:14px;"> IIOP(Internet Inter-ORB Protocol)是CORBA的通讯协议。CORBA是由OMG(Object Management Group)组织定义的一种分布式组件标准,通过和各种编程语言相匹配的IDL(Interface Definition Language),CORBA可以作到和语言无关,也就是说,用不同编程语言编写的CORBA对象可以互相调用。? <p style="font-family:Verdana,sans-serif;font-size:14px;"> JavaIDL定义了Java语言到CORBA之间的匹配,通过JavaIDL,用Java语言编写的应用程序可以和任何CORBA对象通讯。? <p style="font-family:Verdana,sans-serif;font-size:14px;"> RMI-IIOP结合了RMI的易用性和CORBA/IIOP的语言无关性,通过RMI-IIOP,RMI对象可以采用IIOP协议和CORBA对象通讯。RMI-IIOP对RMI的调用参数作了一些很轻微的限制,在调用CORBA对象时,必须遵循这些限制。JDK1.3已经提供对RMI-IIOP的支持。? <p style="font-family:Verdana,sans-serif;font-size:14px;"> Apusic Application Server对RMI-IIOP的支持? Apusic Application Server目前采用RMI,对RMI-IIOP的支持正在开发中,预计不久即会推出完全支持RMI-IIOP的新版本。? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |