IceDemos:环境搭建和HelloWorld

搭建ICE环境

1、linux下源码编译安装ice3.4.2,
参考帖子:
http://www.php230.com/compile-and-install-linux-environment-ice.html
http://blog.csdn.net/wxl1986622/article/details/7005031
注意:java版本安装时,如果报错put()函数冲突,找到/opt/Ice-3.4.2/java/src/IceInternal/OutgoingConnectionFactory.java, 修改内部类MultiHashMap的put()函数的函数名为put_aaa(),把用到put()函数的put改成put_aaa()。_connections和_connectionsByEndpoint这两对象的put方法改名。重新make即可
2、准备Eclipse和JDK环境
3、安装Ice for Eclipse插件(Eclipse里傻瓜安装)
http://www.51testing.com/html/01/610901-851751.html
http://www.ithao123.cn/content-553523.html

Ice的HelloWorld

大致的流程是:
1、ice开发从写slice接口开始。
2、用iceBuilder插件在eclipse中生成java端的代码
3、实现MyServiceImpl,MyServerStarter和MyClient类。
参考帖子:http://www.tuicool.com/articles/3MnU32

一个例子:
1、写接口myservice.ice:

[["java:package:com.my"]]
module demo{
    interface MyService{
        string hello();
    };
};

2、用iceBuilder插件在eclipse中生成ice的各种类。
3、写服务端代码MyServiceImpl:

package service;

import com.my.demo._MyServiceDisp;

import Ice.Current;

public class MyServiceImpl extends _MyServiceDisp{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    public String hello(Current __current) {
        return "Hello World";
    }
}

4、写服务的启动类:

package service;

public class MyServiceStarter {

    public static void main(String[] args){
        int status = 0;
        Ice.Communicator ic = null;
        try{
            ic = Ice.Util.initialize(args);
            Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("MyServiceAdapter", "default -p 10000");
            MyServiceImpl servant = new MyServiceImpl();
            adapter.add(servant, Ice.Util.stringToIdentity("MyService"));
            adapter.activate();
            System.out.print("server started.");
            ic.waitForShutdown();
        } catch(Exception e){
            e.printStackTrace();
            status = 1;
        } finally{
            if(ic != null){
                ic.destroy();
            }
        }
        System.exit(status);
    }

}

5、写客户端代码

package service;

import com.my.demo.MyServicePrx;
import com.my.demo.MyServicePrxHelper;

public class MyClient {

    public static void main(String[] args){
        int status = 0;
        Ice.Communicator ic = null;
        try{
            ic = Ice.Util.initialize(args);
            Ice.ObjectPrx base = ic.stringToProxy("MyService:default -p 10000");
            MyServicePrx prxy = MyServicePrxHelper.checkedCast(base);
            if(prxy == null){
                throw new Error("Invaild proxy.");
            }
            String rt = prxy.hello();
            System.out.println(rt);
        }catch(Exception e){
            e.printStackTrace();
            status = 1;
        } finally{
            if(ic != null){
                ic.destroy();
            }
        }
        System.exit(status);

    }

}

Ice的基本概念

服务端:ice Object、servant和Object Adapter
客户端:ice Proxy

endPoint(端点):由服务端所使用的通信协议、IP地址、端口等组成,如:default -p 10000 -h 192.168.1.88

Proxy有Direct ProxyIndirect Proxy两种,Direct Proxy是Proxy直接绑定某远端的Object的访问地址如SimplePrinter:default -p 10000;Indirect Proxy是通过寻址服务Location Service来获取IceObject的通信地址后,再于IceObject进行连接。写法如:SimplePrinter@PrinterAdapter

Ice.Current:记录网络连接上下文信息
Ice.Internal.Incoming:RPC网络通道
communicator:处理通信实现RPC

IceBox的helloworld

IceBox就像Tomcat一样,用配置文件去描述服务的各种配置,启动Ice服务框架。
serviceImpl实现类除了继承_MyServiceDisp类外,还要implements IceBox.Service接口

Ice Registry和LocatorService服务

Reference:
1. ZeroCIce权威指南 / Leader-us著. –北京:电子工业出版社,2015.6

你可能感兴趣的:(IceDemos:环境搭建和HelloWorld)