网站大量收购闲置独家精品文档,联系QQ:2885784924

第3章与JavaEE组件技术相关的知识.ppt

  1. 1、本文档共267页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章与JavaEE组件技术相关的知识

RMI调用机制 RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端本地代表或代理人角色,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的。 调用程序将调用本地stub的方法,而本地stub将负责执行对远程对象的方法调用. stub 每个远程对象都包含一个代理对象stub,当运行在本地Java虚拟机上的程序调用运行在远程Java虚拟机上的对象方法时,它首先在本地创建该对象的代理对象stub, 然后调用代理对象上匹配的方法,代理对象会作如下工作: 与远程对象所在的虚拟机建立连接 打包(marshal)参数并发送到远程虚拟机 等待执行结果 解包(unmarshal)返回值或返回的错误 返回调用结果给调用程序 stub 对象负责调用参数和返回值的流化(serialization)、打包解包,以及网络层的通讯过程。 skeleton 每一个远程对象同时也包含一个skeleton对象,skeleton运行在远程对象所在的虚拟机上,接受来自stub对象的调用。当skeleton接收到来自stub对象的调用请求后,skeleton会作如下工作: 解包stub传来的参数 调用远程对象匹配的方法 打包返回值或错误发送给stub对象 远程对象的stub和skeleton对象都是由rmic编译工具产生的。 RMI工作过程 1)首先,一个调用将通过桩/构架层传递,桩/构架层作为应用程序与RMI系统其他部分的一个接口服务.它的唯一目的是通过序列化流,传输数据到远程引用层.实际上,这也是对象序列化开始应用的地方—它使Java对象能够在不同的虚拟机之间传输. 2)数据通过桩/构架层传递,它必须通过远程引用层.远程引用层实现了调用的意义,它使用面向连接的流,将数据送往传输层.远程引用层负责确定对象的性质:对象是驻留在本地机上,还是驻留在远程机上.远程引用层还要确定对象是否可以被实例化,以及是否可以自动启动,或者它是否需要事先声明和初始化. 3)最后,数据传输到传输层,传输层建立连接并管理连接 编写RMI分布式应用程序步骤: 1)将远程类的功能定义为JAVA接口.在RMI中,远程对象是实现远程接口的类的实例.在远程接口中声明每个要远程调用的方法. 2)编写和实现服务器类.该类是实现第1步中定义的远程接口.所以在该类中至少要声明实现一个远程接口,并且要有构造方法。在该类中还要实现远程接口中所声明的各个远程方法。 3)编写使用远程服务的客户机程序。在该类中使用java.rmi.Naming中的lookup()方法获得对远程对象的引用,依据需要调用该引用的远程方法,其调用方式和对本地对象方法的调用相同。 实现了服务器和客房机的程序后,就是编译和运行该RMI系统。步骤: 1)编译(javac)远程接口类、远程接口实现类和客户机程序。 2) 使用rmic 编译器生成实现类的stub和skeleton。 3)启动RMI注册服务程序rmiregistry。  4)启动服务器端程序。 5)启动客户机程序。 要使用RMI,必须构建四个主要的类:远程对象的本地接口、远程对象实现、RMI客户机和RMI服务器。RMI服务器生成远程对象实现的一个实例,并用一个专有的URL注册。RMI客户机在远程RMI服务器上查找服务对象,并将它转换成本地接口类型,然后像对待一个本地对象一样使用它。 下面是一个简单的RMI实例,RMI客户机通过RMI服务器提供的方法输出一个语句。例子虽然很简单,但掌握了Java RMI调用的基本原理和方法,在实现复杂应用时,我们需要做的也只是完善远程对象的实现类而已。 1.远程对象的本地接口声明(RMIOperate.java)? 该类仅仅是一个接口声明,RMI客户机可以直接使用它,RMI服务器必须通过一个远程对象来实现它,并用某个专有的URL注册它的一个实例。? ???· 远程接口扩展 java.rmi.Remote 接口。 ?? · 除了所有应用程序特定的例外之外,每个方法还必须在 throws 子句中声明 java.rmi.RemoteException(或 RemoteException 的父类)。 Hello.java 2.远程对象实现类 这个类应实现RMI客户机调用的远程服务对象的本地接口,它必须从UnicastRemoteObject继承,构造函数应抛出RemoteException异常。 HelloImpl.java 3.RMI服务器类 该类创建远程对象实现类HelloImpl的一个实例,然后通过一个专有的URL来注册它。所谓注册就是通过Java.rmi.Naming.bind(

文档评论(0)

sandaolingcrh + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档