远程方法调用.ppt_第1页
远程方法调用.ppt_第2页
远程方法调用.ppt_第3页
远程方法调用.ppt_第4页
远程方法调用.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Software Engineering,第10章远程方法调用,远程方法调用(RMI :Remote Method Invocation)可以调用在一个Java虚拟机中运行的对象在另一个Java虚拟机中运行的对象的方法要远程调用系统中的对象,必须实现远程接口。通常,远程调用与在A系统上放置class,然后在B系统上调用牙齿class的方法相同。RMI允许徐璐在其他Java虚拟机之间进行对象间通信,以共享各个虚拟机的资源和处理功能。RMI的目的是使分布在徐璐其他虚拟机上的对象像本地对象一样工作,以获得位置透明性。应用程序屏蔽应用程序的复杂实施细节,而无需知道对象是本地还是远程。RMI是Java的

2、一组API,支持分布式应用程序节目开发。network programming、software engineering、第10章远程方法调用、远程方法调用(RMI)在JDK1.1中使用Java实现。Java是风靡一时的网络开发语言,其巨大威力体现在开发分布式网络应用程序的强大能力上,RMI是开发100%纯Java的网络分布式应用节目系统的核心解决方案之一。Java RMI支持存储在徐璐不同地址空间中的节目级对象之间的通信,以实现远程对象之间的无缝远程调用。network programming,software engineering,10.1 RMI概述,1,RMI: RMI使用的节目语法

3、规则与本机对象之间方法调用的语法规则相同。network programming、software engineering、10.1 RMI概述、2和RMI应用程序的基本模型RMI使用客户/服务器通信方法。引用远程对象的JVM称为客户机,包含远程对象的JVM称为服务器。典型的服务器应用程序创建多个远程对象,以便可以引用远程对象,然后等待客户端调用远程对象的方法。典型的客户端程序从服务器获取对一个或多个远程对象的引用,然后调用远程对象的方法。RMI提供了服务器和客户端之间通信和信息传递的机制。每次客户端调用服务器端对象时,如何告诉服务器他想创建的对象?如果服务器端将字符串变量与对象相关联,则客户

4、端会将该字符串传递给服务器,告诉服务器要创建的对象,这样服务器就可以准确地知道客户端要使用的对象。所有这些字符串和对象都存储在的远程注册服务器上。network programming、software engineering、10.1 RMI概述、2和RMI应用程序的基本模型RMI使用客户/服务器通信方法。引用远程对象的JVM称为客户机,包含远程对象的JVM称为服务器。典型的服务器应用程序创建多个远程对象,以便可以引用远程对象,然后等待客户端调用远程对象的方法。典型的客户端程序从服务器获取对一个或多个远程对象的引用,然后调用远程对象的方法。RMI提供了服务器和客户端之间通信和消息传递的机制。

5、每次调用服务器端对象时,客户端如何通知服务器要创建的对象?如果服务器端将字符串变量与对象相关联,则客户端会将该字符串传递给服务器,告诉服务器要创建的对象,这样服务器就可以准确地知道客户端要使用的对象。所有这些字符串和对象都存储在的远程注册服务器上。network programming、软件工程、10.1 RMI概述、向服务器提供多种服务的远程对象分发,以及客户机请求访问服务器上的远程对象的方式。、网络编程、软件工程、10.1 RMI概述、3、RMI体系结构:RMI框架分别为远程对象生成客户端代理和服务器端代理。客户端上的代理类称为存根,服务器端上的代理类称为骨骼。network progra

6、mming,software engineering,10.1 RMI概述,与客户端调用RMI方法时调用Stub相同,RMI Stub通过组将方法调用中的参数转换为以下形式,并传递给服务器作为网络组RMI Skeleton分解网络格式的数据,并将恢复方法调用中的参数到达服务器程序。Skeleton使用方法调用访问RMI实现类,正确处理RMI实现类,将返回值返回到Skeleton,Skeleton将返回值分组并通过网络发送到客户机。Stub重新分解收到的返回值,并将最后分解的返回值发送到客户端应用程序。网络编程、软件工程、10.1 RMI概述、存根将访问的远程对象的名称发送到服务器。调用的方法的

7、说明。分组参数的字节序列。调用、network programming、software engineering、10.1 RMI概述和stub方法时,请执行以下操作:(1)初始化包含远程对象的远程虚拟机的连接。(2)对远程虚拟机的参数进行分组(写入和发送);(3)等待方法调用结果;(4)反编译(读取)返回值或返回的异常。(5)将值返回给调用方。为了向调用方展示相对简单的调用机制,stub隐藏了参数序列化和网络级别通信等详细信息。network programming、software engineering、10.1 RMI概述,从服务器端接收来自客户端的请求信息,然后由该骨骼对象处理牙齿请

