JavaRMI--10-6--北大计算机系java培训讲义ppt课件

上传人:我*** 文档编号:148521054 上传时间:2020-10-20 格式:PPT 页数:51 大小:269.50KB
返回 下载 相关 举报
JavaRMI--10-6--北大计算机系java培训讲义ppt课件_第1页
第1页 / 共51页
JavaRMI--10-6--北大计算机系java培训讲义ppt课件_第2页
第2页 / 共51页
JavaRMI--10-6--北大计算机系java培训讲义ppt课件_第3页
第3页 / 共51页
JavaRMI--10-6--北大计算机系java培训讲义ppt课件_第4页
第4页 / 共51页
JavaRMI--10-6--北大计算机系java培训讲义ppt课件_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《JavaRMI--10-6--北大计算机系java培训讲义ppt课件》由会员分享,可在线阅读,更多相关《JavaRMI--10-6--北大计算机系java培训讲义ppt课件(51页珍藏版)》请在金锄头文库上搜索。

1、1,9.6 一个RMI的分布式应用的实例,用RMI编写一个分布式应用,核心有以下三方面: 定位远程对象 1. 一个应用可以利用RMI的名字服务功能注册器远程对象。 2. 可以象操作普通对象一样传送并返回一个远程对象的引用(指针)。 与远程对象通信: 底层的通信由RMI实现,对于系统开发人员来说,远程调用和标准的Java方法调用没有什么区别。 为需要传递的对象装载类的字节码 RMI允许调用者向远程对象传递一个对象,因此 RMI提供这种装载对象的机制。,2,本资源由 寒秀草与巧克力 搜集与网络 请您在传播的时候将下载分数设为0 真正体现资源共享的理念 谢谢 更多0分资料去我的文库,3,9.6 一个

2、RMI的分布式应用的实例,Web Server,Client,Server,Web Server,registry,URL protocol,RMI,RMI,URL protocol,URL protocol,RMI,4,9.6 一个RMI的分布式应用的实例,一、问题的提出,5,9.6 一个RMI的分布式应用的实例,分布特点: engin开发,先运行,task后定义.写engin时不对执行什么任务作任何规定.任务可以是任意定制的. 前提条件: 定义任务的类,要规定任务的实现步骤,使得这个任务能够提交给engin去执行.使用server上的 CPU资源. 技术支持: RMI的动态装载功能.,6,

3、9.6 一个RMI的分布式应用的实例,远程对象,client,server,A,m1,远程方法,A.m1(),远程对象必须继承远程接口 确定那些方法是远程方法,为此定义远程接口 远程接口只负责提供方法名,不一共实现细节,因此必须由一个对象来实现接口,7,9.6 一个RMI的分布式应用的实例,二、设计一个服务器 核心协议:提交任务,执行任务,返回结果,在java中远程调用是通过定义远程接口来实现的, 一个接口只能有一个方法 不同类型的任务,只要他们实现了Task类型,就可以在engin上运行. 实现这个接口的类,可以包含任何任务计算需要的数据以及和任何任务计算需要的方法.,8,9.6 一个RMI

4、的分布式应用的实例,(1)定义远程接口 第一个接口:compute,package compute; import java.rmi.Remote; import java.rmi.RemoteException; public interface Compute extends Remote Object executeTask(Task t) throws RemoteException;,package compute; import java.io.Serializable; public interface Task extends Serializable Object execu

5、te(); ,第二个接口:定义一个task类型,作为参数传给executeTask方法, 规定了engin与它的任务之间的接口,以及如何启动它的任务.它 不是一个远程接口,9,9.6 一个RMI的分布式应用的实例,Compute engin的设计要考虑以下问题: 1. compute engine是一个类 ComputeEngine ,它实现了 Compute接口,只要调用该类的方法executeTask, 任务就能提交上来. 2. 提交任务的Client 端程序并不知道任务是被下载到engin上执行的.因此client在定义任务时并不需要包含如何安装的server端的代码. 3. 返回类型是

6、对象,如果结果是基本类型,需要转化成相应的对等类. 4. 用规定任务如何执行的代码填写execute方法.,10,9.6 一个RMI的分布式应用的实例,(2)实现远程接口 一般说来,实现一个远程接口的类至少有以下步骤: 1. 声明远程接口 2. 为远程对象定义构造函数 3. 实现远程方法 engin中创建对象的工作可以在实现远程接口类的main函数中实现: 1. 创建并安装安全管理器 2. 创建一个或更多的远程对象的实例 3. 至少注册一个远程对象,11,9.6 一个RMI的分布式应用的实例,package engine; import java.rmi.*; import java.rmi.

