Ice 分布式程序设计
Michi Henning
Mark Spruiell
以下人士为本文档做出了贡献
Benoit Foucher, Marc Laukien,
Matthew Newhook, Bernard Normier
马维达 译
制造商和销售商用来区分其产品的许多名称已被声明为商标。如果这些名称在本书中出现,而
且 ZeroC 注意到其商标声明,则名称的首字母或所有字母会大写。
本书的作者及出版者精心制作了本书,但不提供任何类型的担保,无论是明确的还是隐含,同
时也不对错误或疏漏承担任何责任。如果本书包含的信息或程序在使用时引发偶然或继起的损
坏,本书作者及出版者不承担任何责任。
版权所有 © 2004 by ZeroC, Inc.
mailto:info@zeroc.com
http://www.zeroc.com
修订版 1.3.0, 2004 年 3 月 1 日
本修订版文档描述的是 Ice 1.3 版。
关于中文版的意见、建议,请发送至:weida@flyingdonkey.com
http://www.flyingdonkey.com
Ice 源码包使用了以下第三方产品:
• Berkeley DB,由 Sleepycat Software 开发 (http://www.sleepycat.com)
• bzip2/libbzip2,由 Julian R. Seward 开发 (http://sources.redhat.com/bzip2)
• The OpenSSL Toolkit,由 OpenSSL Project 开发 (http://www.openssl.org)
• SSLeay,由 Eric Young 开发 (mailto:eay@cryptsoft.com)
• Expat,由 James Clark 开发 (http://www.libexpat.org)
上述各产品的授权协议,见 Ice 源码包。
Note:
文档中含有一些标注为 “
XREF
”的交叉引用,它们指向的是还未写成、但
将在未来加入的内容。
iii
目录
第 1 章引言 1
1.1 引言 1
1.2 Internet Communications Engine (Ice) 3
1.3 本书的篇章结构 4
1.4 排字约定 4
1.5 源码示例 5
1.6 联系作者 5
1.7 Ice 支持 5
第一部分 Ice 综述 7
第 2 章 Ice 综述 9
2.1 本章综述 9
2.2 Ice 架构 9
2.3 Ice 服务 21
2.4 Ice 在架构上提供的好处 23
2.5 与 CORBA 的对比 25
第 3 章 Hello World 应用 33
3.1 本章综述 33
3.2 编写 Slice 定义 33
3.3 编写使用 C++ 的 Ice 应用 34
3.4 编写使用 Java 的 Ice 应用 41
3.5 总结 48
iv Contents
第二部分 Ice 核心概念 51
第 4 章 Slice 语言 53
4.1 本章综述 53
4.2 引言 53
4.3 编译 54
4.4 源文件 57
4.5 词法规则 59
4.6 基本的 Slice 类型 62
4.7 用户定义的类型 63
4.8 接口、操作,以及异常 70
4.9 类 92
4.10 提前声明 106
4.11 模块 107
4.12 类型 ID 109
4.13 Object 上的操作 110
4.14 本地类型 111
4.15 Ice 模块 112
4.16 名字与作用域 113
4.17 元数据 117
4.18 使用 Slice 编译器 118
4.19 Slice 与 CORBA IDL 的对比 119
4.20 总结 127
第 5 章 一个简单文件系统的 Slice 定义 137
5.1 本章综述 137
5.2 文件系统应用 137
5.3 文件系统的 Slice 定义 138
5.4 完整的定义 140
Contents v
第 6 章 客户端的 Slice-to-C++ 映射 143
6.1 本章综述 143
6.2 引言 143
6.3 标识符的映射 144
6.4 模块的映射 144
6.5 Ice 名字空间 145
6.6 简单内建类型的映射 146
6.7 用户定义类型的映射 146
6.8 常量的映射 150
6.9 异常的映射 151
6.10 运行时异常的映射 154
6.11 接口的映射 154
6.12 操作的映射 161
6.13 异常处理 167
6.14 类的映射 169
6.15 slice2cpp 命令行选项 183
6.16 与 CORBA C++ 映射比较 184
第 7 章开发C++ 文件系统客户 189
7.1 本章综述 189
7.2 C++ 客户 189
7.3 总结 194
第 8 章 客户端的 Slice-to-Java 映射 197
8.1 本章综述 197
8.2 引言 197
8.3 标识符的映射 198
8.4 模块的映射 198
8.5 Ice Package 199
8.6 简单内建类型的映射 200
8.7 用户定义类型的映射 200
8.8 常量的映射 204
8.9 异常的映射 205
8.10 运行时异常的映射 206
8.11 接口的映射 207
8.12 操作的映射 213
8.13 异常处理 219
8.14 类的映射 220
8.15 Package 224
8.16 slice2java 命令行选项 225