最新稳定版本:

http://www.zeroc.com/download.html

由于我自己的平台是CentOS release 5.3 (Final),java version "1.6.0_01"

所以下载的是:

http://www.zeroc.com/download/Ice/3.4/Ice-3.4.2-rhel5-x86_64-rpm.tar.gz

解开之后:

-rw-r--r-- 1 222 mysql 1341046 Jun 4 2010 db48-4.8.30-1ice.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 51886 Jun 4 2010 db48-devel-4.8.30-1ice.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 1180156 Jun 4 2010 db48-java-4.8.30-1ice.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 120935 Jun 4 2010 db48-utils-4.8.30-1ice.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 91574 Jun 16 05:36 ice-3.4.2-1.rhel5.noarch.rpm

-rw-r--r-- 1 222 mysql 531513 Jun 16 05:36 ice-c++-devel-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 2837924 Jun 16 05:36 ice-java-3.4.2-1.rhel5.noarch.rpm

-rw-r--r-- 1 222 mysql 282937 Jun 16 05:36 ice-java-devel-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 3371844 Jun 16 05:36 ice-libs-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 200760 Jun 16 05:36 ice-php-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 65172 Jun 16 05:36 ice-php-devel-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 1069585 Jun 16 05:36 ice-python-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 32678 Jun 16 05:36 ice-python-devel-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 238228 Jun 16 05:36 ice-ruby-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 25797 Jun 16 05:36 ice-ruby-devel-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 3301850 Jun 16 05:36 ice-servers-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 175745 Jun 16 05:36 ice-sqldb-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 4545116 Jun 16 05:36 ice-utils-3.4.2-1.rhel5.x86_64.rpm

-rw-r--r-- 1 222 mysql 97474 Jun 4 2010 mcpp-devel-2.7.2-2ice.rhel5.x86_64.rpm

由于需要c和java的包:

所以我们仅安装:

irpm -ivh ce-3.4.2-1.rhel5.noarch.rpm

irpm -ivh db48*

rpm -ivh ice-libs-3.4.2-1.rhel5.x86_64.rpm

rpm -ivh ice-utils-3.4.2-1.rhel5.x86_64.rpm

rpm -ivh mcpp-devel-2.7.2-2ice.rhel5.x86_64.rpm

rpm -ivh ice-servers-3.4.2-1.rhel5.x86_64.rpm

rpm -ivh ice-c++-devel-3.4.2-1.rhel5.x86_64.rpm

rpm -ivh ice-java*

安装之后的Ice相关路径:

在/usr/bin/下有:

slice2cpp

slice2freeze

slice2freezej

slice2html

slice2java

存储于 /usr/share/java/下 有:

nt-ice-3.4.2.jardb-4.8.30.jar Freeze.jar IceGridGUI-3.4.2.jar Ice.jar

ant-ice.jar Freeze-3.4.2.jar Ice-3.4.2.jar IceGridGUI.jar

相关的Ice的库存储于/usr/lib下.

一切就绪,我们开始Ice之旅的Slice地带:

首先,我们建立一个demo.ice的文件:

Java代码

module Demo{

interfacetest{

string execute(string mth,string cmd);

};

};

注意:string确实是小写(java开发人员注意)

module Demo{

interfacetest{

string execute(string mth,string cmd);

};

};

module Demo{

interface test{

string execute(string mth,string cmd);

};

};

注意,后两个"}"一定要包含";",否则slice2java就会过不去,赫赫

执行:

slice2java demo.ice

会在当前目录产生一个Demo目录,目录下自动生成:

-rw-r--r-- 1 root root 1021 Dec 1 11:03 Callback_test_execute.java

-rw-r--r-- 1 root root 2450 Dec 1 11:03 _testDelD.java

-rw-r--r-- 1 root root 693 Dec 1 11:03 _testDel.java

-rw-r--r-- 1 root root 2069 Dec 1 11:03 _testDelM.java

-rw-r--r-- 1 root root 4311 Dec 1 11:03 _testDisp.java

