版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为Word版,下载可任意编辑——使用ICE实现一个简单的文件系统?DirectoryI.java,这个文件含有Directoryservant的实现。?FileI.java,这个文件含有Fileservant的实现。
1.服务器的main程序
Server类派生自Ice.Application,在其run方法中含有主应用规律。run方法创立对象适配器、为文件系统里的目录和文件创立一些servants,然后激活适配器。下面是main程序完成代码:packageFilesystem.server;importFilesystem.File;importFilesystem.GenericError;importFilesystem.servant.DirectoryI;importFilesystem.servant.FileI;publicclassServerextendsIce.Application{publicintrun(String[]args){Ice.ObjectAdapteradapter=communicator().createObjectAdapterWithEndpoints(\,\);DirectoryI._adapter=adapter;FileI._adapter=adapter;//创立根目录,名字是\,没有父目录。//对于没有父目录的根目录,传递null作为父引用DirectoryIroot=newDirectoryI(\,null);//在根目录中创立README文件Filefile=newFileI(\,root);String[]text;text=newString[]{\poetry.\};try{//用文本填充文件file.write(text,null);}catch(GenericErrore){}//创立Coleridge子目录DirectoryIcoleridge=newDirectoryI(\,root);//在Coleridge目录中创立Kubla_Khan文件file=newFileI(\,coleridge);System.err.println(e.reason);//Kubla_Khan文件的内容text=newString[]{\,\,\,\,\sea.\};publicstaticvoidmain(String[]args){Serverapp=newServer();}try{file.write(text,null);}catch(GenericErrore){}adapter.activate();System.err.println(e.reason);communicator().waitForShutdown();return0;}}System.exit(app.main(\,args));服务器实例化文件系统的几个节点,创立了下图所示的结构:
2.FileIServant类
FileIservant类具有这样的基本结构:publicclassFileIextends_FileDisp{}这个类有一些数据成员:?_adapter
这个静态成员存储的是一个引用,指向我们在服务器中使用的唯一一个对象适配器。?_name
这个成员存储的是servant所表达的文件的名字。?_parent
这个成员存储的是一个引用,指向文件的父目录的servant。?_lines
这个成员存放文件的内容。
publicstaticIce.ObjectAdapter_adapter;privateString_name;privateDirectoryI_parent;privateString[]_lines;_name和_parent数据成员由构造器初始化。FileIservant类完成代码如下:packageFilesystem.servant;importFilesystem.GenericError;importFilesystem.NodePrx;importFilesystem.NodePrxHelper;importFilesystem._FileDisp;publicclassFileIextends_FileDisp{//这个静态成员存储的是一个引用,指向我们在服务器中使用的唯一一个对象适配器。publicstaticIce.ObjectAdapter_adapter;//这个成员存储的是servant所表达的文件的名字。privateString_name;//这个成员存储的是一个引用,指向文件的父目录的servant。privateDirectoryI_parent;//这个成员存放文件的内容。privateString[]_lines;/***_name和_parent数据成员由构造器初始化:*@paramname*@paramparent*/publicFileI(Stringname,DirectoryIparent){_name=name;_parent=parent;//核实指向父目录的引用不是null,由于每个文件都必需有父目录。assert(_parent!=null);//为这个文件生成一个标识,Ice.IdentitymyID=Ice.Util.stringToIdentity(Ice.Util.generateUUID());//把自己增加到适配器的servant映射表中。_adapter.add(this,myID);//为这个文件创立代理NodePrxthisNode=NodePrxHelper.uncheckedCast(_adapter.createProxy(myID));//调用父目录的addChild方法,把自己增加到父目录的后代节点列表中。//非线程安全publicvoidwrite(String[]text,Ice.Currentcurrent)throws/***name方法继承自生成的Node接口*它简单地返回_name成员的值。*/publicStringname(Ice.Currentcurrent){}//非线程安全publicString[]read(Ice.Currentcurrent){}return_lines;return_name;}_parent.addChild(thisNode);GenericError{_lines=text;
}}3.DirectoryIServant类
DirectoryI类具有这样的基本结构:packageFilesystem;publicfinalclassDirectoryIextends_DirectoryDisp{publicstaticIce.ObjectAdapter_adapter;privateString_name;privateDirectoryI_parent;privatejava.util.ArrayList_contents=newjava.util.ArrayList();}
和FileI类的状况一样,我们拥有一些数据成员,用于存储对象适配器、名字,以及父目录(对于根目录,_parent成员存放的是null引用)。此外,我们还有一个_contents数据成员,存储的是子目录列表。这些数据成员都由构造器初始化。
DirectoryIservant类完成代码如下:packageFilesystem.servant;importFilesystem.NodePrx;importFilesystem.NodePrxHelper;importFilesystem._DirectoryDisp;publicfinalclassDirectoryIextends_DirectoryDisp{//指向服务器中唯一一个对象适配器publicstaticIce.ObjectAdapter_adapter;//存储目录的名称privateString_name;//指向父目录privateDirectoryI_parent;//存储子目录列表privatejava.util.ArrayList_contents=newjava.util.ArrayList();publicDirectoryI(Stringname,DirectoryIparent){_name=name;_parent=parent;//为新目录创立标识,//对于根目录,使用固定的\标识Ice.IdentitymyID=Ice.Util.stringToIdentity(_parent!=null?Ice.Util.generateUUID()/***助手函数,子目录或文件可以调用它,把自己增加到父目录的后代节点}:\);//把自己增加到servant映射表中_adapter.add(this,myID);//创立一个指向自身的代理NodePrxthisNode=NodePrxHelper.uncheckedCast(_adapter.createProxy(myID));//把自己增加到父目录的后代节点列表中。if(_parent!=null)_parent.addChild(thisNode);列表中。}*@paramchild*/voidaddChild(NodePrxchild){}_contents.add(child);publicStringname(Ice.Currentcurrent){}return_name;publicNodePrx[]list(Ice.Currentcurrent){}NodePrx[]result=newNodePrx[_contents.size()];_contents.toAr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度离婚协议书范本:共同债务的承担与偿还4篇
- 2025年度新能源汽车充电设施购销合同4篇
- 2025年度柴油储备与应急供应合同范本4篇
- 2024年05月内蒙古2024届中国民生银行呼和浩特分行毕业生“未来银行家”暑期管培生校园招考笔试历年参考题库附带答案详解
- 2025年度汽车内饰部件委托加工合同书4篇
- 2025年度农产品出口FAS贸易合同范本3篇
- 2024版美容院转让合同书
- 二零二五年度体育赛事转播权租赁合同3篇
- 2025年度建筑工程施工合同风险控制与应对措施3篇
- 2024版调研保密合同3篇
- 第二章 运营管理战略
- 《三本白皮书》全文内容及应知应会知识点
- 专题14 思想方法专题:线段与角计算中的思想方法压轴题四种模型全攻略(解析版)
- 医院外来器械及植入物管理制度(4篇)
- 图像识别领域自适应技术-洞察分析
- 港口与港口工程概论
- 新概念英语第二册考评试卷含答案(第49-56课)
- 商业伦理与企业社会责任(山东财经大学)智慧树知到期末考试答案章节答案2024年山东财经大学
- 【奥运会奖牌榜预测建模实证探析12000字(论文)】
- (完整版)译林版英语词汇表(四年级下)
- 哈尔滨师范大学与堪培拉大学合作培养
评论
0/150
提交评论