Ice是一种面向对象的中间间平台,入门ice,简单的HelloWorld是必不可少的。

转载请注明http://www.cnblogs.com/zrtqsk/p/3745286.html,谢谢。

一、写一个ice定义

  ice用来定义接口、程序骨架的,方便远程调用。首先我们要使用ice专属的slice语言写一个ice定义。如下:

file_name:HelloWorld.ice

module myHelloWorld{interface HelloWorld{void say(string s);};
};

module相当于java中的包,是ice定义中必不可少的。

二、编译这个ice定义  

  要编译这个ice定义,首先要安装一个ice服务器,将其中的bin文件夹加入环境变量。跟jdk配置类似。然后使用其中的slice2java命令编译。

  例如HelloWorld.ice文件放在我F盘的test文件夹,运行,就可以在test目录出现如下文件:

  

  myHelloWorld文件夹名是ice定义中的module名。

三、编写Servant类

  servant类是ice服务器端提供操作调用的行为制品,它提供的是ice对象的实质内容。说白了,就是ice所定义的接口,在服务器端的实现类。

  按照管理,servant类名是ice接口名加一个“I”后缀,如下:

  

package client;import Ice.Current;
import myHelloWorld._HelloWorldDisp;public class HelloWorldI extends _HelloWorldDisp{private static final long serialVersionUID = 1L;@Overridepublic void say(String s, Current __current) {System.out.println("Hello World!"+" the string s is " + s);}
}

如上,servant类需要继承_HelloWorldDisp这个slice2java编译生成的抽象类。实现方法参数是原本的形参加一个Ice的Current对象。

四、编写远程的服务器类

