版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度销售合同:新能源汽车区域代理销售协议
- 江苏省盐城滨海县联考2024届中考冲刺卷数学试题含解析
- 2024年度广告创意设计合同
- 二零二四年度股权激励合同激励条件与权益分配
- 2024年度产品代理合同代理范围和代理条件明细
- 二零二四年度加工承揽合同:服装加工厂承揽服装加工
- 内联网安全系统相关行业投资方案
- 2024年度茶楼音响设备升级改造合同
- 2024年度企业并购尽职调查合同
- 2024年度保险合同:企业财产保险涵盖办公设备、库存商品等
- DB44T 1026-2012城镇公共排水管道非开挖修复技术规程
- 肝癌破裂出血的处理
- 试验示范基地建设合作协议书
- 机械加工初步报价自动计算(含各种工时费)
- 《1.3 数据科学与大数据》课件(人教中图版)
- 中医儿科学 泄泻
- YY/T 0471.2-2004接触性创面敷料试验方法 第2部分:透气膜敷料水蒸气透过率
- SB/T 11137-2015代驾经营服务规范
- GB/T 2899-2017工业沉淀硫酸钡
- GB/T 18690.3-2002农业灌溉设备过滤器自动清洗网式过滤器
- PythonNumPy教学讲解课件
评论
0/150
提交评论