# hellowwrod-ice **Repository Path**: guyu-psw/hellowwrod-ice ## Basic Information - **Project Name**: hellowwrod-ice - **Description**: ice 服务服务端 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-04-16 - **Last Updated**: 2022-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # hellowwrod-ice #### 介绍 用ice实现hello world #### 软件架构 软件架构说明(自动生成文件说明) ##### 服务器端 1. .java 此文件为ice文件中定义的接口,如:interface QueryEmployee 2. _Operations.java 如:_QueryEmployeeOperations.java _OperationsNC.java 如:_QueryEmployeeOperationsNC.java 这是两个定义操作的接口文件,每个接口文件中定义了一个操作实现,定义的操作与Slice接口中定义的操作相一致, 只是在_Operations.java中定义的方法多了一个参数“Ice.Current __current” (注:Current对象的定义,请参见3.1.1版本文档中的31.6 The Ice::Current Object说明), 这个参数的作用是可以允许我们访问 “正在执行的请求”和 “服务器中的操作的实现”等信息, 也就是我们的请求需求需要其它请求的支持时或者要获取其它请求的执行结果时,我们可以调用这个方法, 这两个接口文件都会被接口文件_.java继承。 3. _Disp.java 如:_QueryEmployeeDisp.java 这个文件包含的是服务器端骨架类的定义,所用接口定义都要继承这个东西,这里的接口指供客户端调用的接口。 4. PrxHolder.java 如:QueryEmployeeHolder.java 代理定义holder 类,是对应Out参数使用的。一般参数都是值传递,这个类的作用是使参数通过引用传递。ICE框架应用了很多反射机制, 这个类是改变远程参数的一个映射 ##### 客户端 1. Prx.java 这个是代理接口。例如QueryEmployeePrx,在客户的地址空间中, QueryEmployeePrx 的实例是“远地的服务器中的QueryEmployee接口的实例”的“本地大使”。 与服务器端对象有关的所有细节,比如其地址、所用协议、对象标识,都封装在该实例中。 注意:QueryEmployeePrx 继承自Ice.ObjectPrx。这反映了这样一个事实:所有的Ice 接口都隐式地继承自Ice::Object。 说的更明白些,就是这个类的方法调用都是远程服务端的调用,执行query()方法的具体实现是在远程服务端执行的。 2. PrxHelper.java 是代理接口的助手类,也是Prx.java 接口的实现类,获取代理接口的实例。 经常用的就两个方法checkedCast 和 uncheckedCast 。这两个方法实现的都是向下转换(对象的转换)。 注意: checkedCast 会联系服务器。这是必要的,因为只有服务器情况中的代理实现确切地知道某个对象的类型。 所以checkedCast 可能会抛出ConnectTimeoutException 或ObjectNotExistException(这也解释了为何需要助手类: ICE在运行时必须联系服务器,所以我们不能使用Java 的向下转换)。 与此相反, uncheckedCast 不会联系服务器,而是会无条件地返回具有所请求的类型的代理 。但是如果你要使用uncheckedCast, 你必须确定这个代理真的支持你想要转换到的类型;而如果你弄错了,你很可能会在调用代理上的操作时,引发运行时异常。 对于这样的类型失配,最后可能会引发OperationNotExistException,但也有可能引发其他异常,比如整编异常。 而且,如果对象碰巧有一个同名的操作,但参数类型不同,则有可能根本不产生异常,你最后就会把调用发送给类型错误的对象; 这个对象可能会做出非常糟糕的事情。 #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)