使用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,結果: 

è¿éåå¾çæè¿°

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章