-rw-r--r-- 1 root root 1011 Dec 1 11:03 testHolder.java

-rw-r--r-- 1 root root 617 Dec 1 11:03 test.java

-rw-r--r-- 1 root root 621 Dec 1 11:03 _testOperations.java

-rw-r--r-- 1 root root 602 Dec 1 11:03 _testOperationsNC.java

-rw-r--r-- 1 root root 8187 Dec 1 11:03 testPrxHelper.java

-rw-r--r-- 1 root root 707 Dec 1 11:03 testPrxHolder.java

-rw-r--r-- 1 root root 1365 Dec 1 11:03 testPrx.java

到目前为止,demo.ice所以Ice接口部分的定义以及相关依赖都已经自动生成.

我们要实现自己的execute方法,覆盖testPrx.java的同名方法:

Java代码

//TestImp.java

packageDemo;

importIce.Current;

publicclassTestImpextends_testDisp{

publicString execute(String mth, String cmd, Current __current) {

// TODO Auto-generated method stub

returnmth+cmd;

}

}

//TestImp.java

packageDemo;

importIce.Current;

publicclassTestImpextends_testDisp{

publicString execute(String mth, String cmd, Current __current) {

// TODO Auto-generated method stub

returnmth+cmd;

}

}

//TestImp.java

package Demo;

import Ice.Current;

public class TestImp extends _testDisp{

public String execute(String mth, String cmd, Current __current) {

// TODO Auto-generated method stub

return mth+cmd;

}

}

看到了,就是这么简单,仅仅覆盖_testDisp里面的抽象方法,实现把我们自己的实现代码填充到里面就行了.

之后,我们建立一个Server服务在10000端口进行侦听。

Java代码

//Server.java

packageDemo;

publicclassServer {

publicstaticvoidmain(String[] args) {

intstatus =;

Ice.Communicator ic =null;

try{

ic = Ice.Util.initialize(args);

Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(

"TestAdapter","default -p 10000");

Ice.Object object =newTestImp();

adapter.add(object, ic.stringToIdentity("TestAdapter"));

adapter.activate();

ic.waitForShutdown();

}catch(Ice.LocalException e) {

e.printStackTrace();

status =1;

}catch(Exception e) {

System.err.println(e.getMessage());

status =1;

}

if(ic !=null) {

// Clean up

//

try{

ic.destroy();

}catch(Exception e) {

System.err.println(e.getMessage());

status =1;

}

}

System.exit(status);

}

}

//Server.java

packageDemo;

publicclassServer {

publicstaticvoidmain(String[] args) {

intstatus =0;

Ice.Communicator ic = null;

try{

ic = Ice.Util.initialize(args);

Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(

"TestAdapter","default -p 10000");

Ice.Object object = newTestImp();

adapter.add(object, ic.stringToIdentity("TestAdapter"));

adapter.activate();

ic.waitForShutdown();

} catch(Ice.LocalException e) {

e.printStackTrace();

status = 1;

} catch(Exception e) {

System.err.println(e.getMessage());

status = 1;

}

if(ic !=null) {

// Clean up

//

try{

ic.destroy();

} catch(Exception e) {

System.err.println(e.getMessage());

status = 1;

}

}

System.exit(status);

}

}

//Server.java

package Demo;

