通信中间件ICE3.6.4版本安装以及demo测试

网络通信引擎( ice )为获取远程通信对象 提供了工具、API 和库支持。

第一次更新时间:2018/11/18 17:45

第二次更新时间:2018/11/19 14:30,修改部分内容。

下载3.6.4版本:

https://zeroc.com/download/Ice/3.6/Ice-3.6.4.msi

一直默认,即可,需要把demo 也安装上

配置环境变量

ICE_HOME:D:\ZeroC\Ice-3.6.4

Path:%ICE_HOME%/bin;

CLASSPATH:%ICE_HOME%\lib\Ice.jar;%ICE_HOME%\lib\Freeze.jar;%ICE_HOME%\lib\db.jar;

CMD输入:icegridnode –version

出现版本号即可,安装成功,3.6.4,配置环境完成。

运行简单demo

准备物料

  • 在eclipse中安装ice插件
  • 新建java工程,并且在其下,新建slice文件夹,便于分类,一般放入.ice文件。
  • jar包 ice-3.6.4.jaricebox-3.6.4.jaricegrid-3.6.4.jar

直接传送门,方可开启。

.ice文件

1
2
3
4
5
6
7
8
[["java:package:com.flyme.service"]] // 定义java包名  
module demo
{
interface Hello
{
string sayHello(string s);
};
};

.编写ICE的具体处理业务的类,ICE叫做Servant。起名规则一般是.ice文件中定义的接口名称后边加上一个I。

HelloI.java

1
2
3
4
5
6
7
8
9
public class HelloI extends _HelloDisp {

@Override
public String sayHello(String s, Current __current) {
// TODO Auto-generated method stub
return "Hello :" + s;
}

}

服务端Service.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public class Service {
public static void main(String[] args) {
int status = 0;
// Communicator实例,是ice run time的主句柄
Ice.Communicator ic = null;
try {
System.out.println("Server starting...");
// 调用Ice.Util.Initialize()初始化Ice run time
ic = Ice.Util.initialize(args);
// 创建一个对象适配器,传入适配器名字和在12000端口处接收来的请求
Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("HelloAdapter", "default -p 12000");
// 实例化一个PrinterI对象,为Printer接口创建一个servant
Ice.Object object = new HelloI();
// 调用适配器的add,告诉它有一个新的servant,传递的参数是刚才的servant,这里的“hello”是Servant的名字
adapter.add(object, ic.stringToIdentity("hello"));
// 调用适配器的activate()方法,激活适配器。被激活后,服务器开始处理来自客户的请求。
adapter.activate();
System.out.println("ICE服务端已经准备完毕");
System.out.println("Server start success.");
// 这个方法挂起发出调用的线程,直到服务器实现终止为止。或我们自己发出一个调用关闭。
ic.waitForShutdown();
} catch (Ice.LocalException e) {
e.printStackTrace();
status = 1;
} catch (Exception e) {
System.err.println(e.getMessage());
status = 1;
}
if (ic != null) {
try {
ic.destroy();
} catch (Exception e) {
System.err.println(e.getMessage());
status = 1;
}
}
System.exit(status);
}
}

客户端Client.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Client {
public static void main(String[] args) {
int status = 0;
// Communicator实例
Ice.Communicator ic = null;
try {
// 调用Ice.Util.Initialize()初始化Ice run time
ic = Ice.Util.initialize(args);
// 获取远地打印机的代理
Ice.ObjectPrx base = ic.stringToProxy("hello:default -p 12000");
// 将上面的代理向下转换成一个Printer接口的代理
HelloPrx hello = HelloPrxHelper.checkedCast(base);
// 如果转换成功
if (hello == null) {
throw new Error("Invalid proxy");
}
// 调用这个代理,将字符串传给它
String s = hello.sayHello("World!");
System.out.println(">>" + s);
} catch (Ice.LocalException e) {
e.printStackTrace();
status = 1;
} catch (Exception e) {
System.err.println(e.getMessage());
status = 1;
}
if (ic != null) {
try {
ic.destroy();
} catch (Exception e) {
System.err.println(e.getMessage());
status = 1;
}
}
System.exit(status);
}

}

最后,我们先在Eclipse中运行我们自己编Service.java代码,然后再运行client.java代码。然后我们就可以在控制台看见自己在HelloI中输出的语句了

如果测试第二次,显示端口占用,在idea中杀掉进程,或者打开cmd,系统当前所有的端口使用情况

1
netstat -ano

杀掉进程

1
taskkill /f /t /im "进程id或者进程名称"

又可以进行测试了