package client;
public class Server {public static void main(String[] args){int status = 0;// Communicator实例,是ice run time的主句柄Ice.Communicator ic = null;try{// 调用Ice.Util.Initialize()初始化Ice run timeSystem.out.println("初始化ice run time...");ic = Ice.Util.initialize(args);// 创建一个对象适配器,传入适配器名字和在10000端口处接收来的请求System.out.println("创建对象适配器,监听端口10000...");Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10000");// 实例化一个PrinterI对象,为Printer接口创建一个servantSystem.out.println("为接口创建servant...");Ice.Object object = new HelloWorldI();// 调用适配器的add,告诉它有一个新的servant,传递的参数是刚才的servant,这里的“SimplePrinter”是Servant的名字System.out.println("对象适配器加入servant...");adapter.add(object, Ice.Util.stringToIdentity("SimplePrinter"));//调用适配器的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);}
}

这个服务器类其实就寥寥几行代码,注释已经很清楚了。

五、编写客户端类

package client;
import myHelloWorld.HelloWorldPrx;
import myHelloWorld.HelloWorldPrxHelper;public class Client {public static void main(String[] args){int status = 0;// Communicator实例Ice.Communicator ic = null;try{// 调用Ice.Util.Initialize()初始化Ice run timeic = Ice.Util.initialize(args);// 获取远地打印机的代理Ice.ObjectPrx base = ic.stringToProxy("SimplePrinter:default -p 10000");// 将上面的代理向下转换成一个Printer接口的代理HelloWorldPrx helloWorld = HelloWorldPrxHelper.checkedCast(base);// 如果转换成功if (helloWorld == null){throw new Error("Invalid proxy");}// 调用这个代理,将字符串传给它helloWorld.say("bar");} catch (Ice.LocalException e){e.printStackTrace();status = 1;} catch (Exception e){e.printStackTrace();status = 1;} finally{if (ic != null){ic.destroy();}}System.exit(status);}
}

六、运行

  先运行服务器,服务器线程一直运行等待,如下:  

初始化ice run time...
创建对象适配器,监听端口10000...
为接口创建servant...
对象适配器加入servant...
激活适配器,服务器等待处理请求...

  运行了客户端后,显示如下:

初始化ice run time...
创建对象适配器,监听端口10000...
为接口创建servant...
对象适配器加入servant...
激活适配器,服务器等待处理请求...
Hello World! the string s is bar

  将客户端改一下 helloWorld.say("foo");,再运行,显示如下:

初始化ice run time...
创建对象适配器,监听端口10000...
为接口创建servant...
对象适配器加入servant...
激活适配器,服务器等待处理请求...
Hello World! the string s is bar
Hello World! the string s is foo

(部分参考《Ice分布式程序设计》)

转载于:https://www.cnblogs.com/zrtqsk/p/3745286.html

Ice的HelloWorld(Java)相关推荐

  1. 创建并运行HelloWorld Java项目和类

    这次我们来学习创建一个简单的Java项目,然后再创建一个HelloWorld类,并运行它,HOHO! 创建Java项目 选择主菜单"文件→新建→项目"命令,在弹出窗口中选择&quo ...

  2. maven零基础从配置到运行helloworld(java maven helloworld)

    首先是maven的安装和配置 http://mirrors.shu.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin. ...

  3. java dos编译命令是什么_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是()...

    [单选题]下列行为中,属于绝对商行为的是 [填空题]汽车故障的变化规律可分为3个阶段,早期故障期. 和 . [填空题]无分电器点火线圈与一般点火线圈不同,其 与 没有连接,为互感作用. [简答题]练习 ...

  4. java ice c_ZeroC ICE之旅------java

    最新稳定版本: http://www.zeroc.com/download.html 由于我自己的平台是CentOS release 5.3 (Final),java version "1. ...

  5. dos命令为java程序赋值_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是() (5.0分)_学小易找答案...

    [判断题]run方法是运行线程的主体,若run方法运行结束,线程就消亡了 [单选题]在Java 程序中,下面哪个是不合法的标识符() (5.0分) [其它]请提交实验二压缩包 [单选题]在DOS命令行 ...

  6. javac HelloWorld.java 找不到文件问题

    问题:win10下安装配置完成Java后,在终端输入javac HelloWorld.java出现以下错误. 错误: 找不到文件: HelloWorld.java 用法: javac <选项&g ...

  7. ice文件转java文件

    1. 安装ice环境文件,并配置环境变量 下载并安装 https://zeroc.com/downloads/ice 按照提示安装即可,示例目录如下: 配置环境变量(为了能在任何地方调用slice2j ...

  8. HelloWorld案例中显示找不到helloworld.java文件.

    问题:新建文本文档并修改文件名为HelloWorld.java之后,文件文件类型并没有改变成JAVA文件,并且在Windows+r对话框相应位置上输入Javac HelloWorld.java后显示找 ...

  9. helloworld.java:1: 错误: 类HelloWorld是公共的, 应在名为 HelloWorld.java 的文件中声明 public class HelloWorld

    在cmd命令行中,使用javac编译时(javac helloworld.java),出现这样的提示错误: helloworld.java:1: 错误: 类HelloWorld是公共的, 应在名为 H ...

  10. java 高级holleword_HelloWord.java:1: 错误: 类Helloworld是公共的, 应在名为 HelloWorld.java 的文件中声明...

    文件名helloWorld.java 源码: public class Helloworld { public static void main(String[] args) { System.out ...

最新文章

  1. 软RAID创建手册-win2003
  2. Anaconda :利用Anaconda Prompt (Anaconda3)建立、设计不同python版本及对应库函数环境之详细攻略
  3. 面向对象的继承关系体现在数据结构上时,如何表示
  4. GVIM编辑器的配置
  5. spreedrest
  6. JAVA入门级教学之(封装)
  7. android javamail获取邮件太多太慢_「Java」 - SpringBoot amp; 邮件发送
  8. Form窗体点击关闭按钮并未关闭进程的解决方法
  9. 做游戏开发要学什么?
  10. 大白菜U盘制作工具V3.0教程
  11. matlab 数组 冒号,matlab中冒号的用法
  12. DNS污染,配置DNS
  13. 计算机网络应用基础心得体会,计算机网络技术学习心得体会
  14. 辛苦开发的 App 被山寨?阿里帮你为 APK 上把加固锁
  15. 今天去西安易朴通讯有限公司实习
  16. APS系统是什么意思?起什么作用
  17. 这几个方法让你实现EXCEL文件翻译成中文
  18. 【Unity入门】软件Unity Hub和Unity的安装和简单尝试
  19. 百家号视频怎么消重批量处理去重消重去水印去logo软件视频MD5修改工具(短视频去重) 自媒体如何解...
  20. Mac安装Meld,并使用Meld作为git merge tool的工具

热门文章

  1. matlab全桥电路设计,全桥变换电路的Matlab仿真及实验装置开发.pdf
  2. 获取 rabbitmq 实时数据
  3. Android FFMPEG音视频开发(一)
  4. fastapi+tortoise单元测试
  5. bi工具市场排行榜-bi工具报价
  6. HDU - 3237 Help Bubu (好题)
  7. Nature|人类肠道细菌对治疗药物的生物累积
  8. 浊度仪行业调研报告 - 市场现状分析与发展前景预测
  9. 使用JS快速读取TXT文件
  10. 20210726:FLAC刻录音乐CD教程05-总结