8、求信息。骨架对象执行以下操作:(1)组参数,即执行参数的字节序列;(2)查找要访问的远程对象。(3)调用与远程对象对应的方法。(4)获取方法调用产生的返回值或异常并将其分组。(5)分组后将返回值或例外发送给客户。网络编程、软件工程、10.1 RMI概述、3、RMI配置1。需要牙齿远程服务的客户端节目2。远程服务的介面定义3。远程服务接口的具体实施4。档案(Stub)和框架(Skeleton)档案5。运行远程服务的服务器6。允许客户机搜索的RMI命名服务Network programming、software engineering、10.2创建远程方法调用,通常创建RMI应用程序节目涉及以下步

9、骤:(1)创建远程介面:继承java.rmi.Remote介面(2)创建远程类:实施远程介面(3)使用RMIC程序创建远程实施所需的存根和框架。(4)创建服务器节目:负责在RMI注册表注册表中注册远程对象。(5)创建客户端节目:负责查找远程对象和调用远程对象的方法。network programming、software engineering、10.2远程方法调用创建、在jdk1.5或更早版本中使用RMI运行rmic创建实现类的stub和skel文件,然后将stub复制到客户机,才能对其进行访问。但是,在jdk1.5中,无需创建文件即可直接访问。JDK5.0之后的两个牙齿不需要创建rmic。

10、但是,有JVM自动处理。事实上,他们仍然存在。(David assell,Northern Exposure(美国电视电视剧),成功)stub存在于客户端上,作为客户端的代理,客户端创建了Stub,并且总是让用户认为界面不工作。实际上,stub类是通过Java动态类下载机制下载的,在服务器端生成,然后根据需要动态加载到客户端。下次重新运行牙齿客户端时,如果classpath中存在相应的存根类,则不再需要下载。而是直接加载。、network programming、software engineering、10.2创建远程方法调用,下图是要在牙齿部分创建的RMI应用程序的类框图。其中HelloS

11、ervice是继承java.rmi.Remote接口的远程接口,HelloServiceImpl类实现牙齿接口并继承Java . RMI . server . unicastremote OS的SimpleClient和SimpleServer类分别是客户端程序和服务器程序,network programming,software engineering,10.2创建远程方法调用,1,创建远程介面:继承java.rmi.Remote介面。远程接口必须直接或间接扩展Java.rmi.Remote接口,并且必须满足声明为public的要求。接口中的所有方法声明都将引发java.rmi.Remote

12、Exception。远程接口声明了客户程序可以访问的远程方法。network programming、software engineering、10.2创建远程方法调用、创建远程介面以下例程是HelloService界面的源程序。牙齿接口声明了echo()和getTime()方法,两者都声明将抛出RemoteException。例程HelloService.java package helloimport Java . util . date;import Java . RMI . *;public interface hello service extends remote public s

13、tring echo(string msg)throws remote exception;public date gettime()throws remote exception;network programming、software engineering、10.2创建远程方法调用、2、创建远程类远程类是远程对象所属的类。RMI规范要求远程类实现远程接口。远程类的构造函数方法还必须声明RemoteException。远程类必须继承Java . RMI . server . UnicastRemoteObject类,unicastremoteobject类允许客户端与服务器对象实例建立一对

14、一连接。以下例程是HelloService接口的源程序。牙齿接口声明了echo()和getTime()方法,两者都声明将抛出RemoteException。Network Programming,生成10.2远程方法调用,helloservice impl . Java import Java . util . date例程;import Java . RMI . *;import Java . RMI . server . unicastremoteobject;public class hello service impl extends unicastremoteobject imple

15、ments hello service private string name;public hello service string name(string name,字符串名称)throws远程执行=namepublic string echo(string msg)throws remote exception system . out . print ln(name 3360调用echo()方法);Return echo: msg from namepublic dategetTime()throws remote exception system . out . p

16、rint ln(调用name3360牙齿get time()方法);return new Date();network programming,software engineering,10.2创建远程方法调用,3,创建服务器节目RMI使用命名服务机制,使客户端程序可以在服务器上找到远程对象。在JDK安装目录的bin子目录下,有一个rmiregistry.exe程序,该程序是提供命名服务的注册表程序。服务器程序的主要任务之一是在rmiregistry注册表中注册远程对象。在JDK 1.3版和更高版本中,RMI的命名服务API已集成到Java名称和目录介面(JNDI)中。在JNDI中,javax.naming.Context接口声明如何注册、查找和注销对象。network programming,software engineering,10.2远程方法调用生成名称已绑定到其他对象时,会发生NameAlreadyBoundException牙齿。Rebind(String name,Object obj):注册对象并将对象绑定到名称。如果牙齿名称已绑定到另一个对象,则不会牙齿发生NameAlreadyBoundException,并且当前参数obj中指定的对象将复盖以前

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论