《北京大学java讲义第九章(续)》由会员分享,可在线阅读,更多相关《北京大学java讲义第九章(续)(50页珍藏版)》请在金锄头文库上搜索。
1、0.6个RMI夜|,用RMI编写一个分布定位远程对象健马一冕暮个应用可以利用翼裹肛的名字胭务功能注册器远程-2.可以象操作普通对象一样传送并返回一个远程对象的引用(指针)。与还程汀夜淅信;一庭尿出通信由RMI吴块,对于系统升发人员来说,远的Java方法调用没有什么区别。服对象装载类的字节码言向远程对象传递个对象,因此RM|9.6一个RMI的分9.6一个RMI的分刹9.6一个RMI的分。分布特点:4申一engin开发,先运徒任务作任何规定.任务可以是任意定制的.前提条件:-定义任务的类,要规定任务的实现步骤,使得这个任务能够捍交给皿皙n去执行使用server上的CPU资源.J式应用的实1一1co
2、mpute园|G2团|ee|le|eIml人SeryerexecuteTaskexecute纳7央运扬吊宣历是远程方法,为此定义远程接口家提供方法名,不一共实现细节,因此必须由一个对。二、设计一个服务“核心协议:提交任clientclient】远程调用是通辽定义远程接口来实现的,务,只要他们实现了Task类型,就可;可以包含任何任务计算需要的务计算需要的方法._J式应用的实(1定义远程接口。第一个接口:compDpackagecompute;骆importjava.rmi.Remote;importjavarmi.RemoteException;publicinterfaceComputeex
3、tendsRemote督(ObjectexecnteTask(Task0)thirows叉ernoteBxception3compute身gie|LEXeclteTasKexecute第二个接口:定义一个task类型,作为参数传给executeTask方法,弛packagecompute;importjava.io.Serializable;publicinterfaceTaskextends规定了engin与它的任务之间的Serializable接口以及如何启动它的任务.它Objectexecute0;不是一个远程接口9.6RM门介白为。Compzmteeng训的设计耍考虑以下|pteeng
4、ine日仁仁类GomputeRngines区实现iC0mpute接口,只要调用该类的方法executeTask,2.提交任务的Client端程序并不知道任务是被下载到engin上执行的.因此client在定义任务时并不需要包伟如何兵半Fserya蝉市代矿摄a弯昆对象,如果结果是基木类型,需要转化康获节笠粑.何执行的代码填写execute方法办9.6个RMU分_式应力(2)实现远程接口。一舱说来,实现吴远程接回的类至少有以下步骤:丶.声明远程接回。2.为远程对象定义构造函数。3.实现远程方法Gnginhl怡为绪y作司以史佐砂许渡捐日类的main国敬中实现:、l创建并:安全管理器胡2%afasms
5、nIDpackageengine;importjava.rmi.#;importjaya.rmi.server.%;importcompute.#:;publicclassComputeEngineextendsUnicastRemoteObjectimplementsComputepublicComputeEngine()throwsRemoteExceptionsuper0;publicObjectexecuteTask(Task()“returntexecute0;】publicstaticvoidmain(Stringargs)识(System.getSecurityManager()=nulD)System.setSecurityMamagertnew步MISecurityMaaager();Stringname=“/hosyCompute3tryComputeengine=newComputeEngine();Naming.rebind(name,engine);Systemout.printin(“ComputeEnginebound);catch(Exceptione)【System.err.printin(“ComputeEngineexception:“+e.getMessage();e.printStackTrace0;刀