Ice的HelloWorld(Java)
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)相关推荐
- 创建并运行HelloWorld Java项目和类
这次我们来学习创建一个简单的Java项目,然后再创建一个HelloWorld类,并运行它,HOHO! 创建Java项目 选择主菜单"文件→新建→项目"命令,在弹出窗口中选择&quo ...
- 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. ...
- java dos编译命令是什么_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是()...
[单选题]下列行为中,属于绝对商行为的是 [填空题]汽车故障的变化规律可分为3个阶段,早期故障期. 和 . [填空题]无分电器点火线圈与一般点火线圈不同,其 与 没有连接,为互感作用. [简答题]练习 ...
- java ice c_ZeroC ICE之旅------java
最新稳定版本: http://www.zeroc.com/download.html 由于我自己的平台是CentOS release 5.3 (Final),java version "1. ...
- dos命令为java程序赋值_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是() (5.0分)_学小易找答案...
[判断题]run方法是运行线程的主体,若run方法运行结束,线程就消亡了 [单选题]在Java 程序中,下面哪个是不合法的标识符() (5.0分) [其它]请提交实验二压缩包 [单选题]在DOS命令行 ...
- javac HelloWorld.java 找不到文件问题
问题:win10下安装配置完成Java后,在终端输入javac HelloWorld.java出现以下错误. 错误: 找不到文件: HelloWorld.java 用法: javac <选项&g ...
- ice文件转java文件
1. 安装ice环境文件,并配置环境变量 下载并安装 https://zeroc.com/downloads/ice 按照提示安装即可,示例目录如下: 配置环境变量(为了能在任何地方调用slice2j ...
- HelloWorld案例中显示找不到helloworld.java文件.
问题:新建文本文档并修改文件名为HelloWorld.java之后,文件文件类型并没有改变成JAVA文件,并且在Windows+r对话框相应位置上输入Javac HelloWorld.java后显示找 ...
- helloworld.java:1: 错误: 类HelloWorld是公共的, 应在名为 HelloWorld.java 的文件中声明 public class HelloWorld
在cmd命令行中,使用javac编译时(javac helloworld.java),出现这样的提示错误: helloworld.java:1: 错误: 类HelloWorld是公共的, 应在名为 H ...
- java 高级holleword_HelloWord.java:1: 错误: 类Helloworld是公共的, 应在名为 HelloWorld.java 的文件中声明...
文件名helloWorld.java 源码: public class Helloworld { public static void main(String[] args) { System.out ...
最新文章
- 软RAID创建手册-win2003
- Anaconda :利用Anaconda Prompt (Anaconda3)建立、设计不同python版本及对应库函数环境之详细攻略
- 面向对象的继承关系体现在数据结构上时,如何表示
- GVIM编辑器的配置
- spreedrest
- JAVA入门级教学之(封装)
- android javamail获取邮件太多太慢_「Java」 - SpringBoot amp; 邮件发送
- Form窗体点击关闭按钮并未关闭进程的解决方法
- 做游戏开发要学什么?
- 大白菜U盘制作工具V3.0教程
- matlab 数组 冒号,matlab中冒号的用法
- DNS污染,配置DNS
- 计算机网络应用基础心得体会,计算机网络技术学习心得体会
- 辛苦开发的 App 被山寨?阿里帮你为 APK 上把加固锁
- 今天去西安易朴通讯有限公司实习
- APS系统是什么意思?起什么作用
- 这几个方法让你实现EXCEL文件翻译成中文
- 【Unity入门】软件Unity Hub和Unity的安装和简单尝试
- 百家号视频怎么消重批量处理去重消重去水印去logo软件视频MD5修改工具(短视频去重) 自媒体如何解...
- Mac安装Meld,并使用Meld作为git merge tool的工具