Zeroc Ice 学习笔记--IceBox

1、介绍

IceBox就好像是一个Tomcat,只需要服务实现Ice.Server接口并能轻松搞定

2、案例(参考Zeroc Ice 权威指南)

ice文件

编译Ice文件:

接口实现:

实现方法中连接数据库查询数据或者其他任意操作

服务封装(参考Zeroc Ice权威指南):

public abstract class AbstractIceBoxService implements Service{protected Ice.ObjectAdapter objectAdapter;protected Identity identity;protected static Logger LOG = LoggerFactory.getLogger(AbstractIceBoxService.class);protected static Sl4jLogerI icelogger = new Sl4jLogerI("communicator");@Overridepublic void start(String name, Communicator communicator, String[] args) {Ice.Util.setProcessLogger(icelogger);objectAdapter = communicator.createObjectAdapter(name);Ice.Object object = this.createMyIceServiceObj(args);identity = communicator.stringToIdentity(name);objectAdapter.add(PerfDispatchInterceptor.addIceObject(identity,object),identity);objectAdapter.activate();LOG.info(name+" service started ,with param size "+args.length+" detail: "+ Arrays.toString(args));}@Overridepublic void stop() {LOG.info(" stopping service "+identity + ".......................");objectAdapter.deactivate();PerfDispatchInterceptor.removeIceObject(identity);LOG.info(" stopped service "+ identity +" stoped");}//服务配置参数,来自icegrid.xml文件public abstract Ice.Object createMyIceServiceObj(String [] args);
}
public class PerfDispatchInterceptor extends DispatchInterceptor{private static Logger LOG = LoggerFactory.getLogger(PerfDispatchInterceptor.class);private static final Map<Identity, Object> id2ObjectMAP = new ConcurrentHashMap<Identity, Object>();private static final PerfDispatchInterceptor self = new PerfDispatchInterceptor();private static final long serialVersionUID = 1L;public static PerfDispatchInterceptor getINSTANCE(){return self;}//添加需要拦截的服务public static DispatchInterceptor addIceObject(Identity identity,Object object){id2ObjectMAP.put(identity,object);return self;}//此方法可以做任务拦截,雷士AOP@Overridepublic DispatchStatus dispatch(Request request){Identity theId = request.getCurrent().id;//request.getCurrent().con 打印出来local address = ip:point服务端信息 换行 remote address = ip:point 客户端信息String inf = " dispach req,method: "+request.getCurrent().operation+" service: "+theId.name +" server address: "+request.getCurrent().con;LOG.info(inf+" begin");try {DispatchStatus status = id2ObjectMAP.get(request.getCurrent().id).ice_dispatch(request);LOG.info(inf + " success");return status;}catch (RuntimeException e){LOG.error(inf+" error "+e.getMessage());throw e;}}public static void removeIceObject(Identity identity){LOG.info(" remove ice object "+identity);id2ObjectMAP.remove(identity);}
}

IceBox服务:

3、启动服务

icebox.propertices:修改相对于的IceBox.Service.xxxServices配置

4、Client调用同上一节

转载于:https://my.oschina.net/cxlt216/blog/748498

Zeroc Ice 学习笔记--IceBox相关推荐

  1. 【ICE学习】IceBox管理服务(C#)

    [前提条件]: 已安装VS2012和ICE3.5.1,ICE安装包:https://download.csdn.net/download/xmzmqx/12928570 安装搭建环境比较简单,请自行百 ...

  2. ZeroC Ice权威指南-学习笔记2——IceBox

    另外写一个稍微复杂一点的调用过程 按照书本上的slice[为了更清晰,这里把文件名字改为onlinebook.ice] 保存之后,ice插件就为我们自动创建了对应的java代码 给项目增加logbac ...

  3. ZeroC Ice权威指南-学习笔记1——hello world

    前言 ZeroC Ice是一款很好的RPC框架,性能极好.但是参考文档不足是其一大问题,这也影响了它的传播.<ZeroC Ice权威指南>是唯一的中文教材,但写的不尽如人意,作为入门教材, ...

  4. ZeroC Ice IceBox使用

    IceBox介绍 IceBox就像一个Tomcat,我们只要写N个Ice服务代码,用一个装配文件定义需要加载的服务列表.服务器的启动参数.启动次序等必要信息,然后启动IceBox,我们的应用系统就能够 ...

  5. ZeroC Ice 暂记

    摘自: http://weibo.com/p/1001603869896789339575 原文地址: http://www.oschina.net/question/865233_242146 吴治 ...

  6. Zeroc Ice 发布订阅者之demo Icestorm之clock

    刚刚在服务端(192.168.0.113)和客户端跑通(192.168.0.188),在这里记录,作为备忘. 第一步:读readme,先用vs2010生成subscriber.exe和publishe ...

  7. Python3 基础学习笔记 C03【操作列表】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  8. Cortex-M3学习笔记(一)

    Cortex-M3学习笔记(一) 首先,在学习Cortex-M3时,我们必须要知道必要的缩略语.整理如下:AMBA:先进单片机总线架构   ADK:AMBA设计套件 AHB:先进高性能总线    AH ...

  9. UE4 Material 101学习笔记——08-12 凹凸和视差贴图/纹理压缩/布料/体积冰/摇曳树叶

    UE4 Material 101学习笔记--08-12 凹凸和视差贴图/纹理压缩/布料/体积冰/摇曳树叶 Lec08 凹凸和视差贴图 Bump Offset and Parallax Occlusio ...

最新文章

  1. Chrome 科研神器!论文代码快速复现
  2. scikit-learn库中聚类算法自定义距离度量方式
  3. Qt编写OpenMP程序--循环测试
  4. python操作mongodb语法_python操作mongodb怎么找到所有的集合
  5. 10款你应该了解的开源安全工具
  6. pads中如何设置等长_标签打印软件中标签间距以及边距如何设置
  7. Android8.0使用ninja模块编译Settings
  8. 敢问多任务学习优化算法路在何方?|附代码
  9. 【渝粤教育】国家开放大学2018年秋季 1356T高级英语听说(2) 参考试题
  10. 为什么程序员赚不了大钱?
  11. 前端注释那些事儿:看懂这篇,提高代码质量So easy
  12. 电子公文流转暨无纸办公系统
  13. VBA 字典使用小结:关键字循环
  14. e路航LH900N导航仪凯立德最新版本地图更新方法
  15. 如何查看一个期刊是sci几区以及影响因子 入藏号 ISSN等信息
  16. 初探iOS项目使用MVP模式
  17. 路径中 斜杠/和反斜杠\ 的区别
  18. SAP中的采购质量管理与订单及收货控制
  19. arm指令集:精简指令集、复杂指令集
  20. 网银UKey登录数据签名和验签流程

热门文章

  1. imx6ull的DMA实现的linux用户程序和驱动模块程序源码
  2. 政府采购网招投标信息获取机器人
  3. 什么是RDB和ROF? 一文了解Redis持久化
  4. matlab+latex+label,matlab xlabel latex
  5. 天越公众号系统粉丝海报裂变用法及介绍
  6. 如何正确看谷歌文档android,谷歌推出Android谷歌文档离线查看功能
  7. AndroidStudio汉化教程
  8. ZLMediaKit源码分析--序
  9. NXP KV30 ADC转换时间计算及高速ADC采样配置
  10. 5分钟用Spline制作一个Figma图标