六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 118|回复: 0

Ubuntu下搭建 ice 开发环境

[复制链接]

升级  90%

13

主题

13

主题

13

主题

童生

Rank: 1

积分
45
 楼主| 发表于 2013-1-28 16:39:07 | 显示全部楼层 |阅读模式
Ubuntu上安装Ice 3.3很方便 ,软件源里有,直接apt-get就可以
要安装Ice 3.4需要自己下载源码,编译安装,安装之前要安装Ice所依赖的软件包
 
apt-get install libdb4.6++-dev libbz2-dev bzip2 libssl-dev libreadline5-dev libexpat1-dev mcppI 然后:下载Ice-3.4.1.tar.gz
 下载后安装解压,进入cpp目录,运行make ,make install 进行安装,默认安装路径在/opt/Ice-3.4.1
  安装完后添加环境变量:
 
vi  ~/.bashrc   添加如下内容:
 
  export ICE_HOME=/opt/Ice-3.4.1  export PATH=$ICE_HOME/bin:$PATH  export LD_LIBRARY_PATH=$ICE_HOME/lib:$LD_LIBRARY_PATH   然后你就可以使用如下命令去生成代码了:
 
slice2cpp      slice2freeze   slice2html     slice2php      slice2rbslice2cs       slice2freezej  slice2java     slice2py 如果我们使用java开发ice接口需要Ice.jar,进入java目录,运行ant build.xml ,会在lib目录下生成Ice.jar
如果我们使用python开发ice接口需要安装ice-python 使用命令:sudo apt-get install ice-python 安装
下面来做一个小例子:
slice文件:
 
module com{module demo{module mingfei{module core{module generated{struct Person{string name;int age;};sequence<Person> personList;dictionary<string,Person> personMap;interface HelloMingFei{string hello(string name);personList getPersonList();personMap getPersonMap();};};};};};}; 我们使用python开发server端:
server.py:
 
import sys,traceback,Ice,IcePyIce.loadSlice("Test.ice")import com.demo.mingfei.core.generated  class  HelloMingFeiI(com.demo.mingfei.core.generated.HelloMingFei ):    def hello(slef ,s,current=None):        return "hello %s" % s     def getPersonList(self,current=None):        p1 = com.demo.mingfei.core.generated.Person("mingfei",1)        p2 = com.demo.mingfei.core.generated.Person("mingtao",2)        personList = [p1,p2]        return personList    def getPersonMap(self,current=None):        p1 = com.demo.mingfei.core.generated.Person("mingfei",1)        personDict = {"mingfei":p1}        p2 = com.demo.mingfei.core.generated.Person("mingtao",2)        personDict["mingtao"] = p2        return personDict        status = 0ice = Nonetry:    ic = Ice.initialize(sys.argv)    adapter = ic.createObjectAdapterWithEndpoints("HelloMingFeiAdapter","default -p 10000")    objectI = HelloMingFeiI()    adapter.add(objectI,ic.stringToIdentity("HelloMingFei"))    adapter.activate()    ic.waitForShutdown()except:    traceback.print_exc()    status = 1if ic :    #Clean up    try:        ic.destroy()    except:        traceback.print_exc()        status = 1    sys.exit(status) 使用java来开发client:
 首先使用slice2java Test.ice 生成java代码
 Client.java:
package com.demo.mingfei.core.generated;public class Client {public static void main(String [] args){int status = 0;          Ice.Communicator ic = null;          try {              ic = Ice.Util.initialize(args);              Ice.ObjectPrx base = ic.stringToProxy("HelloMingFei:default -p 10000");              HelloMingFeiPrx printer = HelloMingFeiPrxHelper.checkedCast(base) ;            if (printer == null) {                  System.out.println("invalid proxy");              }              String out = printer.hello("mingfei");            System.out.println(out);          } catch (Ice.LocalException e) {              e.printStackTrace();              status = 1;          } catch (Exception e) {              System.err.print(e.getMessage());              status = 1;          } finally {              if (ic != null) {                  ic.destroy();              }          }          System.exit(status);  }}再讲一讲使用java开发server: 首先使用slice2java Test.ice 生成java代码package com.demo.mingfei.core.generated;import java.util.HashMap;import java.util.Map;import Ice.Current;public class Server extends _HelloMingFeiDisp{@Overridepublic Person[] getPersonList(Current current) {Person p1 = new Person();p1.name = "mingtao";p1.age = 2;return new Person[]{p1};}@Overridepublic Map<String, Person> getPersonMap(Current current) {Person p1 = new Person();p1.name = "mingtao";p1.age = 2;Person p2 = new Person();p2.name = "mingfei";p2.age = 2;Map<String,Person> map = new HashMap<String,Person>();map.put("mingtao", p1);map.put("mingfei", p2);return map;}@Overridepublic String hello(String name, Current current) {// TODO Auto-generated method stubreturn "hello " + name;}public static void main(String [] args){int status = 0;       Ice.Communicator ic = null;       try {           ic = Ice.Util.initialize(args);// 初始化参数           Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(                   "HelloMingFeiAdapter", "default -p 10000");// 创造对象适配器           Ice.Object objcet = new Server();// 创建servant对象           adapter.add(objcet, Ice.Util.stringToIdentity("HelloMingFei"));// 适配器添加一个新的servant,给servant对象取个名字           adapter.activate();           System.out.println("connection success");           ic.waitForShutdown();       } catch (Ice.LocalException e) {           e.printStackTrace();           status = 1;       } catch (Exception e) {           System.err.print(e.getMessage());           status = 1;       } finally {           if (ic != null) {               ic.destroy();           }       }       System.exit(status);  }}使用python开发client:
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表