浅析 Stubs/Skeletons 机制 与 RMI 调用
存根类是一个类,它实现了一个接口,但是实现后的每个方法都是空的。
它的作用是:如果一个接口有很多方法,如果要实现这个接口,就要实现所有的方法。但是一个类从业务来说,可能只需要其中一两个方法。如果直接去实现这个接口,除了实现所需的方法,还要实现其他所有的无关方法。而如果通过继承存根类就实现接口,就免去了这种麻烦。(即,继承接口的类,只需要是先接口中声明的诸多空方法中的一个或者几个,不需要像常规类一样,全部都给予实现。)
================================================================
什么是RMI
分布式计算系统要求运行在不同地址空间不同主机上的对象互相调用。各种分布式系统都有自己的调用协议,如 CORBA 的 IIOP(Internet InterORB Protocol), MTS 的 DCOM 。那么EJB组件呢?在Java里提供了完整的sockets通讯接口,但sockets要求客户端和服务端必须进行应用级协议的编码交换数据,采用sockets是非常麻烦的。
一个代替Sockets的协议是RPC(Remote Procedure Call), 它抽象出了通讯接口用于过程调用,使得编程者调用一个远程过程和调用本地过程同样方便。RPC 系统采用XDR来编码远程调用的参数和返回值。
但RPC 并不支持对象,而EJB构造的是完全面向对象的分布式系统,所以,面向对象的远程调用RMI(Remote Method Invocation)成为必然选择。采用RMI,调用远程对象和调用本地对象同样方便。RMI采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。
RMI调用机制
RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的。
================================================================
stub
每个远程对象都包含一个代理对象stub,当运行在本地Java虚拟机上的程序调用运行在远程Java虚拟机上的对象方法时,它首先在本地创建该对象的代理对象stub, 然后调用代理对象上匹配的方法,代理对象会作如下工作:
与远程对象所在的虚拟机建立连接
打包(marshal)参数并发送到远程虚拟机
等待执行结果
解包(unmarshal)返回值或返回的错误
返回调用结果给调用程序
stub 对象负责调用参数和返回值的流化(serialization)、打包解包,以及网络层的通讯过程。
skeleton
每一个远程对象同时也包含一个skeleton对象,skeleton运行在远程对象所在的虚拟机上,接受来自stub对象的调用。当skeleton接收到来自stub对象的调用请求后,skeleton会作如下工作:
解包stub传来的参数
调用远程对象匹配的方法
打包返回值或错误发送给stub对象
远程对象的stub和skeleton对象都是由rmic编译工具产生的。
================================================================
RMI-IIOP
RMI能够很好解决Java语言中分布式对象的调用问题,但RMI不是一个标准的调用协议,所以RMI不能调用非Java语言编写的对象。
IIOP(Internet Inter-ORB Protocol)是 CORBA 的通讯协议。CORBA是由 OMG(Object Management Group) 组织定义的一种分布式组件标准,通过和各种编程语言相匹配的IDL(Interface Definition Language),CORBA可以作到和语言无关,也就是说,用不同编程语言编写的CORBA对象可以互相调用。
JavaIDL定义了Java语言到CORBA之间的匹配,通过 JavaIDL ,用 Java 语言编写的应用程序可以和任何 CORBA 对象通讯。
RMI-IIOP 结合了 RMI 的易用性和 CORBA/IIOP 的语言无关性,通过 RMI-IIOP,RMI 对象可以采用 IIOP 协议和 CORBA 对象通讯。RMI-IIOP 对 RMI 的调用参数作了一些很轻微的限制,在调用 CORBA 对象时,必须遵循这些限制。JDK1.3已经提供对 RMI-IIOP 的支持。
Apusic Application Server对RMI-IIOP的支持
Apusic Application Server目前采用RMI,对RMI-IIOP的支持正在开发中,预计不久即会推出完全支持RMI-IIOP的新版本。
浅析 Stubs/Skeletons 机制 与 RMI 调用相关推荐
- java提供两种处理异常的机制_浅析Java异常处理机制
关于异常处理的文章已有相当的篇幅,本文简单总结了Java的异常处理机制,并结合代码分析了一些异常处理的最佳实践,对异常的性能开销进行了简单分析. 博客另一篇文章<[译]Java异常处理的最佳实践 ...
- java 反射 Gc_深入浅析Java反射机制
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反 ...
- java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...
最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...
- 浅析继承关系中的方法调用
我们首先来看一段代码: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Father father=new Son(); 6 f ...
- Java的反射作用_浅析Java 反射机制的用途和缺点
反射的用途 Uses of Reflection Reflection is commonly used by programs which require the ability to examin ...
- 浅析scala传名调用和传值调用,: = 与() : =
函数调用一般传值调用,但是,在某些情况下,我们不希望函数的值首先被计算,而是等到调用的时候再来进行计算,为了适应这种情景,scala提供了传名调用. 先来看两个例子: package test/*** ...
- HTTP和HTTPS是什么 二者区别是什么
HTTP和HTTPS是什么 二者区别是什么 · HTTP简介 HTTP(超文本传输协议)是网络上最为广泛的传输协议,被用于在web浏览器和网站服务器之间的传输协议.HTTP是一个简单的请求-响应协议, ...
- 远程通信(RPC,Webservice,RMI,JMS、EJB、JNDI的区别)对比
总结这些概念都是易混淆,最基本概念定义复习和深入理解,同时也是架构师必备课程 RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到 ...
- java安全(三)RMI
给个关注?宝儿! 给个关注?宝儿! 给个关注?宝儿! 关注公众号:b1gpig信息安全,文章推送不错过 1.RMI 是什么 RMI(Remote Method Invocation)即Java远程方法 ...
最新文章
- 神经网络完成芯片设计仅需几小时
- FPGA笔试题解析(三)
- gsea结果分析图怎么看_数据分析怎么做?看这篇就够了!
- [系统安全] 四十一.APT系列(6)Python解析PE文件并获取时间戳判断来源区域
- vmware workstation pro 14 虚拟机无法开启、黑屏的解决方案汇总
- 「LibreOJ Round #11」Misaka Network 与求和(杜教筛 + Min_25)
- iOS字符串常用用法
- 基于SSM的小说阅读网站
- 关于“无法加载文件或程序集Interop.ShockwaveFlashObjects,Version = 1.0.0.0,Culture = neutral”的问题
- python创新创业_云课堂智慧职教创新创业答案超星吧,云课堂智慧职教答案python,云课堂智慧职教创新创业答案...
- #快餐店工资计算流程
- vue3组合式Composition API之ref函数的具体用法
- Android M 六大新特性
- php图形验证码验证,php图片验证码代码
- 测试版ios15怎么信任软件,ios15的信任文件在哪?ios15信任授权在哪里设置?
- 163邮箱申请注册条件,邮件注册申请,邮箱的格式怎么写?
- java导出Excel保留小数位数两位
- Oracle 数据库的性能优化
- win7怎样打开无线服务器,Win7怎么设置tplink路由器_Win7安装tplink路由器方法-192路由网...
- 《scrum要素》读书笔记工作总结