ICE运行时环境备忘一

来源:互联网 发布:数据噪声 编辑:程序博客网 时间:2024/06/06 17:57

转:http://summer85.iteye.com/blog/1601232

1、ICE运行环境的唯一句柄Communicator对象,其用来管理ICE运行环境下所有对象资源,包含但不限于:
   A、客户端线程池,主要用来进行AMI方法的回调接口调用,防止环形调用产生的死锁
   B、服务器端的线程池,主要用来接收和处理客户端的接口调用请求
   C、ICE运行环境对应的属性集合
   D、对象工厂,主要用来根据实例化接口对象
   E、日志对象和统计对象,其实现日志接口和统计接口用以实现ICE运行过程中的日志记录和网络传输统计
   F、缺省的路由器和定位器
   G、插件管理对象,用来管理ICE运行环境下的插件对象
   H、对象适配器ObjectAdapter,用以维护对象标示和服务对象之间的映射关系
2、Communicator对象的定义类似如下:
class CommunicatorI : public Communicator
{
public:
virtual void destroy();                   // 销毁通信器以及其所管理的ICE运行资源
virtual void shutdown();                  // 关闭通信器,不再接收客户端请求,但是正在执行的请求会执行完成
virtual void waitForShutdown();           // 等待当前通信器结束,意味着正在执行的所有请求都执行完毕
virtual bool isShutdown() const;          // 判断通信器是否已经关闭


virtual ObjectPrx stringToProxy(const std::string&) const;    // 根据对象标示获取对象的代理
virtual std::string proxyToString(const ObjectPrx&) const;    // 根据对象代理获取对象的标示


virtual ObjectPrx propertyToProxy(const std::string&) const;  // 根据给定的属性名称找到对应值的代理对象
virtual PropertyDict proxyToProperty(const ObjectPrx&, const std::string&) const;  // 返回代理对象的属性集


virtual Identity stringToIdentity(const std::string&) const;  // 将字符串标示转换成唯一ID
virtual std::string identityToString(const Identity&) const;  // 将唯一ID转换成字符串


virtual ObjectAdapterPtr createObjectAdapter(const std::string&);  // 通过名字创建对象适配器,端口在配置文件中配置(name.Endpoints)
virtual ObjectAdapterPtr createObjectAdapterWithEndpoints(const std::string&, const std::string&); //通过名称和端口创建适配器
virtual ObjectAdapterPtr createObjectAdapterWithRouter(const std::string&, const RouterPrx&);  // 通过名字和路由器来创建适配器


virtual PropertiesPtr getProperties() const;    // 获取通信器的属性集合
virtual LoggerPtr getLogger() const;            // 获取日志接口对象
virtual StatsPtr getStats() const;              // 获取统计接口对象
};
3、通信器Communicator的创建和初始化方法:
    Ice::CommunicatorPtr ic = Ice::Initialize(argc, argv, initdata);       // 通过命令行参数创建,会解析命令行中ICE相关属性
Ice::CommunicatorPtr ic = Ice::Initialize(initdata);                   // 通过初始化对象创建

Ice::InitializationData initdata;                                      // 构建初始化对象
initdata.properties = Ice::createProperties(args);                     // 设置初始化对象的属性集合
initdata.logger = new MyLoggerI;                                       // 设置对应的日志接口
initdata.stats = new MyStatsI;                                         // 设置对应的统计接口
4、对象适配器是ICE运行环境用来维护ASM的对象,管理ICE运行环境Activate Servant Map
   每个对象适配器有一个和多个接入端点可以接入
   每个对象适配器默认采用communicator的服务器线程进行消息处理,当然也可以通过指定<adapter-name>.ThreadPool.Size来指定自己的线程池
   可以通过Communicator中如下的方法创建一个ObjectAdapter对象:
   createObjectAdapter、createObjectAdapterWithEndpoints、createObjectAdapterWithRouter   
   Adapter对象提供了getName方法获取对象名称、getCommunicator方法获取其所在的通信器对象
   对象适配器是一个有状态的对象,其包含状态包括:Holding(初始状态,不接收请求)、Active(激活状态,正常处理)、Inactive(去激活状态,对象即将销毁)
   对象适配器提供了一系列的API来管理其状态转换:activate、hold、deactivate、waitForHold、waitForDeactivate、destory   
   对象适配器均有一个地址与其对应,类似如:"tcp -h 10.0.0.1 -p 35840 -t 5000 -z:tcp -h 10.0.0.2 -p 35840 -t 5000 -z" (绑定两个地址,超时5s,支持压缩)
   可以调用objectadapter的getEndpoints返回所绑定的地址信息
