`

ice的HelloWorld

    博客分类:
  • ice
阅读更多
安装之后的Ice相关路径:
slice2cpp,slice2java在/usr/bin/下
Ice.jar 存储于 /usr/share/java/下
相关的Ice的库存储于/usr/lib下.

一切就绪,我们开始Ice之旅的Slice地带:
首先,我们建立一个demo.ice的文件:


Java代码
module Demo{   
interface test{   
 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 2316  4月 15 17:01 _testDelD.java 
-rw-r--r--  1 root root  560  4月 15 17:01 _testDel.java 
-rw-r--r--  1 root root 1929  4月 15 17:01 _testDelM.java 
-rw-r--r--  1 root root 4177  4月 15 17:01 _testDisp.java 
-rw-r--r--  1 root root 1070  4月 15 17:01 testHolder.java 
-rw-r--r--  1 root root  488  4月 15 17:01 test.java 
-rw-r--r--  1 root root  481  4月 15 17:01 _testOperations.java 
-rw-r--r--  1 root root  460  4月 15 17:01 _testOperationsNC.java 
-rw-r--r--  1 root root 5418  4月 15 17:01 testPrxHelper.java 
-rw-r--r--  1 root root  569  4月 15 17:01 testPrxHolder.java 
-rw-r--r--  1 root root  567  4月 15 17:01 testPrx.java 

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

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

Java代码
//TestImp.java
package Demo;

import Ice.Current;

public class TestImp extends _testDisp{

public String execute(String mth, String cmd, Current __current) {
	return mth+cmd;
}
}


看到了,就是这么简单,仅仅覆盖_testDisp里面的抽象方法,实现把我们自己的实现代码填充到里面就行了.
之后,我们建立一个Server服务在10000端口进行侦听。

//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代码
Client.java
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代码
1.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.
分享到:
评论
2 楼 shmily2038 2010-09-19  
不过ICE与CORBA,差别很大。
如:
   1、CORBA不支持UDP协议,ice支持
   2、CORBA无法穿越防火墙,而ice可以通过SSL建立连接并通讯。
  ……
1 楼 andilyliao 2010-09-19  
ice和corba看着很像 呵呵

相关推荐

    ice hello world

    《ICE HelloWorld程序详解》 ICE(Internet Communications Engine)是由ZeroC公司开发的一种分布式对象中间件,它提供了一种高效、灵活、易于使用的跨平台通信框架,适用于构建大规模的分布式应用程序。"ICE Hello...

    HelloWorld_ICE分布式应用开发入门

    ### HelloWorld_ICE分布式应用开发入门 #### 概述 本文旨在通过一个简单的示例来介绍如何使用ICE(Internet Communications Engine)进行分布式应用开发。ICE是一种强大的中间件框架,用于构建可扩展、健壮且高...

    zeroc ice教程 ice环境配置 Ice中文教程 C++ ICE java ICE ICE入门 ice基础教程 ice开发文档

    随后,文档通过一个简单的HelloWorld应用示例,展示了如何编写Slice定义,并通过C++和Java编写ICE应用程序。 _slice语言_是ICE的核心部分,文档详细介绍了Slice语言的编译过程、源文件结构、词法规则等。Slice语言...

    ICE入门指南-分布式开发

    JAVA版本的HelloWorld程序与C++类似,先定义`HelloWorld.ice`接口。 5.2 **生成框架代码** 使用slice2java工具,将Slice定义转换为Java的接口和类。 5.3 **实现服务端** 在Java中,实现`HelloWorld::Hello`接口,...

    Test_ice.rar

    【描述】"这是用java开发的ice的helloworld" 暗示了这个压缩包的核心内容是一个Java项目,该项目展示了如何使用Ice库来实现一个基础的“Hello, World!”服务。在Java中,"Hello, World!"程序通常涉及创建一个类,该...

    java实现ice例子

    Ice 是一种面向对象的中间件平台。从根本上说,这意味着Ice 为构建面 向对象的客户-服务器应用提供了工具、API 和库支持。Ice 应用适合在异 种环境中使用:客户和服务器可以... 本例子是用java写的ice实现的HelloWorld

    zero ICE快速入门java版

    public abstract class _HelloWorldDisp extends Ice.ObjectImpl implements HelloWorld{} servant类是ice所定义的接口,在服务器端的实现类。我们在该类中可以编写服务器端对请求的具体处理。 代码如下: package ...

    01-android 4.0 入门配置以及HelloWorld程序讲解

    这里我们将深入探讨"01-android 4.0 入门配置以及HelloWorld程序讲解"的相关知识点,带你走进Android开发的世界。 首先,让我们从Android 4.0(也称为Ice Cream Sandwich,简称ICS)开始。这是Android操作系统的一...

    ICE入门 文章集

    《HelloWorld_ICE分布式应用开发入门_MichiHenning.pdf》这篇文章很可能是介绍ICE的基础知识,包括如何安装ICE,以及通过一个简单的"Hello, World!"程序来演示ICE的基本用法。开发者Michi Henning可能会讲解ICE的...

    Ice-3.4.0中文开发手册1

    然后,通过"Hello World"应用的实现,展示了Ice在C++和Java中的基本使用方法。接下来,深入讨论了Slice语言,这是Ice中的接口定义语言,类似于CORBA的IDL。Slice语言用于定义数据类型、接口、操作和异常,并具有自己...

    ICE通信Demo文档

    - 创建一个继承自`IHelloWorldDisp_`的类`HelloWorld`,实现具体的业务逻辑: ```csharp public class HelloWorld : IHelloWorldDisp_ { // 实现具体的接口方法 } ``` 以上就是基于ICE 3.4.2版本在C#平台上...

    ZeroC Ice3.7 官方手册英文版加注中文书签

    这一章节通过创建一个简单的HelloWorld应用来介绍Ice的基本使用方法。具体包括: - **1.2.1 编写 Slice 定义**:指导用户如何编写Slice文件来定义应用的服务接口。 - **1.2.2 使用 C++ (C++11) 编写 Ice 应用**:...

    ICE中文编程指南

    Hello World应用首先需要定义一个简单的Slice文件,描述服务端提供的接口。 - **C++开发**: - 使用Ice的C++ API来创建客户端和服务端程序。 - 客户端调用服务端提供的方法完成通信。 - **Java开发**: - 同样...

    java ice资料

    接着,“月光软件站 - 编程文档 - Java - ICE 2_0学习笔记1(HelloWorld).htm”很可能是一个入门教程,引导读者通过一个简单的"Hello, World!"示例来熟悉Java ICE的使用。这个例子通常会展示如何创建ICE服务器,...

    ice 3.2.1 文档

    Hello World 示例 ##### 5.1 编写 Slice 定义 Ice 使用 Slice(一种类似于 IDL 的语言)来定义服务接口。下面是一个简单的 Slice 定义示例: ```slice module Demo { interface Greeter { string greet(string...

    Ice 分布式程序设计(马维达译)

    - **示例**:书中通过一个简单的 HelloWorld 应用来介绍如何使用 Ice 开发分布式程序。 - **步骤**: - **编写 Slice 文件**:定义服务接口。 - **生成代码**:使用 Slice 编译器生成所需的 C++ 或 Java 代码。 -...

Global site tag (gtag.js) - Google Analytics