java核心课件2-第9章

java核心课件2-第9章

ID:46944396

大小:347.81 KB

页数:11页

时间:2019-11-30

java核心课件2-第9章_第1页
java核心课件2-第9章_第2页
java核心课件2-第9章_第3页
java核心课件2-第9章_第4页
java核心课件2-第9章_第5页
资源描述:

《java核心课件2-第9章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第9章RMI熟悉RMI的基本原理和结构能够熟练创建简单的RMI程序9.2RMI的本质RMI(RemoteMethodInvocation)远程方法调用;它是Java特有的分布式计算技术,允许运行在一个Java虚拟机上的对象调用运行在另一个Java虚拟机上的对象的方法;用RMI实现的远程方法调用,看起来像调用本地方法一样。客户端服务器2.调用sayHello()方法远程对象HelloServiceImpl1.发送调用请求3.发送返回值9.3RMI的体系结构如下图,RMI框架采用代理,来负责客户与远程

2、对象之间通过Socket进行通信的细节;RMI框架为远程对象分别生成了客户端代理和服务器端代理;位于客户端的代理称类为存根(Stub);位于服务器端的代理类称为骨架(Skeleton)。客户端服务器远程对象HelloServiceImpl3.调用sayHello()方法1.调用本地存根的sayHello()方法2.发送被编组的参数4.发送被编组的返回值或异常由RMI框架生成的代理类远程对象的存根远程对象的骨架5.返回值或异常当客户端调用远程对象的一个方法时,实际上是调用本地存根对象的相应方法。存根

3、对象与远程对象具有同样的接口。存根采用一种与平台无关的编码方式,把方法的参数编码为字节序列,这个编码过程称为参数编组。RMI主要采用Java序列化机制进行参数编组。接着,存根把以下请求消息发送给服务器:被访问对象的名字、被调用的方法的描述、编组后的参数的字节序列;服务器端接收到客户端的请求信息,然后由相应的骨架对象来处理这一请求信息,骨架对象执行以下操作:反编组参数,即把参数俄字节序列反编码为参数;定位要访问的远程对象;调用远程对象的相应方法;获取方法调用产生的返回值或异常,然后对它们进行编组;把

4、编组后的返回值或异常发送给客户端;客户端的存根接收到服务器发送过来的编组后的返回值或异常,再对它进行反编组,就得到调用远程方法的返回结果;存根与骨架类通过Socket进行通信;在JDK5.0中,RMI框架会在运行时自动为远程对象生成动态代理类(包括存根和骨架类),从而更彻底地封装了RMI框架的实现细节,简化了RMI框架的使用方式9.4RMI的命名服务RMI采用一种命名服务机制来使客户程序可以找到服务器上的一个远程对象;在JDK的安装目录的bin子目录下有一个rmiregistry.exe程序,它是

5、提供命名服务的注册表程序;服务器负责创建远程对象,然后把它注册到rmiregistry注册表,客户端从注册表中获得远程对象的存根对象;RMI的命名服务API已经被整合到Java命名与目录信息(JNDI)服务中了,以URL的形式给出;RMI的URL以rmi://开头,后面接服务器以及端口号,然后是一个斜线,接着是远程对象的名字:rmi://localhost/server1默认端口为1099。ClientServerrmiregistry9.5一个简单的应用大致来说,创建一个RMI应用包括以下步骤:

6、创建远程接口:继承java.rmi.Remote接口;创建远程类:实现远程接口,其构造方法必须声明抛出RemoteExcetion异常;创建服务器程序:负责在rmiregistry注册表中注册远程对象;创建客户程序:负责定位远程对象,并且调用远程对象的方法。9.5.1创建远程接口RMI规范要求远程对象所属的泪实现一个远程接口,并且远程接口符合以下条件:直接或间接继承java.rmi.Remote接口;接口中的所有方法声明抛出java.rmi.RemteException;方法和参数的返回值必须是可

7、序列化的对象。例:publicinterfaceHelloServiceextendsRemote{StringsayHello(Stringmsg)throwsRemoteException;}9.5.2提供服务器端实现类(远程类)这个类通常继承自RemoteServer类,但它是一个抽象类,仅仅定义了服务器对象与其远程存根之间通信的基本机制;UnicastRemoteObject类继承了抽象类RemoteServer,是一个实体类,对一个远程类而言,最简单的就是继承它,它也是当前版本RMI包中

8、提供的唯一可用的服务器端实现类。另外,远程类的构造方法必须声明抛出RemoteExcetion异常例:publicclassHelloServiceImplextendsUnicastRemoteObjectimplementsHelloService{privateStringname;publicHelloServiceImpl(Stringname)throwsRemoteException{this.name=name;}publicStringsayHello(Strin

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。