`

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 hello world,对于刚刚入手的ice的人有帮助,运行起来,了解其中的原理

    HelloWorld_ICE分布式应用开发入门

    ICE文档作者写的关于实例程序的开发过程。很基础,不是很深,建议刚入门的同志可以看看,学学怎么使用ICE编程。

    java实现ice例子

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

    zero ICE快速入门java版

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

    Test_ice.rar

    这是用java开发的ice的helloworld

    Ice 分布式程序设计

    第 3 章 Hello World 应用 第 4 章 Slice 语言 第 5 章 一个简单文件系统的 Slice 定义 第 6 章 客户端的 Slice-to-C++ 映射 第 7 章开发 C++ 文件系统客户 第 8 章 客户端的 Slice-to-Java 映射 第 9 章开发 Java ...

    ICE分布式程序设计中文版

    第 3 章 Hello World 应用 33 3.1 本章综 33 3.2 编写 Slice 定义 33 3.3 编写使用 C++ 的 Ice应用 34 3.4 编写使用 Java的 Ice 应用 41 3.5 总结 48 第 Ice 核心概念 51 第 4 章 Slice 语言 53 4.1 本章综 53 4.2 ...

    ICE 学报 第一期

    Hello World—Really! .............................................7 Output to Unix Syslog .........................................8 Sending Email .................................................8...

    天线扫描仿真matlab代码-HelloWorld:演示版

    天线扫描仿真matlab代码图案标签AMS设计模拟和数字电路tanner模拟设计模拟布局角JS角JS框架角天线设计ARM验证ASIC设计器ASIC建模ASIC解决方案架构...Calibration嵌入式系统软件和驱动程序Linux上的Arium和ICE Audio AP

    i18n从字面上看::soft_ice_cream:将国际化引入JS的简单方法

    从字面上看 一种将国际化引入JS的简单方法。 安装 $ npm install i18n-literally 用法 ...i18n `Hello ${ 'World' } !` // => Hello World! // 2. Add/update your translations for a language "$

    PHP调用.NET的WebService 简单实例

    public string HelloWorld() {  return “Hello World”; } ok,一切就绪。在某php文件中如下写法: php5本身就支持SOAP调用Web Service: <?php //get localization strings from C# webs

    常常会用到的截取字符串substr()、substring()、slice()方法详解

    var str ="helloWorld"; // 一个参数,则将字符串长度作为结束位置 alert(str.slice(3)); // "loWorld" // 两个参数,7位置上的字符为"r",但不包括结束位置的字符 alert(str.slice(3,7)); // "loWo...

    SwiftCLI:在Swift中开发CLI的强大框架

    Hello world ! 使用SwiftCLI,您将自动获得: 命令路由 选项解析 帮助信息 使用说明 错误使用命令时的错误消息 Zsh完成 目录 安装 > ice add jakeheis/SwiftCLI 迅捷软件包管理器 将SwiftCLI添加为项目的依赖项: ...

    jsx-runtime:JSX运行时

    jsx运行时 ... return < h1> Hello World < / h1 > ; } 示例gulpfile.js 安装gulp 4,browserify,babelify和好友: npm i gulp@4 browserify babelify @babel/core @babel/preset-env @babel/pl

    appc-liveviewer-app:一个可从任何URL,GitHub存储库和摘要中加载和运行Titanium和Alloy代码的应用程序

    我们可以在我们的主要网站上添加一个页面,人们可以在其中下载该应用程序并扫描唯一的QR码以运行和编辑hello world示例。服务器GitHub存储库中的项目和需要在云端用Alloy编译的源将通过实例下载源。 目前,该应用...

    C#使用HttpPost请求调用WebService的方法

    之前调用 WebService 都是直接添加服务引用,然后调用 WebService 方法的,最近发现还可以使用 Http 请求调用 ... public string HelloWorld() { return Hello World; } [WebMethod] public string Sum(str

    排除JQuery通过HttpGet调用WebService返回Json时“parserror”错误

    如今问题被顺利解决,下面是解决过程 首先看客户端使用JQuery调用WebService的代码: 代码如下: getHellobyAjax: function(callabckFun) { $.ajax({ type: “GET”, url: “WebService.asmx/HelloWorld”, //...

    go-micro examples 中web & form 代码学习(web类 网站的微服务架构:micro api + micro web + web service + api service)

    以下对应 example/web 例子: main.go 代码如下: package main import ( fmt log net/http github.com/micro/go-micro/web ) func helloWorldHandler... fmt.Fprint(w, ` ... web.Name(helloworld), ) service.Ha

Global site tag (gtag.js) - Google Analytics