HelloIce: 开发环境Zeroc3.5.1,Eclipse
(1) 定义slice文件 hello.ice
module demo{
interface HelloIce{
string hello();
};
};
Eclipse 自动生成转换后的Java文件。
(2) 服务实现 Impl
package com.demo.ice;
import Ice.Current;
import demo._HelloIceDisp;
public class HelloIceImpl extends _HelloIceDisp{
@Override
public String hello(Current __current) {
// TODO Auto-generated method stub
return "Hello Ice";
}
}
(3) HelloIce服务器Server实现
package com.demo.ice;
public class HelloIceServer {
public static void main(String[] args){
int status =0;
Ice.Communicator ic=null;
try{
//初始化Communicator连接对象,负责处理客户端的连接,可以进行设置,如客户端连接数量
ic = Ice.Util.initialize(args);
// 创建Adapter对象,理解为一个适配器,只要连接这个endpoints 都返回一个adapter对象,广义的
Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("HelloAdapter", "default -p 10000");
// 实例化一个服务对象,具体的服务对象
HelloIceImpl servant = new HelloIceImpl();
HelloIceImpl servant1 = new HelloIceImpl();
//将服务对象添加到adapter中,并设置ID进行关联,很多个服务对象,必须确定是哪一个对象
adapter.add(servant, Ice.Util.stringToIdentity("HelloService"));
adapter.add(servant1, Ice.Util.stringToIdentity("HelloService1"));
// 启动adapter
adapter.activate();
//服务保持监听状态,直到退出
System.out.println("Server started");
// if(ic.)
ic.waitForShutdown();
}catch(Exception e){
e.printStackTrace();
status=1;
}finally{
if (ic!=null){
ic.destroy();
}
}
System.exit(status);
}
}
(4) HelloIce Client实现
package com.demo.ice;
import demo.HelloIcePrx;
import demo.HelloIcePrxHelper;
public class HelloIceClient {
public static void main(String[] args) {
int status =0;
Ice.Communicator ic=null;
try{
//初始化Communicator连接对象,负责处理客户端的连接,可以进行设置,如客户端连接数量
ic = Ice.Util.initialize(args);
// 客户端代理proxy对象,访问确定的endpoints,返回的对象是广义的
Ice.ObjectPrx base = ic.stringToProxy("HelloService:default -p 10000");
// 类似于强制转换, 转换为具体的对象。
HelloIcePrx proxy = HelloIcePrxHelper.checkedCast(base);
if(proxy==null)
{
throw new Error("Invalid proxy");
}
// 实际上是调用服务器端的方法。
String retMsg = proxy.hello();
System.out.println(retMsg);
}catch(Exception e){
e.printStackTrace();
status=1;
}finally {
if (ic!= null){
ic.destroy();
}
}
System.exit(status);
}
}
(5)运行结果
server:
Server started
Client
Hello Ice
(6) 代码组织图片
实现过程中的一些代码已有注释,具体的分析在后面章节中进行。