版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为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年广西百色市乐业县专业森林消防救援队伍招聘13人考试备考题库及答案解析
- 2026广东深圳北理莫斯科大学学生工作部学生管理服务岗招聘2人模拟笔试试题及答案解析
- 深度解析(2026)《GBT 25937-2010子午线轮胎一次法成型机》(2026年)深度解析
- 2025福建漳州市龙文城建物业服务有限公司招聘若干人考试备考题库及答案解析
- 2025年合肥产投康养集团有限公司及子公司社会招聘17名参考考试题库及答案解析
- 2025河南轻工职业学院招聘工作人员(硕士)46人考试备考题库及答案解析
- 深度解析(2026)GBT 25659.1-2010简式数控卧式车床 第1部分:精度检验
- 深度解析(2026)GBT 25615-2010土方机械 司机位置发射声压级的测定 动态试验条件
- 2025重庆酉阳自治县城区事业单位公开遴选34人备考考试题库及答案解析
- 吉安市农业农村发展集团有限公司及下属子公司2025年第二批面向社会公开招聘备考题库有答案详解
- 2024年江苏省普通高中学业水平测试小高考生物、地理、历史、政治试卷及答案(综合版)
- 煎药室岗前培训PPT
- GB/T 42131-2022人工智能知识图谱技术框架
- 家具制造企业安全检查表优质资料
- 如家酒店新版
- GA 1016-2012枪支(弹药)库室风险等级划分与安全防范要求
- 《电能质量分析》课程教学大纲
- 8 泵站设备安装工程单元工程质量验收评定表及填表说明
- 尿素湿法烟气脱硝技术简介
- 桥台锥坡溜坡工程量计算
评论
0/150
提交评论