使用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,结果:
这里写图片描述

zero ICE快速入门文档, ice是最优秀的rpc框架。 4、开发服务端代码如下 步骤一:编写Servant类即带有Disp的存根文件也就是说继承_HelloWorldDisp 这个类,这个类是个抽象类定义如下: public abstract class _HelloWorldDisp extends Ice.ObjectImpl implements HelloWorld{} servant类是ice所定义的接口,在服务器端的实现类。我们在该类中可以编写服务器端对请求的具体处理。 代码如下: package myHelloWorld.server; import Ice.Current; import myHelloWorld._HelloWorldDisp; public class HelloWorld_gaojs extends _HelloWorldDisp{ private static final long serialVersionUID = 1L; public void say(String s, Current __current) { System.out.println("Hello World!"+" the string s is " + s); } } 步骤二:创建远程的服务器类 package myHelloWorld.server; public class ServerStart { /** * @param args */ public static void main(String[] args) { int status = 0; // Communicator实例,是ice run time的主句柄 Ice.Communicator ic = null; try { // 调用Ice.Util.Initialize()初始化Ice run time System.out.println("初始化ice run time..."); ic = Ice.Util.initialize(args); // args参数可传可不传 // 创建一个对象适配器,传入适配器名字和在10000端口处接收来的请求 System.out.println("创建对象适配器,监听端口10000..."); Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints( "SimplePrinterAdapter", "default -p 10000"); // 实例化一个PrinterI对象,为Printer接口创建一个servant System.out.println("为接口创建servant..."); Ice.Object object = new HelloWorld_gaojs(); // 调用适配器的add,告诉它有一个新的servant,传递的参数是刚才的servant,这里的“gaojs”是Servant的名字 System.out.println("对象适配器加入servant..."); adapter.add(object, Ice.Util.stringToIdentity("gaojs")); // 调用适配器的activate()方法,激活适配器。被激活后,服务器开始处理来自客户的请求。 System.out.println("激活适配器,服务器等待处理请求..."); adapter.activate(); // 这个方法挂起发出调用的线程,直到服务器实现终止为止。或我们自己发出一个调用关闭。 ic.waitForShutdown(); } catch (Ice.LocalException e) { e.printStackTrace(); status = 1; } catch (Exception e) { e.printStackTrace(); status = 1; } finally { if (ic != null) { ic.destroy(); } } System.exit(status); } }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值