基于java的网络编程ppt课件.ppt_第1页
基于java的网络编程ppt课件.ppt_第2页
基于java的网络编程ppt课件.ppt_第3页
基于java的网络编程ppt课件.ppt_第4页
基于java的网络编程ppt课件.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

第十章RMI 计算机学院网络工程 2 410 本章关键字 分布式计算是一门计算机科学 它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分 然后把这些部分分配给许多计算机进行处理 最后把这些计算结果综合起来得到最终的结果 RMI 面向对象的远程方法调用 RemoteMethodInvocation 是EnterpriseJavaBeans的支柱 是建立分布式Java应用程序的方便途径 2 思考 场景计算PI服务预报天气情况 3 程序举例 RMI Arith java本地数据调用远程的累加资源 4 第十章RMI 10 1RMI概念10 2RMI工作机制10 3RMI实现技术 5 10 1RMI概念 分布式计算是一门计算机科学 其实质是 要求运行在不同地址空间不同主机上的对象互相调用 各种分布式系统都有自己的调用协议 CORBA CommonObjectRequestBrokerArchitecture 公共对象请求代理体系结构 的IIOP InternetInterORBProtocol 互联网内部对象请求代理协议 MTS MicrosoftTransactionServer 的DCOM DistributedComponentObjectModel 分布式组件对象模型 6 JAVA中的分布式解决方案 在EJB EnterpriseJavaBean 组件的选择Socket 但它要求客户端和服务端必须进行应用级协议的编码交换数据 RPC RemoteProcedureCall 它抽象出了通讯接口用于过程调用 使得编程者调用一个远程过程调用本地过程同样方便 但RPC并不支持对象 面向对象的远程调用RMI RemoteMethodInvocation 采用它使得调用远程对象和调用本地对象同样方便 RMI采用JRMP JavaRemoteMethodProtocol 通讯协议 是构建在TCP IP协议上的一种远程调用方法 7 什么是RMI RMI是Java的一组开发分布式应用程序的API RMI使用Java语言接口定义了远程对象 它集合了Java序列化和Java远程方法协议 JavaRemoteMethodProtocol 通过RMI技术 使原先的程序在同一操作系统的方法调用 变成了不同操作系统之间程序的方法调用 由于J2EE是分布式程序平台 它一RMI机制实现程序组件在不同操作系统之间的通信 比如 一个EJB可以通过RMI调用Web上另一台机器上的EJB远程方法 8 RMI调用示例图 9 强大的RMI技术 RMI RemoteMethodInvocation 远程方法调用 是用Java在JDK1 1中实现的 它大大增强了Java开发分布式应用的能力 为什么称Java为网络开发语言 其主要原因就在于 强大开发分布式网络应用 的能力上 而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一 其实 它可以被看作是RPC的Java版本 但是传统RPC并不能很好地应用于分布式对象系统 而JavaRMI则支持存储于不同地址空间的程序级对象之间彼此进行通信 实现远程对象之间的无缝远程调用 10 真正的跨平台操作 RMI是以Java为核心的 它将Java的安全性和可移植性等强大功能带给了分布式计算 所以可将代理和业务逻辑等属性移动到网络中最合适的地方 RMI可利用标准Java本机方法接口JNI与现有的和原有的系统相连接 RMI还可利用标准JDBC包与关系数据库连接 RMI JNI和RMI JDBC相结合 可利用RMI与目前使用非Java语言的现有服务器进行通信 RMI为采用Java对象的分布式计算提供了简单而直接的途径 通过RMI技术充分体现了 编写一次就能在任何地方运行的模式 11 JAVA的安全性 12 JAVA的可移植性 13 RMI的主要优点 面向对象 RMI可将完整的对象作为参数和返回值进行传递 而不仅仅是预定义的数据类型 可移植属性 RMI可将属性 类实现程序 从客户机移动到服务器 或者从服务器移到客户机 设计方式 对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能 14 RMI的主要优点 续 安全 RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全 便于编写和使用 RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松 简单 可连接现有 原有的系统 RMI可通过Java的本机方法接口JNI与现有系统进行进行交互 RMI可利用JDBC 在不修改使用数据库的现有非Java源代码的前提下与现有关系数据库进行交互 15 RMI的主要优点 续 编写一次 到处运行 RMI是Java 编写一次 到处运行 方法的一部分 分布式垃圾收集 RMI采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象 并行计算 RMI采用多线程处理方法 可使您的服务器利用这些Java线程更好地并行处理客户端的请求 16 RMI规范 支持对存在于不同虚拟机上对象的无缝的远程调用支持服务器对客户的回调把分布式对象模型自然地集成到Java语言里 尽可能从语义上保留Java的面向对象的特征使分布式对象模型和本地Java对象模型间的差异明朗使编写可靠的分布式应用程序尽可能简单保留Javarun time环境索提供的安全性多样化的远程调用机制支持多传输的能力分布式的垃圾回收 17 10 2RMI工作机制 RMI应用程序通常包括两个独立的程序 服务器程序和客户机程序 而RMI为服务器和客户机进行通信和信息传递提供了一种机制 典型的服务器应用程序将创建多个远程对象 使这些远程对象能够被引用 然后等待客户机调用这些远程对象的方法 典型的客户机程序则从服务器中得到一个或多个远程对象的引用 然后调用远程对象的方法 18 桩和构架 在与远程对象的通信过程中 RMI使用标准机制 桩stub和构架skeleton 桩和架构是应用程序与系统其他部分的接口 通常使用RMI的rmic编译器产生 桩通常负责 初始化远程调用 序列化 远程方法调用 反序列化 远程方法调用完成等 构架负责 反序列化客户端参数 调用实际远程对象 序列化返回客户端参数 19 桩 20 RMI系统结构 21 RMI系统结构 RMI系统由以下组成桩 构架层 stub skeleton 应用程序与系统其他部分的接口 远程引用层 负责独立于客户桩和服务器构架 提供多种形式的远程引用和调用协议 传输层 低级层 在不同的地址空间内传输序列化的流 22 方法调用的流向 方法调用从客户对象经桩程序 Stub 远程引用层 RemoteReferenceLayer 和传输层 TransportLayer 向下 传递给主机 然后再次经传输层 向上穿过远程调用层和骨干网 Skeleton 到达服务器对象 23 方法调用的流向 续 桩程序扮演着远程服务器对象的代理的角色 使该对象可被客户激活 远程引用层处理语义 管理单一或多重对象的通信 决定调用是应发往一个服务器还是多个 传输层管理实际的连接 并且追踪可以接受方法调用的远程对象 服务器端的骨干网完成对服务器对象实际的方法调用 并获取返回值 返回值向下经远程引用层 服务器端的传输层传递回客户端 再向上经传输层和远程调用层返回 最后 桩程序获得返回值 24 RMI工作机制 调用将桩 构架层传递 他们作为应用程序与RMI系统其他部分的一个接口来提供服务 它惟一目的是通过序列化流 传输数据到远程引用层 一旦数据通过桩 构架层传递 它将通过远程引用层 实现调用的予以 并且使用面向连接的流 将数据传递到传输层 数据到达传输层 负责建立连接并管理这些连接 25 10 3RMI实现技术 利用RMI编写分布式对象应用程序需要完成以下工作 1 定位远程对象 应用程序通常使用简单命名工具rmiRegistry来注册它的远程对象 2 与远程对象通信 远程对象间通信的细节由RMI处理 对于程序员来说 远程通信看起来就像标准的Java方法调用 3 给作为参数或返回值传递的对象加载类字节码 26 rmi由5个包和3个应用工具组成 java rmi客户端的rmi类 接口和异常java rmi sever服务器端的rmi类 接口和异常java rmi registry用于管理rmi命名服务的类java rmi dgc用于管理分布式垃圾收集的类java rmi activation用于按需缉获的rmi服务的类rmic编译器 生成stub和skeletonrmiregistry一个为rmi提供命名服务的服务器 这项服务把名字和对象关联在一起rmid一个支持rmi激活框架的服务器 27 Java rmi软件包 Remote RemoteObject RemoteServer Activatable UnicastRemoteObject IOException RemoteException Object LocateRegistery SecurityManager Naming RMISecurityManager 28 Java rmi Remote接口 29 Remote接口 该接口是一个不定义方法的标记接口 其全部内容只有下面一行publicinterfaceRemote 30 RMI实现的步骤 远程服务的接口定义 远程服务接口的具体实现 桩 Stub 和框架 Skeleton 文件 一个运行远程服务的服务器 一个RMI命名服务 它允许客户端去发现这个远程服务 类文件的提供者 一个HTTP或者FTP服务器 一个需要这个远程服务的客户端程序 31 10 3 2RMI实现流程 1 生成一个远程接口 2 实现远程对象 服务器端程序 3 生成桩程序和骨干网 服务器端程序 4 编写服务器程序 5 编写客户程序 6 注册远程对象 7 启动远程对象 32 RMI基础的类设置 在基础的RMI中至少包含三个类远程接口服务端程序客户端程序例如 RMI arith java 33 定义远程接口 远程接口定义说明了服务器提供的方法特性 包含了方法的名字和参数 这样的接口必备的特性必须声明为public必须extendsjava rmi Remote接口异常处理时 必须throwsjava rmi RemoteException 34 实现远程接口 必要步骤指定要执行的远程接口定义远程对象的成员属性实现能被远程调用的方法创建一个安全管理器RMISecurityManager对象实例创建远程对象的对象实例注册rebind或bind远程对象到RMI注册表中 35 开发客户端程序 建立远程对象实例对象 在制定的RMI注册表查找相应的远程服务 传递参数及调用相关远程方法 等待结果及输出结果 36 10 3 3RMI在Windows下运行步骤 一共分为5步1 进入命令行窗口 进入自己项目的文件夹内使用javac java2 使用rmicserverName这时会产生一个serverName Stub class的文件3 使用startrmiregistry4 输入java Djava security policy policyNameserverName运行服务器5 如果成功另外打开一个命令行窗口进入自己项目文件夹输入java Djava security policy policyNameclientName 注意 有的时候要在后面加上参数localhost 37 产生桩和框架 桩和框架是是在服务器端在运行时确定 根据需要动态装载 采用rmic编译器生成stub和skeleton 例如rmicrmiExampl在JDK1 5下 该命令执行后将生成一个桩文件 文件名为 rmiExampl Stub class 38 启动RMI注册表 RMI注册表是一个名字服务 允许客户程序获得对远程对象的引用 在服务器 客户程序之前 必须启动RMI注册表 在Windows环境下 启动方式为startrmiregistry默认情况下 启动的端口为1099 如果要改变端口则使用startrmiregistry3000 39 执行RMI服务器和客户机 首先 执行服务器端程序JavarmiServer然后 执行客户端程序JavarmiClient 40 程序举例 RMI 获得远程时间 41 在执行服务器端程序时的异常 执行javarmiServer出现异常java security AccessControlException accessdenied SocketPermission127 0 0 1 3000connect resolve 被本地的策略文件所限制 42 10 3 4什么是策略文件 一个文本文件 里面记录了一些对计算机资源访问的方式 比如对本地文件的访问控制 对端口的访问控制等 其文件后缀名为 policy 系统策略文件的缺省位置为 java home lib security java policy Solaris java home lib security java policy Windows 43 基本的授权设置 GrantcodeBase 路径 permissionjava io FilePermission C users cathy foo bat read SocketPermission 1024 65535 connect accept permissionjava security AllPermission 44 最简单的解决方案 打开你的jdk目录下的这个文件C ProgramFiles Java jdk1 5 0 04 jre lib security java policy在文件最后加入下面代码 grant SocketPermission 1024 65535 connect accept SocketPermission 80 connect 45 最常用的解决方案 建立自己的策略文件 如c MyPolicy policy 内容为 grant SocketPermission localhost 2005 connect resolve 执行时用命令 指定了安全策略文件java Djava security policy c MyPolicy policyrmiServer 46 其它2种解决方案 1 设置安全管理器System setSecurityManager newRMISecurityManager 2 把System setSecurityManager newRMISecurityManager 改为匿名类实现 覆盖两个方法Syst

温馨提示

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

评论

0/150

提交评论