博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ice的HelloWorld(Java)
阅读量:6342 次
发布时间:2019-06-22

本文共 4273 字,大约阅读时间需要 14 分钟。

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;    @Override    public 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 time            System.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接口创建一个servant            System.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 time            ic = 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 barHello World! the string s is foo

 

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

 

 

 

 

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

你可能感兴趣的文章
解决php收邮件乱码问题
查看>>
linux shell中'',""和``的区别
查看>>
OceanBase数据库实践入门——手动搭建OceanBase集群
查看>>
WPF学习:3.Border & Brush
查看>>
Docker(二):微服务教程
查看>>
关于JAVA项目报表选型过程
查看>>
javascript
查看>>
Spring_MVC
查看>>
Java统计文件夹中文件总行数
查看>>
python之基本数据类型及深浅拷贝
查看>>
将bootstrap弹出框的点击弹出改为鼠标移入弹出
查看>>
SKF密码设备研究
查看>>
数据对象映射模式(通过工厂模式和注册树模式)v2
查看>>
4939 欧拉函数[一中数论随堂练]
查看>>
MySQL笔记(一)
查看>>
spring boot 包jar运行
查看>>
通过VMWare安装Linux(Ubuntu) 虚拟机在Window10系统和问题解决方案
查看>>
18年秋季学习总结
查看>>
Effective前端1:能使用html/css解决的问题就不要使用JS
查看>>
网络攻防 实验一
查看>>