public class Server {

public static void main(String[] args) {

int status = 0;

Ice.Communicator ic = null;

try {

ic = Ice.Util.initialize(args);

Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(

"TestAdapter", "default -p 10000");

Ice.Object object = new TestImp();

adapter.add(object, ic.stringToIdentity("TestAdapter"));

adapter.activate();

ic.waitForShutdown();

} catch (Ice.LocalException e) {

e.printStackTrace();

status = 1;

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

if (ic != null) {

// Clean up

//

try {

ic.destroy();

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

}

System.exit(status);

}

}

貌似很复杂,其实里面的很多内容都是固定格式,有些部分需要固定和约定。其中上述红色部分是修改部分。

到目前为止,我们已经完成了大部分工作,我们还需要建一个客户端来对服务端的方法进行调用。

Java代码

packageDemo;

publicclassClient {

publicstaticvoidmain(String[] args) {

intstatus =;

Ice.Communicator ic =null;

try{

ic = Ice.Util.initialize(args);

// Ice.ObjectPrx base = ic

// .stringToProxy("SimplePrinter:tcp -h 172.17.12.101 -p 10000");

Ice.ObjectPrx base = ic

.stringToProxy("TestAdapter:default -p 10000");

testPrx test = testPrxHelper.checkedCast(base);

if(test ==null)

thrownewError("Invalid proxy");

System.out.println(test.execute("My first Ice ","demo"));

//System.out.println("ok");

}catch(Ice.LocalException e) {

e.printStackTrace();

status =1;

}catch(Exception e) {

System.err.println(e.getMessage());

status =1;

}

if(ic !=null) {

// Clean up

//

try{

ic.destroy();

}catch(Exception e) {

System.err.println(e.getMessage());

status =1;

}

}

System.exit(status);

}

}

packageDemo;

publicclassClient {

publicstaticvoidmain(String[] args) {

intstatus =0;

Ice.Communicator ic = null;

try{

ic = Ice.Util.initialize(args);

// Ice.ObjectPrx base = ic

// .stringToProxy("SimplePrinter:tcp -h 172.17.12.101 -p 10000");

Ice.ObjectPrx base = ic

.stringToProxy("TestAdapter:default -p 10000");

testPrx test = testPrxHelper.checkedCast(base);

if(test ==null)

thrownewError("Invalid proxy");

System.out.println(test.execute("My first Ice ","demo"));

//System.out.println("ok");

} catch(Ice.LocalException e) {

e.printStackTrace();

status = 1;

} catch(Exception e) {

System.err.println(e.getMessage());

status = 1;

}

if(ic !=null) {

// Clean up

//

try{

ic.destroy();

} catch(Exception e) {

System.err.println(e.getMessage());

status = 1;

}

}

System.exit(status);

}

}

package Demo;

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("SimplePrinter:tcp -h 172.17.12.101 -p 10000");

Ice.ObjectPrx base = ic

.stringToProxy("TestAdapter:default -p 10000");

testPrx test = testPrxHelper.checkedCast(base);

if (test == null)

throw new Error("Invalid proxy");

System.out.println(test.execute("My first Ice ", "demo"));

//System.out.println("ok");

} catch (Ice.LocalException e) {

e.printStackTrace();

status = 1;

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

if (ic != null) {

// Clean up

//

try {

ic.destroy();

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

}

System.exit(status);

}

}

也貌似很复杂吧,其实不然,也很简单,同样包含很多固定格式。其中

Java代码

System.out.println(test.execute("my first Ice ","demo"));

System.out.println(test.execute("my first Ice ","demo"));

System.out.println(test.execute("my first Ice ", "demo"));

是我们自己调用的逻辑。

赫赫,大功告成了,现在我们开始运行Server,再运行Client看到了么?

"My first Ice demo"

得到这样的结果,基本Ice之旅的Java部分简单实例我们基本完成。

Ice的性能和稳定性远超于我们的想象,skype知道么?其部分通讯架构就是采用的Ice.

ice java配置_ICE 安装方法相关推荐

  1. 三星java安装_三星S3930C 电脑下载java后直接安装方法总结

    综合各位前辈的经验,总结三星S3930C 电脑下载java后直接安装方法: 1.S3930C的java兼容性不错,部分java需要改键值.程序可以从各大手机网站下载,乐讯上S3930C的java比较集 ...

  2. mysql安装时方法及配置_MySQL安装方法及简单配置

    1.MySQL安装方法简介 1.rpm包yum安装 2.通用二进制包安装 3.源码编译安装 注意:实验所采用的系统平台为:RHEL6.4 2.rpm install 挂载光盘设置好系统的yum源,直接 ...