5、Servant对象时真正的接口服务对象,要想提供服务,需要将Servant对象加入到某一个objectAdapter中,并指定一个对象标示
    virtual ObjectPrx add(const ObjectPtr&, const Identity&);      // 指定ID添加对象,一般调用该方法
    virtual ObjectPrx addWithUUID(const ObjectPtr&);               // 自动生成对象标示来添加对象,仅仅临时的服务对象调用该方法添加
virtual ObjectPtr remove(const Identity&);                     // 从objectadapter的ASM中移除一个服务对象

    virtual ObjectPrx createProxy(const Identity&) const;          // 创建servant对应的代理对象
    virtual ObjectPrx createDirectProxy(const Identity&) const;    // 创建servant的直接代理对象
    virtual ObjectPrx createIndirectProxy(const Identity&) const;  // 创建servant的间接代理对象
6、在生成的ICE接口方法代码中,每个映射方法的后面都携带了一个current参数,Current的定义如下:
   module Ice 
   {
        local dictionary<string, string> Context;
        enum OperationMode { Normal, \Idempotent };
        local struct Current 
   {
            ObjectAdapter adapter;    // 服务器的对象适配器,可以通过它再调用getCommunicator得到通信器
Connection con;           // 连接对象
            Identity id;              // 服务对象标示
            string facet;             // 
            string operation;         // 操作的名称
            OperationMode mode;       // 操作模式
            Context ctx;              // 操作上下文属性
int requestId;            // 请求ID
        };
    };


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 暖瓶盖被吸住了怎么办 做面包和面粘手怎么办 面包面和稀了怎么办 鱼缸氧气泵声音大怎么办 中班安全遇到火灾怎么办反思 汤洒了怎么办活动反思 下水道被塑料盖堵了怎么办 卫生间地漏盖子掉到下水道怎么办 洗手池下水道翻盖打不开了怎么办 培乐多彩泥吃了怎么办 超轻橡皮泥干了怎么办 脑梗脾气大怎么办好啊 牙齿喝饮料烂了怎么办 大门牙缝里黑了怎么办 椰汁拧不开瓶盖怎么办 装蜂蜜的玻璃罐打不开怎么办 蚂蚱没有草吃了怎么办 笔记本电源已接通未充电怎么办 电源已接通未充电怎么办 遮盖纹身好了颜色淡了怎么办 致炫方向盘变重怎么办 xp音频图标没了怎么办 狙击精英3没子弹怎么办 干活干的手腕疼怎么办 干了活不给钱怎么办 干了活要不到钱怎么办 活干完了钱不给怎么办 微信语音聊天音量很小怎么办 一手软件崩溃钱卡住了怎么办 身上皮肤很黑怎么办?好想穿短裙 家里有很多小飞虫怎么办 家里有垃圾中飞出虫子怎么办 雷蛇笔记本很烫怎么办 登录监控器的账号锁了怎么办 悦借钱登录账号被锁怎么办 365账号登录被锁怎么办 台式电脑cpu温度过高怎么办 UG2.0打不开错误—15怎么办 键盘空格键删除键失灵怎么办 耳麦检测声音不分左右怎么办 吃生萝卜胃疼怎么办