7、server.*; import compute.*; public class ComputeEngine extends UnicastRemoteObject implements Compute public ComputeEngine() throws RemoteException super(); public Object executeTask(Task t) return t.execute(); public static void main(String args) if (System.getSecurityManager() = null) System.setSe

8、curityManager(new RMISecurityManager(); String name = /host/Compute; try Compute engine = new ComputeEngine(); Naming.rebind(name, engine); System.out.println(ComputeEngine bound); catch (Exception e) System.err.println(ComputeEngine exception: + e.getMessage(); e.printStackTrace(); ,12,9.6 一个RMI的分布

9、式应用的实例,在构造函数中,通过super(), a UnicastRemoteObject 被启动,即它可以侦听客户端来的请求输入 只有一个远程方法,参数是客户端远程调用这个方法时传来的任务.这个任务被下载到engin,远程方法的内容就是调用客户端任务的方法,并把结果回送给调用者.实际上这个结果是在客户的任务的方法中体现的.,callexecuteTask(task),13,9.6 一个RMI的分布式应用的实例,参数传递规则: 1. 远程对象通常通过引用传递.一个远程对象的引用是一个stub,它是客户端的代理.它实现远程对象中的远程接口的内容 2. 本地对象通过串行化拷贝到目的. 如果不作制

10、定,对象的所有成员都将被拷贝.,14,9.6 一个RMI的分布式应用的实例,通过引用传递一个对象,意味着任何由于远程调用引起的变化都能反映在原始的对象中。 当传递一个远程对象时,只有远程接口是可用的, 而在实现类中定义的方法或者是非远程接口中的方法,对接收者来说是不可用的 在远程方法调用中,参数,返回值,异常等非对象是值传送. 这意味着对象的拷贝被传送到接受方。任何在对象上发生的变化不影响原始的对象 一旦服务器用rmi注册了,main方法就存在了,不需要一个守护线程工作维护服务器的工作状态,只要有一个computer engin的引用在另一个虚拟机,computer engin就不会关闭,15

11、,9.6 一个RMI的分布式应用的实例,三、实现一个客户程序 目标:创建一个任务,并规定如何执行这个任务。,client,package compute; public interface Task extends java.io.Serializable Object execute(); ,task不是远程接口,但是需要传递到服务器,因此用串行化,ExecuteTask(),execute(),16,9.6 一个RMI的分布式应用的实例,computePi的作用,装载安全管理器,生成一个远程对象 comp,生成任务对象,Look up(ComputeEngin),获得了stubs,Pi t

12、ask=new Pi(),调用ComputeEngin的远程方法 获得计算结果,Comp.executeTask(task),17,9.6 一个RMI的分布式应用的实例,package client; import java.rmi.*; import java.math.*; import compute.*; public class ComputePi public static void main(String args) if (System.getSecurityManager() = null) System.setSecurityManager(new RMISecurityM

13、anager(); try String name = / + args0 + /Compute; Compute comp = (Compute) Naming.lookup(name); Pi task = new Pi(Integer.parseInt(args1); BigDecimal pi = (BigDecimal) (comp.executeTask(task); System.out.println(pi); catch (Exception e) System.err.println(ComputePi exception: + e.getMessage(); e.prin

14、tStackTrace(); ,18,9.6 一个RMI的分布式应用的实例,Pi的作用,实现Task接口,实现execute算法,19,9.6 一个RMI的分布式应用的实例,package client; import compute.*; import java.math.*; public class Pi implements Task private static final BigDecimal ZERO = BigDecimal.valueOf(0); private static final BigDecimal ONE = BigDecimal.valueOf(1); priv

15、ate static final BigDecimal FOUR = BigDecimal.valueOf(4); private static final int roundingMode = BigDecimal.ROUND_HALF_EVEN; public Pi(int digits) this.digits = digits; ,20,9.6 一个RMI的分布式应用的实例,public Object execute() return computePi(digits); * * pi/4 = 4*arctan(1/5) - arctan(1/239) * public static BigDecimal computePi(int digits) int scale = digits + 5; BigDecimal arctan1_5 = arctan(5, scale); BigDecimal arctan1_239 = arctan(239, scale); BigDecimal pi arctan1_5.multiply(FOUR).subtract(arctan1_239).m

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号