`

ICE实例程序

阅读更多



  正好手里的这活儿要用到这块了。顺便就学习了一下。做了一个简单的 for_java的demo出来。供大家使用的时候参考参考。

如果是使用eclipse开发的,可以参考:http://hi.baidu.com/dd_taiyangxue/blog/item/cc7f014442b4a82acffca382.html

这个文章是在eclipse下借助slice2Java的插件来完成的。这里咱用的是idea。所以就已idea为主了。

1. ICE安装与配置。

下载Ice-3.4.0.msi这个文件放在本地一路next就可以完成安装了。

安装完成后配置环境变量。
然后在PATH变量中加入%ICE_HOME%\bin后。保存退出。打开cmd命令行。

输入slice2java后出现选项提示说明配置成功了。可以下一步了。

2.编写slice定义。

编写任何ICE应用的第一步都是要编写一个slice定义。其中包含了这个应用所用的所有接口。直接在项目中的/src/main/java目录下创建.ice文件。这里就暂时叫promotionWare.ice。

内容如下:

module com {
module jd {
module promotion {
module web {
module ware {
/** 促销商品实体 **/
struct PromotionWare {
int id;
string name;
};
/** 促销商品服务接口 **/
interface PromotionWareService {
/**
* 获取促销商品
* @param id 商品id
**/
PromotionWare getWareById(long id);
};
};
};
};
};
};来解释一下。这里我们定义了一个叫做PromotionWareService的接口。目前这个接口只提供一个操作。叫做getWareById。通过传入商品ID获取商品信息。
而这个商品信息PromotionWare就是上边定义的struct PromotionWare 实体。其中这个实体包含了id,name两个属性。具体的类型对照可参看Ice-3.4.0开发手册中文版.pdf中的介绍。很是详细。
至于这个module就相当于java中的package。上边我们定义的就相当于package com.jd.promotion.web.ware
这里需要注意的是。如果内层的module名称如果在外层定义过,则编译时无法通过。比如:com.jd.promotion.web.promotion.ware。因为promotion已经定义过。所以无法再定义一次。
编写完以后就需要编译我们的这个slice定义来生成JAVA的代理和框架。
在cmd中进入到.ice所在的目录。使用slice2java promotionWare.ice命令来编译定义。生成相应的目录。如图所示:到此,定义slice和编译已经完成了。然后还有一步要做的就是在工程中加入ice的jar包。
3.编写编译服务器
目的就是为了实现我们之前定义的PromotionWareService接口。我们必须创建一个servant类。至于servant是什么,我的理解是它就是ice对象的一个标识。每个ice对象都会映射到相应的servant下。在服务启动的时候每个ice对象实例化出来一个servant,然后激活并处理每个相应的请求。
按照文档上的规则。servant的命名规则就是接口名字加上I。所以我们这个servant的名字就是 PromotionWareServiceI。
以下为servant代码。

package com.jd.promotion.web.ware; 
/** 
* User: hanxy 
* Date: 2010-6-8 
* Time: 12:47:23 
*/ 
public class PromotionWareServiceI extends _PromotionWareServiceDisp { 
public PromotionWare getWareById(long id,Ice.Current current) { 
PromotionWare pw = null; 
if(id==110100) { 
pw = new PromotionWare(110100,"这个是测试的"); 
} 
return pw; 
} 
} 
 

 这里实现了接口中定义的getWareById。但不同的是这里多了一个Ice.Current的参数。这里我们暂时不需要用到它。所以先不讨论它的作用了。
4.编写server端
接着是服务器段代码。定义为PromotionWareServer.java

package com.jd.promotion.web.ware;
/**
* User: hanxy
* Date: 2010-6-8
* Time: 13:02:19
*/
public class PromotionWareServer {
public static void main(String[] args) {
int status = 0;
Ice.Communicator ic = null;
try {
ic = Ice.Util.initialize(args); //初始化ice run time
   Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10000");
Ice.Object object = new PromotionWareServiceI(); //服务器端run time初始化完毕。实例化一个WareServiceI对象。为接口创建servant
   adapter.add(object, Ice.Util.stringToIdentity("SimplePrinter"));
adapter.activate(); //激活适配器。适配器开始是holding状态创建的。
   ic.waitForShutdown();
} catch(Ice.LocalException e) {
e.printStackTrace();
status = 1;
} catch(Exception e) {
System.err.println(e.getMessage());
status = 1;
} finally {
if (ic != null)
ic.destroy();
}
System.exit(status);
}
}

 5.编写client端代码
编写好了服务器端,那么就剩下客户端去调用了。这里我们定义

PromotionWareClient.java
package com.jd.promotion.web.ware;
/**
* User: hanxy
* Date: 2010-6-8
* Time: 13:03:56
*/
public class PromotionWareClient {
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:default -h 192.168.1.84 -p 10000");
PromotionWareServicePrx pwsp = PromotionWareServicePrxHelper.checkedCast(base);
if(pwsp == null) {
throw new Error("Invalid proxy");
}
PromotionWare pw = pwsp.getWareById(110100);
System.out.println("name is :"+pw.name);
} catch (Ice.LocalException e) {
e.printStackTrace();
status = 1;
} catch (Exception e) {
System.err.println(e.getMessage());
status = 1;
} finally {
if (ic != null)
ic.destroy();
}
System.exit(status);
}
}

 最后都完成后我们要运行以下来测试测试。首先启动server端。然后启动client端。最后可以看到在控制台输出内容
这里输出的name is:这个是测试的。就是我们在client端的
PromotionWare pw = pwsp.getWareById(110100);
System.out.println("name is :"+pw.name);
到此为止一个简单的demo就完成了。其实真的是很简单很容易上手。这也是参照着开发手册的demo改出来的。看文档的时候发现有很多地方在后边的章节都是需要优化的。ice的强大远不止这些。还需要继续学习呵呵。希望这个demo能给大家提供帮助。

 

 

  • 大小: 117.1 KB
  • 大小: 195.4 KB
  • 大小: 160.4 KB
分享到:
评论

相关推荐

    Ice 经典入门和实例

    Ice是一种高性能、跨平台的分布式对象中间件,它提供了强大的通信机制,使得应用程序能够轻松地实现分布式计算。由ZeroC公司开发,Ice支持多种编程语言,包括C++、Java、Python等,使得开发人员可以灵活选择适合项目...

    ICE  代码实例 VC6

    ICE(Internet Component Exchange)是一种基于组件的分布式计算框架,它允许开发者在不同的网络环境中构建可扩展的、跨平台的应用程序。ICE提供了丰富的编程接口,支持多种语言,包括C++、Java、Python等,并且与VC...

    ICE分布式程序设计

    ICE(Internet Communications Engine)是一种强大的中间件,专为构建分布式应用程序而设计。它提供了一整套工具和服务,使得开发者能够高效地实现跨平台的通信和数据交换。ICE的核心功能包括分布式部署管理、消息...

    Ice入门完整实例

    这通常涉及创建一个主程序,实例化对象,然后注册到Ice的定位器(Locator)。 3. **客户端代码**:客户端则会连接到服务器,通过定位器找到服务,并调用其方法。客户端代码也会由Ice编译器自动生成,包括连接管理、...

    用vs2008写的ice小程序

    4. **客户端编程**:在客户端,通过Ice的API连接到服务端,获取服务实例,然后调用服务的方法。 5. **通信与序列化**:Ice处理底层的网络通信和数据序列化,允许跨语言、跨平台的透明通信。数据在传输前会被序列...

    ICE编程实例ICE编程实例

    ICE(Internet Communication Engine)是一种流行的分布式中间件框架,由ZeroC公司开发,用于构建高性能、跨平台的网络应用程序。它支持多种编程语言,包括C++和C#,这两个语言在本实例中都有所涉及。ICE提供了强大...

    Ice-3.4.0中文开发手册1

    整个手册以实例驱动,通过一个简单的文件系统应用来展示Slice定义的实际应用,并逐步解释如何使用Ice开发C++和Java客户端。这样的方式使学习过程更加直观和实用。 总的来说,《Ice-3.4.0中文开发手册1》是开发者...

    ICE框架 C++示例程序

    本示例程序是基于ICE的C++实现,适用于Visual Studio 2008开发环境,非常适合初学者学习和理解ICE框架的基本用法。 ICE框架的核心特性包括: 1. **多语言支持**:ICE支持多种编程语言,如C++, Java, Python等,...

    ice分布式程序设计中文版

    《Ice分布式程序设计中文版》是一本详细介绍Internet Communications Engine (ICE) 技术的书籍。ICE 是一种中间件平台,用于创建高性能、可扩展的分布式应用程序。该书以ICE的1.3版本为蓝本,对C++和Java语言提供了...

    Ice 分布式程序设计

    ### Ice 分布式程序设计 #### 第一部分:Ice 综述 **Ice 综述** - **Ice 架构** - Ice 是一种用于构建分布式应用程序的中间件平台,它支持跨多种网络环境和操作系统之间的通信。Ice 的核心组件包括: - **Ice ...

    ICE 简单客户端和服务端实例

    在给定的 "ICE 简单客户端和服务端实例" 中,我们有两个关键组件:consoleClient 和 consoleServer,它们是 ICE 框架下的基础应用示例,用于演示客户端和服务端如何交互。** **VS2005 (Visual Studio 2005) 是 ...

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

    - **1.2.7 使用 JavaScript 编写 Ice 应用**:提供了基于JavaScript的Ice应用程序实例。 - **1.2.8 使用 Objective-C 编写 Ice 应用**:展示了使用Objective-C语言实现Ice应用程序的方法。 - **1.2.9 使用 PHP 编写 ...

    Ice分布式程序设计文档英文版

    ### Ice分布式程序设计知识点概述 #### 一、Ice框架简介 Ice(Internet Communications Engine)是一个高性能、可扩展的中间件框架,它支持多种语言(如Java、C#、C++和PHP等)来构建分布式应用系统。该框架由...

    ice安装包 for windows.zip

    `icegridadmin`则是用于管理和监控ICE网格服务的工具,可以帮助开发者管理分布式系统的实例和负载均衡。 除了上述核心组件,安装包可能还包含文档、示例代码和其他资源,帮助开发者快速理解和使用ICE。文档通常会...

    Ice-3.3.1 ICE

    总的来说,《Distributed Programming with Ice》是一本深入浅出的书籍,不仅详细介绍了Ice框架的内部工作原理,而且还提供了丰富的实例和最佳实践,是学习和掌握Ice的理想资源。对于那些希望在分布式计算领域有所...

    ice入门例子

    - **启动服务器**: 运行服务器程序,启动Ice服务监听客户端请求。 - **连接客户端**: 客户端加载配置,创建Proxy,然后进行远程调用。 6. **调试与优化** - **日志和监控**: Ice提供详细的日志记录,有助于调试...

    ICE客户端与服务端通信Demo

    平台编译环境:VS2017 ICE版本:3.7.7 ICEbuilder:5.0.9 ...源码中有两套程序: Server:启动服务器,等待连接 。连接后可双方通信 Client:连接服务器,与服务器通讯。 Slice: 手写几个接口即可。

Global site tag (gtag.js) - Google Analytics