第8章 高级RMI.ppt_第1页
第8章 高级RMI.ppt_第2页
第8章 高级RMI.ppt_第3页
第8章 高级RMI.ppt_第4页
第8章 高级RMI.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、第八章高级rmi,内容概述:Stub下载安全管理器(安全管理器)客户回调,主要介绍rmi的高级特点。 1. RMI要求,RMI实现不同Java虚拟机之间的对象通讯,并与每个虚拟机上的资源共享处理能力。 RMI的目的是通过使分布在不同虚拟机中的对象像本地对象一样地工作来实现位置的透明度,应用不需要知道对象是本地还是远程,而是封摇滾乐应用基础的复杂实现的细节引用远程对象的JVM是客户端,而包含远程对象的JVM是服务器。 2 .如何使RMI结构、RMI开发人员不知道被调用对象是本地对象还是远程对象? 存根和俯式冰橇在本地远程透明的体系结构中实现。 RMI在客户端使用存根,而存根类似于服务器端查询密码

2、的本代理。 客户通过存根在网络上搜索调用的远程对象。 从客户端的角度来看,这些个存根类似于服务器端的方法,使用相同的方法名称、参数列表以及返还值,但不包含实际的方法查询密码,客户端将检索接口引用,以确保接口的完整性存根和俯式冰橇图、存根和俯式冰橇以及存根包含向服务器发送客户端请求、处理服务器返回的结果以及将结果返回给客户端的查询密码。 在服务器侧,被称为俯式冰橇的本代理用于接收客户端的远程调用,将其转换为服务器上的本地调用,执行本地调用,并且向客户端返回结果。 存根和俯式冰橇由RMI编译程序自动生成,分析创建的服务器端类,并生成存根和俯式冰橇代码段。 3. RMI的类包,RMI包括7个包。 (

3、1)java.rmi :核心API。 (2)可以激活2)java.rmi.activation,对象的API。 (3)java.rmi.DGC、分布式垃圾收集器(dgc )的API。 (4)java.rmi.registry、RMI网络命名服务的API。 (5)java.server,服务器端所操作定的API。 (6)java.rmi、RMI-IIOP的核心API、RMI-IIOP也是远程方法调用,在EJB中使用RMI-IIOP。 (7)另一个7)java.rmi.CORBA,RMI-IIOP轻型API为RMI-IIOP提供了插头、连接线和RMI-IIOP执行时间之间的标准接口定。 4 .搜索

4、远程对象,客户机计程仪计划使用命名服务和目录查询服务来搜索远程服务,并且在创建客户机计程仪计划时,向客户机传达提供命名服务的主机地址和通讯端口号,经由JNDI服务来远程搜索服务RMI名称服务是注册查询服务,提供远程服务的对象必须在RMI名称服务器中注册,并且服务器必须记录远程对象的名称和映射关系。 此关系以hashTable结构存储。 在注册表中,与远程对象和名称关联,在客户程序想要调用远程对象上的方法的情况下,首先寻找名称得到对象的参照。 搜索过程返回对象的远程引用Stub。 客户机查询密码获取Stub对象,并使用指定的服务器名称和对象名称将其网站数据库到服务器对象。 5. RMI参数传递;

5、(1)基本参数传递如果远程方法传递的参数或返还值是基本数据类型,则RMI以值传递。 (2)对象类型参数采用值传递对象所被参照的对象。 (3)远程对象参数远程对象采用传递参照的方式。 (4)将对象的序列化Java对象转换为对象的bit-blob表示,使得网络上的文件的交接、写入变得容易。 对象序列化的方法实现java.io.Serializable接口,JVM虚拟机完成对象序列化的具体实现。 (5)如何使用牛鼻子字transient的对象大,通过网络传输或复制过度浪费资源的远程对象的资源,需要在数据库连接、线程对象等本地机器上进行再生成。 对象存在机密信息,不希望通过网络传送的6. RMI-II

6、OP,(1) CORBA (commonobjectrequestbrokerarchitecture ) CORBA采用了IIOP和传送连接协议。 CORBA独立于语言。CORBA使用CosNaming来放置远程对象。 (2)设jrmp (javaremotemessagingprotocol、javaremotemessagingprotocol )为RMI传输连接协议。 RMI从纯Java到Java。 RMI使用JNDI搜索远程对象。 (3)RMI与CORBA的结合形成RMI-IIOP,7 .创建RMI应用程序;(3)实现RMI的过程中建立远程接口。 此接口向RMI客户端公开远程对象的有

7、效方法。 必须对java.rmi.Remote进行扩展。 创建远程对象。 远程对象是实现远程接口的类。 远程对象还可能包含内部操作和其他内部管理方法。 没有通过接口公开这些个的方法。 远程对象可以包含main方法。 通过在main方法中编写远程对象的注册计程仪程序,可以将远程对象绑定到JNDI树,以便远程客户端可以网站数据库到远程对象。 使用java编译程序编译远程接口和服务。 创建调用远程对象的客户查询密码,并使用java编译程序编译客户查询密码。 创建RMI保密工作文件从RMIC编译程序生成STUB和SKELETON。 启动RMI注册服务器,START RMIREGISTRY在RMI注册服

