1 系统环境
系统:Win7。
版本:JDK 1.8.0_91,ZeroC ICE 3.6.3。
2 基础
视频教程:https://www.chuanke.com/v6242976-184547-1010808.html
书籍:ZeroC Ice权威指南 高清 带索引书签目录 leader-us(著)
2.1 ICE基础
2.2 Slice
2.2.1 基本数据类型
类型 |
定义及范围 |
长度 |
bool |
true of false |
≥ 1bit |
byte |
[-128, 127] or [0, 255] |
≥ 8bit |
short |
[-2^15, 2^15-1] |
≥ 16bit |
int |
[-2^31, 2^31-1] |
≥ 32bit |
long |
[-2^63, 2^63-1] |
≥ 64bit |
float |
|
≥ 32bit |
double |
|
≥ 64bit |
string |
|
variable-length |
2.2.2 常量定义
用const修饰,如:
const bool trueOrFalse = true;
const byte b = 0x0f;
const string msg = “hello”;
const short s = 56;
const double PI = 3.1416;
enum Fruit {Apple, Orange}; (enum类型其实等价于int)
const Fruit favoriteFruit = Orange;
2.2.3 复合数据结构定义
类型 |
含义说明 |
enum |
枚举,如: enum Fruit {Apple, Orange} 或: enum Fruit {Apple = 5, Orange = 1} 实际上enum类型等价于int |
struct |
结构体,保护多个属性数据,类似与JavaBean。 struct Student { int id; string name; } |
sequence |
复合类型,支持 基本类型的集合 或者 复合类型的集合,如: sequence<Fruit> FruitPlatter; sequence<FruitPlatter> FruitBanquet; (集合的集合) |
dictionary |
Map类型,类似于Java HashMap,如: dictionary<long, Student> StudentMap |
例:
struct TimeOfDay {
shor hour; // 0 - 23
shor minute; // 0 - 59
shor second; // 0 - 59
};
2.2.4 异常定义
exception Error {}; // 可定义空异常
exception RangeError {
TimeOfDay errorTime;
TimeOfDay minTime;
TimeOfDay maxTime;
};
2.2.5 slice文件复用
使用#include关键字可引用其他slice文件:
#include common.slice
2.2.6 接口和方法定义
使用interface来申明接口(语法上跟java定义接口语法类似,只是没有public关键字),如:
interface Clock {
TimeOfDay getTime();
void setTime(TimeOfDay time);
}
Idempotent关键词:用该关键词修饰方法,指明该方法是幂等的,即调用1次和调用2次其结果是一样的。添加Idempotent修饰的方法,可以让ICE更好地实现“自动恢复错误”机制,即在某个Ice Object调用失败的情况下,ICE会再次调用有Idempotent修饰的方法,透明恢复故障,而在客户端看来则调用正常,没有感觉到ICE做了自动故障恢复操作。
3 实例
参考:http://blog.csdn.net/xuzheng_java/article/details/24459181
所需jar包:
ICE安装目录下lib目录里的ice-3.6.3.jar
3.1 Slice脚本
HelloWorldIDL.ice
[["java:package:myice.demo"]]
HelloWorldIDL.ice
[["java:package:myice.demo"]]
module test {
interface HelloWorldIDL {
string sayHello(string username);
};
};
说明:
Ø slice文件必须以ice为后缀。
Ø [["java:package:myice.demo"]]定义java父包路径,module表示模块名,真正生成的包路径为myice.demo.test。
Ø module定义不能缺少。
Ø 在定义语句的结尾(如右花括号)需要以分号结尾。
3.2 生成通用服务类
slice2java--output-dir D:\iceoutput D:\slice\HelloWorldIDL.ice
3.3 Server端编写服务实现类
Ø HelloWorldHandler.java
package server;
import Ice.Current;
import myice.demo.test._HelloWorldIDLDisp;
/**
* 接口处理类,继承生成的_HelloWorldIDLDisp类
*/
public class HelloWorldHandler extends