  3. java配置pom安装依赖包,Maven pom.xml 添加本地jar包依赖以及打包方法

    Maven项目打包时,如果遇到需要添加本地jar包依赖的时候,可以选择两种方法: 1. 安装到本地仓库 第一种方法比较常规,适用于需要添加的jar包也是由maven项目导出,含有pom文件的时候.只需 ...

  4. HTML学习笔记(二)(含vscode配置html_vscode安装方法及常用插件)

    hey,guys.我是poem23. 本篇文章会介绍Visual Studio Code的以及关于html的插件下载. vsCode是一款轻量级的HTML编码工具. 如果你只是想试试用HTML编译,这 ...

  5. 参数注入:使用java配置参数的方法,springboot的方法

    文章目录 把需要需要注入的参数,写到默认文件application.properties: 为需要注入的数据专门写一个类: 定义一个使用该数据的方法,实际上应该可以和上面的那个类合并,只不过一般数据封 ...

  6. 参数注入:不使用xml,使用java配置参数的方法,以前的spring的方法

    文章目录 在POM文件里添加依赖 在resource文件夹里添加.properties 在config文件夹里建立一个类处理该数据,其他地方就可以直接使用这个累了 在某个controller里面调用这 ...

  7. mac电脑配置java环境变量_教你在Mac系统中配置JAVA环境变量的方法

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.下面向大家介绍Mac电脑上如何配置Java ...

  8. CentOS-7.0.中安装与配置Tomcat-7的方法

    CentOS-7.0.中安装与配置Tomcat-7的方法 原创 2014年11月24日 23:38:36 72472 安装说明  安装环境:CentOS-7.0.1406 安装方式:源码安装  软件: ...

  9. xp java配置_WinXP系统Java配置环境变量的方法

    谈起Java环境变量我想大多数编程人员都知道,因为我们想要进行编程就必须先配置它,不过不少用户不知道WinXP系统Java怎么配置环境变量,为此小编赶紧整理了一篇WinXP系统Java配置环境变量的方 ...

最新文章

  1. 大数据之路- Hadoop环境搭建(Linux)
  2. VTK:Filtering之SurfaceFromUnorganizedPointsWithPostProc
  3. 神经网络前向引擎内存复用技术(基于caffe)
  4. Java基础软件的安装及配置及Javascript的运行
  5. 基于PyTorch的CV框架,北大学生出品TorchCV
  6. 算法学习笔记:对指定金额计算最少钞票数
  7. php -- PDO异常处理
  8. 搭建 Apache Jmeter 分布式压测与监控
  9. 带你一起来理解:函数去抖(debounce)和 函数节流(throttle)的作用和区别
  10. Unity3D游戏开发之MMD For Unity插件研究
  11. mysql卸载删除注册表
  12. 集线器、交换机、网桥区别
  13. 刘宇凡:解读微信朋友圈策略调整的重要目的
  14. 支付宝营销策略效果分析 A/Btest
  15. 是java运行时环境的缩写,java运行环境的英文缩写
  16. stm32F1规避浮点运算
  17. [LOJ6515]「雅礼集训 2018 Day10」贪玩蓝月
  18. 演讲者模式投影到幕布也看到备注_ppt备注怎么用在放映时怎么可以不在投影仪上显示...
  19. pandas删除满足多条件的行
  20. Pandas的常用操作(一)

热门文章

  1. sklearn机器学习(五)线性回归算法测算房价
  2. 【多模态】Multi-modal chemical information reconstruction from images and texts for exploring the
  3. 总结5个比较好用的app开发工具
  4. numpy.triu、numpy.triu_indices、np.triu_indices_from函数使用
  5. Mysql之子查询20221016
  6. 老总让做后台接口监控,我却开发了一个App
  7. 14、pyspider框架
  8. 电脑桌面图标变白恢复方法
  9. 营养百科之莲藕蜂蜜水
  10. 有趣的黑掉卫星Hack-A-Sat CTF比赛——模拟卫星视角beckley