欢迎来到天天文库
浏览记录
ID:36848495
大小:396.00 KB
页数:28页
时间:2019-05-10
《代理模式-分布式计算》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章代理模式-分布式计算回顾状态模式允许一个对象基于内部状态而拥有不同的行为通过将每个状态封装进一个类,我们把以后需要做的任何改变局部化了状态转换可以由State类或Context类控制使用状态模式通常会导致设计类的数目增加2目标理解本地计算与分布式计算分布计算角色与机制远程方法调用(RemoteMethodInvocation)RMI配置远程方法调用远程方法中的参数传递RMI与CORBA区别3本地计算与分布计算本地计算:组件共享一个公共的地址空间进行通信。分布计算:组件调用不同机器上的地址空间的组件进行通信。JVM组件JVMJVM本地计算分布计算4分布计算分布计算角色:客
2、户与服务器分布计算机制:①客户端以常规的方式进行方法调用,无须操心数据在网络上传输或者解析响应之类的问题。提供服务的对象可能不在同一个虚拟机内,甚至可能不是Java语言实现的对象。②在客户端为服务器对象安装一个代理(proxy),客户调用此代理进行常规方法调用。客户端代理负责与服务器进行联系。③在服务器端安装第二个代理对象。该服务器代理与客户端代理进行通信,以常规方式调用服务器对象上的方法。clientServer发送请求数据返回响应数据在客户端与服务器之间传递对象5clientproxyproxyserver调用本地代理发送请求数据调用本地服务方法返回方法结果返回响应数据返
3、回方法结果RMICORBASOAP6RMI、CORBA与SOAP三种通信技术:RMI:Java的远程方法调用技术,支持Java的分布式对象之间的方法调用;CORBA:通用对象请求代理架构,支持任何编程语言编写的对象之间的方法调用,使用InternetInter-ORB协议(IIOP)支持对象间通信;SOAP:简单对象访问协议,使用基于XML的传输格式。7JavaRMIClientServer对象A远程接口B远程对象BB的代理:存根(stub)远程引用层RRL通信模块远程方法调用返回值B的代理:主干(skeleton)远程引用层RRLJavaRMI架构通信模块命名服务注册对象B
4、引用远程对象B引用8一般RMI概念服务器:远程接口B:列出了可以远程调用的所有方法;远程对象B:实现远程接口B的类实例化对象;主干(skeleton):将客户端发送的参数反向序列化并调用远程对象上所需方法。方法返回,获得返回值并序列化发送回服务器通信模块。远程引用层(RRL):为远程对象B创建一个远程对象引用。同时维护远程对象与其引用之间的映射。客户端:存根(stub):以远程对象B的引用(唯一标识)、远程接口B方法描述来构造一个代理对象;远程引用层(RRL):远程对象B的引用到达RRL时,生成stub,并维护远程对象B的引用与stub之间的映射。9配置远程方法调用-1使用R
5、MI创建C/S应用程序的步骤:服务器端:①定义远程接口,继承Remote接口(java.rmi包),其声明远程调用的方法,每一方法必须声明抛出RemoteException异常。②编写实现远程接口的类(服务器类),该类的对象就是远程对象。ⅰ实现远程接口ⅱ继承服务器类:java.rmi.server.UnicastRemoteObject③使用rmic工具,将上述服务器类生成存根和主干rmic–v1.2服务器类④编写一个主类,实例化服务器类,生成远程对象,并且向注册库命名注册远程对象,利用java.rmi.Naming的方法:publicstaticvoidbind(Strin
6、gname,Remoteobj)publicstaticvoidrebind(Stringname,Remoteobj)10配置远程方法调用-2使用RMI创建C/S应用程序的步骤:客户端:①编写客户机类,调用远程对象上的方法。利用java.rmi.Naming的方法:publicstaticRemotelookup(Stringname)注意:name以URL格式给出:rmi://:/(port默认1099)②启动注册库startrmiregistry[port]③运行服务端主类,创建远程对象并向注册库注册该对象引
7、用。④运行客户机。11RMIC/S应用举例ClientServer调用远程方法sayHello()返回结果:”HelloClient”Step1:定义远程接口,HelloInterface.java12RMIC/S应用举例Step2:编写服务器类HelloImplementor,实现远程接口HelloInterface13RMIC/S应用举例Step3:生成stub和skeleton:rmic–v1.2testrmi.HelloImplementorStep4:编写一个主类HelloHelper,实例化
此文档下载收益归作者所有