欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    分布式对象技术.ppt

    • 资源ID:38197348       资源大小:1.80MB        全文页数:15页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    分布式对象技术.ppt

    现在学习的是第1页,共15页RMI技术应用技术应用现在学习的是第2页,共15页1. RMI结构结构RMI 实现结构可以分为三层:实现结构可以分为三层:Stub/Skeleton层层远程引用层远程引用层1. 传输层传输层客户调用远程对象客户调用远程对象方法方法Stub远层引用层远层引用层TCP远程对象远程对象Skeleton远层引用层远层引用层TCPRMI结构图结构图Sub/Skeleton层实现传输数据的调度和层实现传输数据的调度和反调度机制。调度就是把数据或对象反调度机制。调度就是把数据或对象转换成字节流,反调度则把字节流转转换成字节流,反调度则把字节流转换成数据或对象。换成数据或对象。远程引用层定义了远程引用层定义了RMI连接的调用语义连接的调用语义即如何调用远程对象的方法。即如何调用远程对象的方法。Java远程远程方法协议方法协议(Java Remote Method Protocol)使用使用java.rmi.server.RemoteRef传输层实现字节流的传输,一般采用传输层实现字节流的传输,一般采用TCP或或UDPJava Remote Messaging Protocol 现在学习的是第3页,共15页2. 采用采用RMI开发客户机开发客户机/服务器应用程序步骤:服务器应用程序步骤:定义远程接口定义远程接口实现这个远程接口实现这个远程接口生成生成stub(桩桩/客户代理客户代理)和和skeleton(骨架骨架/实体实体)编写使用远程对象的客户程序编写使用远程对象的客户程序启动注册表并登记远程对象启动注册表并登记远程对象1. 运行服务器和客户程序运行服务器和客户程序现在学习的是第4页,共15页2.1 构建服务器程序构建服务器程序创建一个远程接口时,必须遵守下列规则:创建一个远程接口时,必须遵守下列规则:远程接口必须为远程接口必须为public远程接口必须继承远程接口必须继承java.rmi.Remote除应用程序本身有关异常外,远程接口中的每个方法都必须在自己的除应用程序本身有关异常外,远程接口中的每个方法都必须在自己的 throws中声明中声明java.rmi.RemoteException作为参数或返回值传递的一个远程对象,必须声明为远程接口,不可作为参数或返回值传递的一个远程对象,必须声明为远程接口,不可 声明为实现类。声明为实现类。现在学习的是第5页,共15页1. 定义远程接口定义远程接口(服务接口服务接口)import java.rmi.Remote;import java.rmi.RemoteException;/* RMI调用对象接口定义* author 王华东*/public interface InterfaceService extends Remote /*远程服务对象所必须实现的方法* 所有的远程调用的方法,必须声明throws RemoteException* */Object service(Object obj) throws RemoteException;现在学习的是第6页,共15页2. 实现远程接口实现远程接口/* RMI服务对象接口实现服务对象接口实现, 此对象将被此对象将被RMI服务器导出做为远程服务对象服务器导出做为远程服务对象* author 王华东王华东*/ 远程接口必须继承远程接口必须继承java.rmi.server.RemoteServer或它的子类或它的子类public class ImpService extends java.rmi.server.UnicastRemoteObject implements InterfaceService public ImpService() throws java.rmi.RemoteException super();/* 客户端将要调用的方法示例客户端将要调用的方法示例*/public Object service(Object obj) System.out.println(RMI客户机请求客户机请求: +obj);return System.currentTimeMillis()/1000 + : + obj.toString(); 现在学习的是第7页,共15页3. 启动启动RMI服务器服务器import java.rmi.*;import java.rmi.registry.*;/* 启动启动RMI服务器服务器,导出服务对象导出服务对象* author 王华东王华东*/public class StartRMIServer /*启动方法启动方法*/public static void main(String args) int listerPort=9911; /设置设置RMI监听器在监听器在9911端口端口String serverIP=localhost; /监听的监听的IPString serviceObjName=service; /要导出的服务对象名字要导出的服务对象名字try LocateRegistry.createRegistry(listerPort); /设置设置RMI服务器监听端口服务器监听端口ImpService.setLog(System.out); /设置日志对象设置日志对象,打印到控制台打印到控制台ImpService remoteObj = new ImpService(); /创建导出的对象创建导出的对象, 绑定服务绑定服务Naming.rebind(rmi:/+serverIP+:+listerPort+/+serviceObjName, remoteObj);System.out.println(RMI启动在启动在+serverIP+: +listerPort+ 服务名为服务名为: +serviceObjName); catch (Exception e) System.err.println(Server exception: + e.toString();e.printStackTrace();现在学习的是第8页,共15页4. 客户机代码客户机代码import java.rmi.*;/* RMI调用客户端调用客户端* author 王华东王华东*/public class RmiClient public static void main(String args) int listerPort=9911;/设置设置RMI监听器在监听器在9911端口端口,1099是默认端口是默认端口String serverIP=localhost;/监听的监听的IPString serviceObjName=service;/要导出的服务对象名字要导出的服务对象名字try /查找服务器上的服务对象查找服务器上的服务对象InterfaceService stub = (InterfaceService)Naming.lookup(rmi:/+serverIP+:+listerPort+/+serviceObjName);for(int i=0;i10;i+)/调用对象的服务方法调用对象的服务方法Object response = stub.service(请说话请说话.+i);System.out.println(RMI服务器应答服务器应答: + response.toString();Thread.sleep(1000); catch (Exception e) System.err.println(Client exception: + e.toString();e.printStackTrace(); 现在学习的是第9页,共15页JavaRMI 第第2例:例:分为以下四个步骤分为以下四个步骤1. 创建远程接口及声明远程方法(创建远程接口及声明远程方法(HelloInterface.java)2. 实现远程接口及远程方法(继承实现远程接口及远程方法(继承UnicastRemoteObject)(Hello.java)3. 启动启动RMI注册服务,并注册远程对象(注册服务,并注册远程对象(HelloServer.java)4. 客户端查找远程对象,并调用远程方法(客户端查找远程对象,并调用远程方法(HelloClient)5. 执行程序:启动服务执行程序:启动服务HelloServer;运行客户端;运行客户端HelloClient进行调用进行调用现在学习的是第10页,共15页import java.rmi.*; /* * 远程接口必须扩展接口远程接口必须扩展接口java.rmi.Remote */ public interface HelloInterface extends Remote /* * 远程接口方法必须抛出远程接口方法必须抛出 java.rmi.RemoteException */ public String say() throws RemoteException; 1. 创建远程接口及声明远程方法(创建远程接口及声明远程方法(HelloInterface.java)现在学习的是第11页,共15页2. 实现远程接口及远程方法(继承实现远程接口及远程方法(继承UnicastRemoteObject)(Hello.java) import java.rmi.*; import java.rmi.server.*; /* * 扩展了扩展了UnicastRemoteObject类,并实现远程接口类,并实现远程接口 HelloInterface */ public class Hello extends UnicastRemoteObject implements HelloInterface private String message; /* * 必须定义构造方法,即使是默认构造方法,也必须把它明确地写出来,因为它必须抛出出必须定义构造方法,即使是默认构造方法,也必须把它明确地写出来,因为它必须抛出出RemoteException异常异常 */ public Hello(String msg) throws RemoteException message = msg; /* * 远程接口方法的实现远程接口方法的实现 */ public String say() throws RemoteException System.out.println(Called by HelloClient); return message; 现在学习的是第12页,共15页3. 启动启动RMI注册服务,并注册远程对象(注册服务,并注册远程对象(HelloServer.java)import java.rmi.Naming; import java.rmi.registry.LocateRegistry; public class HelloServer /* * 启动启动 RMI 注册服务并进行对象注册注册服务并进行对象注册 */ public static void main(String argv) try /启动启动RMI注册服务,指定端口为注册服务,指定端口为1099(1099为默认端口)为默认端口) /也可以通过命令也可以通过命令 java_home/bin/rmiregistry 1099启动启动 /而且用命令而且用命令rmiregistry启动注册服务还必须事先用启动注册服务还必须事先用RMIC生成一个生成一个stub类为它所用类为它所用 LocateRegistry.createRegistry(1099); /创建远程对象的一个或多个实例,下面是创建远程对象的一个或多个实例,下面是hello对象对象 /可以用不同名字注册不同的实例可以用不同名字注册不同的实例 HelloInterface hello = new Hello(Hello, world!); /把把hello注册到注册到RMI注册服务器上,命名为注册服务器上,命名为Hello Naming.rebind(Hello, hello); /如果要把如果要把hello实例注册到另一台启动了实例注册到另一台启动了RMI注册服务的机器上注册服务的机器上 /Naming.rebind(/192.168.1.105:1099/Hello,hello); System.out.println(Hello Server is ready.); catch (Exception e) System.out.println(Hello Server failed: + e); 现在学习的是第13页,共15页4. 客户端查找远程对象,并调用远程方法(客户端查找远程对象,并调用远程方法(HelloClient)import java.rmi.Naming; public class HelloClient /* * 查找远程对象并调用远程方法查找远程对象并调用远程方法 */ public static void main(String argv) try HelloInterface hello = (HelloInterface) Naming.lookup(Hello); /如果要从另一台启动了如果要从另一台启动了RMI注册服务的机器上查找注册服务的机器上查找hello实例实例 /HelloInterface hello = (HelloInterface)Naming.lookup(/192.168.1.105:1099/Hello); /调用远程方法调用远程方法 System.out.println(hello.say(); catch (Exception e) System.out.println(HelloClient exception: + e); 5. 执行程序:启动服务执行程序:启动服务HelloServer;运行客户端;运行客户端HelloClient进行调用进行调用现在学习的是第14页,共15页 Java RMI-IIOP(由由IBM和和SUN共同开发共同开发) RMI-IIOP综合了综合了RMI的简单性和的简单性和CORBA的多语言性(兼容性),其次的多语言性(兼容性),其次RMI-IIOP克服了克服了RMI只能用于只能用于Java的缺点和的缺点和CORBA的复杂性(可以不用掌握的复杂性(可以不用掌握IDL)。)。CORBA 和和 RMI 的差异:的差异:CORBA 运行在运行在 IIOP 协议之上;协议之上;RMI 使用使用 JRMP协议。协议。 CORBA 是独立于语言的;是独立于语言的;RMI 是纯粹是纯粹 Java 到到 Java。 RMI 使用使用 JNDI 定位远程对象;定位远程对象;CORBA 使用使用 CosNaming。例子见附件:例子见附件:rmiiiop-Sun_example.rar现在学习的是第15页,共15页

    注意事项

    本文(分布式对象技术.ppt)为本站会员(石***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开