一、开发环境与工具
1、Eclipse Mars.1 (4.5.1)
2、Windows OS
3、下载Ice-3.6.1.msi并直接安装即可。官网地址:https://zeroc.com/download/Ice/3.6/ 。
配置环境变量:
在Path里添加:%ICE_HOME%\bin;
最后,在命令窗口输入:slice2java -v 如果输出版本号表示安装成功。
4、安装Eclipse插件Ice Builder,如下图所示:
如下图所示,如果出现Ice Builder表示安装成功,这时设置SDK Location为上面的安装路径即可。
二、开始编写程序
1、建一个Java工程:ice_hello
2、建立slice文件夹,并在其目录下建立:Hello.ice,内容如下:
[["java:package:com.rain.service"]] // 定义java包名
module demo
{
interface Hello
{
string sayHello(string s);
};
};
右单击工程ice_hello->Ice Builder->Add Ice Builder ,如果没有错误将会自动生成generated文件夹及内容,如下图所示:
3、写一个服务接口实现类,代码如下:
package com.rain.service.demo.impl;
import com.rain.service.demo._HelloDisp;
import Ice.Current;
public class HelloI extends _HelloDisp {
private static final long serialVersionUID = -3966457693815687559L;
@Override
public String sayHello(String s, Current __current) {
return "Hello " + s;
}
}
4、写一个服务启动类,代码如下:
package com.rain.service.demo.server;
import com.rain.service.demo.impl.HelloI;
public class Server {
public static void main(String[] args) {
int status = 0;
Ice.Communicator ic = null;
try{
System.out.println("Server starting...");
ic = Ice.Util.initialize(args);
Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("HelloAdapter", "default -p 10000");
Ice.Object object = new HelloI();
adapter.add(object, ic.stringToIdentity("hello"));
adapter.activate();
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);
}
}
5、写一个客户端类,代码如下:
package com.rain.service.demo.client;
import com.rain.service.demo.HelloPrx;
import com.rain.service.demo.HelloPrxHelper;
public class Client {
public static void main(String[] args) {
int status = 0;
Ice.Communicator ic = null;
try{
ic = Ice.Util.initialize(args);
Ice.ObjectPrx base = ic.stringToProxy("hello:default -p 10000");
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);
}
}
6、程序包结构如下图所示:
7、测试
启动Server类-->启动Client类-->控制台输出:Hello World!