ICE中间件介绍以及demo

一:基本开发步骤

  1. 根据业务编写slice:写任何ICE应用的第一步都要编写一个slice定义,其中包含了这个应用的所有接口
  2. 编写实现接口代码:命名规则就是接口的名字加上I
  3. 编写server端代码
  4. 写配置文件,部署服务
  5. 编写client端代码
  6. 先启动server端服务,然后启动client端服务

二:demo(安装ice服务)

  1. 定义一个接口,建立一个Printer.ice文件

moudle Demo{

       interface Printer{

      void printString(string s);

    };

};

2.在DOS环境下执行slice2java Printer.ice

3.引入Ice.jar包

4.定义类PrinterI并且继承_PrinterDisp

  

  public class PrinterI extends _PrinterDisp{

    private static final long serialVersionUID = -2685822703123295227L;

    public void printString(String s, Ice.Current current){
    System.out.println(s);
    }
  }

  5.编写server端

  

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("SimplePrinterAdapter", "default -p 10000");
Ice.Object object = new PrinterI();
adapter.add(object,ic.stringToIdentity("SimplePrinter") ); //servant标识符,用于在客户端连接
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);

}
}

6.编写client端

import panda.generated.Demo.PrinterPrx;
import panda.generated.Demo.PrinterPrxHelper;
public class Client {

/**
* @param args
*/
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 -p 10000");
PrinterPrx printer = PrinterPrxHelper.checkedCast(base);
if(printer == null)
throw new Error("Invalid proxy");

printer.printString("Hello World!");
}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);
}

}

时间: 2024-10-29 10:46:00

ICE中间件介绍以及demo的相关文章

ICE中间件说明文档

1       ICE中间件简介 2       平台核心功能 2.1        接口描述语言(Slice) 2.2        ICE运行时 2.2.1         通信器 2.2.2         对象适配器 2.2.3         位置透明性 2.3        异步编程模型 2.3.1         异步方法调用 2.3.2         异步方法分派 2.4        订阅/发布编程模型 2.5        动态服务管理(IceBox) 2.6       

#研发中间件介绍#定时任务调度与管理JobCenter

郑昀 最后更新于2014/11/11 关键词:定时任务.调度.监控报警.Job.crontab.Java 本文档适用人员:研发员工 没有JobCenter时我们要面对的: 电商业务链条很长,业务逻辑也较为复杂,需要成百上千种定时任务.窝窝的大多数定时任务其实调用的是本地或远端 Java/PHP/Python Web Service.如果没有一个统一的调度和报警,在集群环境下,我们会: 不知道哪一个定时任务执行失败或超时,不见得能第一时间知道——直到最终用户投诉反馈过来: 要求每一个定时任务输出统

数据库相关中间件介绍

数据库相关中间件介绍 详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt412 这里主要介绍互联网行业内有关数据库的相关中间件.数据库相关平台主要解决以下三个方面的问题: 为海量前台数据提供高性能.大容量.高可用性的访问 为数据变更的消费提供准实时的保障 高效的异地数据同步 应用层通过分表分库中间件访问数据库,包括读操作(Select)和写操作(update, insert和delete等,DDL, DCL).写操作会在数据

#研发中间件介绍#NotifyServer

郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词:异步消息.订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发 电商系统为什么需要 NotifyServer? 如子柳所说,电商系统『需要两种中间件系统,一种是实时调用的中间件(淘宝的HSF,高性能服务框架).一种是异步消息通知的中间件(淘宝的Notify)』.那么用传统的 ActiveMQ/RabbitMQ 来实现 异步消息发布和订阅 不行吗? 2013年之前我们确实用的是 ActiveMQ,当然主要是订阅者

wamp调用ICE中间件

wamp 是集成开发包,我的wamp中的php 为5.3.10 ,经过3天艰苦奋战,终于在phpinfo()中看到了 ICE 出现了.. OK,最新的ice  为 3.5.1 支持 php 5.4 (注意版本,编译的不同,版本不同就连不上了..后面版本估计没了vc6 的了..) 我的PHP版本为 5.3.10(vc9)  需要的ice 版本为 3.4.2(vc9)  (在网上下载了 3.4.0  是vc6 编译的,而wamp中的php 是vc9 编译的) 现提供几个链接: ICE官方下载点: h

#研发中间件介绍#异步消息可靠推送Notify

郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词: 异步消息 .订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发 电商系统为什么需要 NotifyServer? 如子柳所说,电商系统『 需要两种中间件系统,一种是实时调用的中间件(淘宝的HSF,高性能服务框架).一种是异步消息通知的中间件(淘宝的Notify)』.那么用传统的 ActiveMQ/RabbitMQ 来实现 异步消息发布和订阅 不行吗? 2013年之前我们确实用的是 ActiveMQ,当然主要是订

Spring Security 介绍与Demo

一.Spring Security 介绍 Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块的默认技术选型.我们仅需引入spring-boot-stater-security模块,进行少量的配置,即可实现强大的安全管理功能. 重要类: WebSecurityConfigurerAdapter:定义Security策略. AuthenticationManagerBuilder:定义认证策略 二.Demo 使用 IDEA 通过 Spring I

实现动态代理的两种方式介绍+例子demo(JDK、CGlib)

JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢? 这就需要CGLib了.CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑. JDK动态代理与CGLib动态代理均是实现Spring AOP的基础. 一.JDK这种方式动态代理 1. 没引入spring配置文件时,怎么实现JDK动态代理 情景介绍:如何解决全站中文乱码问题? 我们会定义一个过滤器:Character

中间件介绍

中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.Auth