使用ICE实现一个简单的文件系统_第1页
使用ICE实现一个简单的文件系统_第2页
使用ICE实现一个简单的文件系统_第3页
使用ICE实现一个简单的文件系统_第4页
使用ICE实现一个简单的文件系统_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论