什么是存根类 Stub
转:http://www.cnblogs.com/cy163/archive/2009/08/04/1539077.html
存根类是一个类,它实现了一个接口,但是实现后的每个方法都是空的。
它的作用是:如果一个接口有很多方法,如果要实现这个接口,就要实现所有的方法。但是一个类从业务来说,可能只需要其中一两个方法。如果直接去实现这个接口,除了实现所需的方法,还要实现其他所有的无关方法。而如果通过继承存根类就实现接口,就免去了这种麻烦
========================================================
什么是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的新版本。
什么是存根类 Stub的更多相关文章
- 存根类(stub) 是什么意思?有什么作用?(转)
存根类是一个类,它实现了一个接口,但是实现后的每个方法都是空的. 它的作用是:如果一个接口有很多方法,如果要实现这个接口,就要实现所有的方法.但是一个类从业务来说,可能只需要其中一两个方法. 如 ...
- 存根类STUB
当我们创建一个指定各种方法集合的接口时,我们可以考虑使用"存根”STUB,“存根”就是用空方法体实现该接口中所有方法的类,这样我们就可以通过继承该“存根”创建一个实现该接口的类,这样一来,该 ...
- JAVA基础知识(七)存根类
存根类是一个类,它实现了一个接口,它的作用是:如果一个接口有很多方法,如果要实现这个接口,就要实现所有的方法.但是一个类从业务来说,可能只需要其中一两个方法.如果直接去实现这个接口,除了实现所需的方法 ...
- dubbo的本地存根(Stub)
dubbo的本地存根的原理是:远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,那么就在服务消费者这一端提供了一个Stub类,然后当消费者调用provid ...
- java rmi浅谈
首先比较下RPC和RMI的差别: 首先java提供了RMI的api,jdk1.5之后虚拟机自动生成两个类:存根类stub和骨架类skelton. stub是给客户端的,当客户端调用远程对象的一个方法时 ...
- stub 和 skeleton 的讲解,自己实现一个stub和skeleton程序
转: stub 和 skeleton 的讲解,自己实现一个stub和skeleton程序 RMI的本质就是实现在不同JVM之间的调用,它的实现方法就是在两个JVM中各开一个Stub和Skeleton, ...
- dubbo的本地存根
在消费者创建存根类 修改消费者XML 也可以修改消费者注解
- 代码生成器辅助类Stub、StubQueue与CodeletMark
在解释执行的情况下需要一些类来支持代码生成的过程. 1.InterpreterCodelet与Stub类 Stub类的定义如下: class Stub VALUE_OBJ_CLASS_SPEC { p ...
- 第11篇-认识Stub与StubQueue
在 第10篇-初始化模板表 我们介绍过TemplateInterpreter::initialize()函数,在这个函数中会调用TemplateTable::initialize()函数初始化模板表, ...
随机推荐
- 74HC595点亮8个LED灯
一.原理介绍 595有两个寄存器,都是8位的,如下所示: 595是串入并出带有锁存功能移位寄存器,它的使用方法简单: - - 在正常使用时 /SCLR接高电平,/G接低电平. - - 从SER每输 ...
- one-hot encoding与哑变量的区别
one-hot encoding与哑变量的区别 one-hot比哑变量的特征位多一位,即哑变量是精简版的one-hot,即在线性回归中用截距项来表示最后一维,但由于最初很难分辨特征的主次关系,且机器学 ...
- quartz的使用(三)
1.在数据源数据库中执行下载的quartz的sql语句(创建11张表),其中表头qrtz_可以在在配置文件中更改,对应表创建时更改org.quartz.jobStore.tablePrefix=qrt ...
- unity 打包Apk生成签名证书keystore
进行Android项目开发中想要将androidapp导出为apk的时候需要选择一个数字证书,即keystore文件(android.keystore),它用来对我们的APP进行签名,是导出APP的一 ...
- 好久不见的博客咯!——没有可持久化的可持久化treap
每每想要去了解可持久化treap这个好写好调的东东,然后就发现网上只有一个人的——SymenYang的!在此我必须得把他批判一番——写方法不贴代码是什么心态!而且写出来的是有问题的呀!害人不浅! 好吧 ...
- Python 让输入的密码不在屏幕上显示
使用getpass模块 #!/usr/bin/env python import getpass username = raw_input("username:") passwor ...
- kafaka集群部署
1.集群规划 kafka集群配置是依赖zookeeper的,所以需要保证先安装了zookeeper和jdk注意:kafka内自带zookeeper,我们不使用自带的. hadoop101 hadoop ...
- NX二次开发-将工程图视图+尺寸的最大边界导出图片
/***************************************************************************** ** ** ExportPicture.c ...
- 笨办法学Python记录--习题15-17 开始读写文件啦
习题15 - 17 打开并读流程: from sys import argv script,filename = argv txt = open(filename) print "Here' ...
- hdu多校第五场1005 (hdu6628) permutation 1 排列/康托展开/暴力
题意: 定义一个排列的差分为后一项减前一项之差构成的数列,求对于n个数的排列,差分的字典序第k小的那个,n<=20,k<=1e4. 题解: 暴力打表找一遍规律,会发现,对于n个数的排列,如 ...