使用zeroc ice框架java快速入门

一. 准备工作

1.下载ice3.6

官网下载地址
下载后点击安装

2. 配置环境

想必大家如果要用到ice,配置环境都是小菜一碟了,这里也就不多赘述,网上百度一堆.

ICE_HOME= C:\ZeroC\Ice-3.6.4

Path= %ICE_HOME%\bin;

cmd命令输入slice2java -v ,如果显示3.6.4代表配置ok

3. 编译插件slice2java

ICE因为支持多种语言之间的服务调用,所以它有一个后缀为.ice的文件,类似java的.java,通过slice2java编译生成相应的java文件,我们可以直接去.ice的目录下,通过cmd命令行

slice2java XXX.ice

来生成java文件, 我们也可以使用eclipse的插件.
eclipse – Help – Marketplace 搜索ice,第一个插件install
这里写图片描述

这里写图片描述
安装重启.

二. 开始编写程序

1. 建一个java工程

需要导入jar包:
ice-3.6.4.jar, build path , 这个jar包在ICE安装文件夹的lib文件夹中可以找到

2. 建一个slice文件夹,建Hello.ice

[["java:package:com.zgd.ice"]]  //父包结构
module service{     //包名        具体生成的包为: 父包结构 + 包名      

    interface HelloService{ //接口名  不能用Ice作为接口名的开头

        string sayHello(string s);  //类型都是小写开头,常用的有string,int,long

    };

};


注意事项: 不能用Ice作为接口名的开头
ice的注释跟c++一样

右单击工程ice_hello->Ice Builder->Add Ice Builder ,如果没有错误将会自动生成generated文件夹及内容,如下图所示:
这里写图片描述
这里写图片描述

3. 服务者

3.1 写一个服务接口的实现类,也叫servant,伺服者. 是具体实现接口方法的类,通常命名是接口名+I


package com.zgd.ice.service.impl;

import java.util.logging.Level;
import java.util.logging.Logger;

import com.zgd.ice.service._HelloServiceDisp;

import Ice.Current;

/**
 * @author Admin
 * 服务接口的具体实现类---servant伺服者
 */
public class HelloI extends _HelloServiceDisp {

    private Logger log = Logger.getLogger(this.getClass().getSimpleName());

    /**
    * 实现具体的服务接口中的方法
    * @param str
    * @param __current
    * @return 
    */
    @Override
    public String sayHello(String str, Current __current) {
        log.info("具体的服务接口实现类中的sayHello方法被调用了。。。");

        return "Hello world :"+str;
    }

}

3.2 写一个服务启动容器类


package com.zgd.ice.service.impl;

import java.util.logging.Level;
import java.util.logging.Logger;

import Ice.Communicator;
import Ice.Identity;
import Ice.Object;
import Ice.ObjectAdapter;
import Ice.Util;

/**
 * @author Admin
 * 
 * servant 服务启动容器
 */
public class HelloServer {

    private static Logger log = Logger.getLogger(HelloServer.class.getSimpleName());

    public static void main(String[] args) {

        // 通信器
        Communicator ic = null;
        // 初始化这个通信器
        ic = Util.initialize(args);
        // 创建ice适配器,将服务调用地址和服务映射起来
        // "HelloServiceAdapter"是适配器名, "default -p 1888"是服务调用的地址
        ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("HelloServiceAdapter","default -p 1888");
        // 将服务的具体实现类servant交给这个适配器
        Object servant = new HelloI();
        // "HelloIce"--服务接口在ice中注册名,转成唯一标识identity
        Identity id = Util.stringToIdentity("HelloIce");
        adapter.add(servant, id);
        // 激活这个适配器
        adapter.activate();

        log.info("server服务容器启动成功。。。");

    }

}

到这服务者这一方就已经搞定了, 可以看到是通过Communicator通信器创建了ObjectAdapter适配器,适配器来管理服务接口名 , 以及调用地址. 在客户端这边也同样是通过这个适配器来找到对应的调用地址

4. 客户端

另外建一个工程client

同样导入ice-3.6.4.jar

拷贝slice文件夹, 同样通过slice2java生成java类 , 感觉有点类似webService的使用方式,两边都生成接口文件

这里写图片描述

4.1 写一个客户端类

/**
 * 
 */
package com.zgd.ice.client;

import java.util.logging.Logger;

import com.zgd.ice.service.HelloServicePrx;
import com.zgd.ice.service.HelloServicePrxHelper;

import Ice.Communicator;
import Ice.ObjectPrx;
import Ice.Util;

/**
 * @author Admin 客户端
 */
public class HelloClient {

    private static Logger log = Logger.getLogger(HelloClient.class.getSimpleName());


    public static void main(String[] args) {

        log.info("客户端启动...");

        // 通信器
        Communicator ic = null;
        // 初始化这个通信器
        ic = Util.initialize(args);
        // 根据地址生成一个服务代理对象
        // HelloIce -- 服务端那边自己定义的名字
        ObjectPrx proxy = ic.stringToProxy("HelloIce:default -p 1888");
        // 转换成HelloService类型的代理服务
        HelloServicePrx helloServicePrx = HelloServicePrxHelper.checkedCast(proxy);
        //调用方法
        String str = helloServicePrx.sayHello("zgd");
        System.out.println(str);

    }
}

先运行服务端的main, 再运行client的main,结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zzzgd_666/article/details/80336892