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

本文共 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

你可能感兴趣的文章
工作第十三周:身体掏空,精神饱满
查看>>
Linux 内核--任务0的运行(切换到用户模式)move_to_user_mode
查看>>
ios扩展机制objc_setAssociatedObject,objc_getAssociatedObject
查看>>
批量添加-fno-objc-arc
查看>>
二叉树的层序遍历
查看>>
os模块
查看>>
安装 matplotlib
查看>>
css伪类(:before和:after)
查看>>
react native TypeError network request failed
查看>>
PLSQL锁表之后改如何操作
查看>>
Sql注入、文件上传与手机品牌信息抓取解决方案
查看>>
SQLServer跨库查询--分布式查询[转载]
查看>>
django错误-NoReverseMatch at /admin/
查看>>
Laravel中的信息验证 和 语言包
查看>>
折半查找法(二分查找 java版)
查看>>
工作两周年—--个人知识体系梳理
查看>>
win2003开启telnet
查看>>
php配置文件php.ini中文详解
查看>>
关于Tomcat配置相关总结
查看>>
安装PDO_MYSQL遇到的问题:error: Cannot find MySQL header files under
查看>>