使用zeroc ice框架java快速入门(下载的Ice-3.6.4mis安装后有demo)

一. 准备工作
1.下载ice3.6
官网下载地址  http://download.zeroc.com/Ice/3.6/Ice-3.6.4.msi
下载后点击安装即可

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
1
来生成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,伺服者. 是具体实现接口方法的类,通常命名是接口名+Impl

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,结果: 

è¿éåå¾çæè¿°

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值