8、务器中注册远程对象运行RMI客户机,以获取远程对象提供的公共方法。 (2)制作远程接口包RMI example的import java.rmi.* . publicationinterformationcenterforenterextendsremote/此方法由远程客户端调用,并由publicationstrisayhello () throwsremoteexcepti 注意:1)此接口只向RMI客户端发布一个方法sayHello,而发布到远程接口的方法必须抛出远程执行。 2 )远程接口必须扩展名为Remote的接口。 远程接口的完整路径是java.rmi.Remote。 3 )作为参数

9、或关返还值字传递的远程对象必须声明为远程接口,而不能声明为远程对象类。 (3)制作远程对象package rmiexample的import java.rmi.* . publicscleorserverextensuncalcastremoteobjectimplementshellinterface/此方法由远程客户端使用. public string say hello () throwsrem system.out.println ( hello server.say hello () hasbeenremotelyinvoked. )消息传递给远程对象正在运行的虚拟机; /为远程客户

10、返回“hello,远程世界! 的消息” /main ()方法实现在RMI注册服务器中注册远程对象,以便远程客户端可以通过JNDI发现远程对象。 publicstaticvoidmain (string args ) /保密工作管理器if (system.getsecuritymanager ()=null ) system.setsecuritymanager (newrmisesecuritymanager try /远程对象的斯坦共和国入HelloServer obj=new HelloServer (); 在/rmi注册伺服器上注册索引(hello server,obj ); /将消息s

11、ystem.out.println发送到运行远程对象的JVM其他端口。catch (exceptive ) system.out.println (“helloservererror 3360”e.gets e .打印堆栈跟踪(); 注意:1)此基本服务类只实现了两种方法:在远程接口中定义的sayHello方法和向RMI注册表注册服务的main方法。 2)Main方法创建远程对象斯坦共和国,并在hello服务器名称下使用名称服务进行注册。 3 )远程UnicastRemoteObject类4 )必须扩展远程接口,其返回类型、方法名、参数以及抛出的异常必须与接口一致。(4)编译远程接口和远程对象

12、使用javac编译远程接口和远程对象。 (5)生成远程对象的存根和俯式冰橇,制作远程对象的主干和信息帧工作。 要完成此任务,请使用rmic编译程序,rmic编译程序将为远程对象生成存根和俯式冰橇。 存根(Stub )是将RMI调用传递给客户端俯式冰橇的远程对象的本代理,这些远程对象负责将RMI调用传递给实际的远程方法语法。 rmicd 3360 rmipoxamplermexample.hellserver此命令编译elloIterface_WLStub.class和hello接口_ wl skel.class并将其写入输出目录查询。在执行RMI编译程序时,将生成存根和俯式冰橇之间的中间Jav

13、a源文件,将这些源文件编译到类中,然后删除这些源文件。 注意:在JDK1.2或更高版本中,不再需要Skeleton,仅保留远程客户端的Stub。 /stub类别generatedbyrmic,dono tedit./contentsbestochangetochangewithoutnotice.packagermexample; publinformationclasshelloserver _ stubbextensjava.RMI.server.remotimplementsrmirexample.hell接口,Java.RMI.remotivep privatestaticjava.l

14、ang.reflect.method $ method _ say hello _ 0; 静态辅助方法0=rmipoxample.hell接口. class.get方法(say hello,新Java.lang.class ); catch (Java.lang.nosuchmethodexception ) throw new Java.lang.nosuchmethoderror (stub类初始化失败),/constructorspublichelloserver /methodsfromremoteinterfaces/implementationofsayhello () publi

15、c Java.lang.string say hello () throws Java.RMI.remoteexceptiontry 返回(Java.lang.string ) $返回); catch (Java.lang .运行时间检测) throw; catch (Java.RMI .远程执行) throw; 创建catch (Java.lang.exception ) throw new Java.RMI.unexpectexception (undelaredcheckedexception,e ),()远程调用服务的客户端pack 导入Java.RMI.* . publicscleo

16、rteclientpublityfildstaticstringsrevenme=RMI :/202.196.9.17533609/hello伺服器publicstaticvoidmain tryhellointerfaceobj=(hell接口) naming.lookup (服务器名称) system.out.println ( connectedtohelloserver. ); 字符串消息=obj.say hello (); system.out .打印机(消息)捕捉(可移动) t .打印堆栈跟踪(); System.exit(-1 ),(7)编译客户端程序javaclirmexample.hellocolient (8) RMI注册服务器的配置和启动注册服务器的启动:

温馨提示

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

评论

0/150

提交评论