Ice 对象(Ice Objects)
Ice 对象是一种概念性的实体(或称抽象)。Ice 对象具有以下特征:
• Ice 对象是本地或远地的地址空间中、能响应客户请求的实体。
• 一个Ice 对象可在单个或多个服务器中实例化(后者是冗余方式)。如果
某个对象同时有多个实例,它仍是一个Ice 对象。
• 每个Ice对象都有一个或多个接口。 一个接口是一个对象所支持的一系列
有名称的操作。客户通过调用操作来发出请求。
• 一个操作有零个或更多参数,以及一个返回值。参数和返回值具有明确
的类型。参数是有名称的,并且有方向:in 参数由客户初始化,并传给
服务器; out 参数由服务器初始化,并传给客户(返回值只是一种特
殊的out 参数)。
• 一个Ice 对象具有一个特殊的接口,称为它的主接口。此外, Ice 对象还
可以提供零个或更多其他接口,称为facets (面)。客户可以在某个对
象的各个facets 之间进行挑选,选出它们想要使用的接口。
• 每个Ice 对象都有一个唯一的对象标识(object identity)。对象标识是用
于把一个对象与其他所有对象区别开来的标识值。Ice 对象模型假定对
象标识是全局唯一的,也就是说,在一个Ice 通信域中,不会有两个对
象具有相同的对象标识。
代理(Proxies)
要想与某个Ice 对象联系,客户必须持有这个对象的代理1。 代理是客户
的地址空间中的一种制品(artifact);对客户而言,代理就是Ice 对象的
代表(该对象可能在远地)。一个代理充当的是一个Ice 对象的本地大使:
当客户调用代理上的操作时, Ice run time 会:
1. 定位Ice 对象
2. 如果Ice 对象的服务器没有运行,就激活它
3. 在服务器中激活Ice 对象
4. 把所有in 参数传送给Ice 对象
5. 等待操作完成
6. 把所有out 参数及返回值返回给客户(或在发生错误的情况下抛出异
常)
Slice:
每个Ice 对象都有一个接口,该接口具有一些操作。接
口、操作,还有在客户及服务器间交换的数据的类型,都是用Slice 语言定
义的。Slice 允许你以一种独立于特定编程语言(比如C++ 或Java)的方
式定义客户-服务器的合约。 Slice 定义由一个编译器编译成特定编程语言
的API,也就是说,与你所定义的接口和类型对应的那一部分API,会由生
成的代码组成。