- 博客(32)
- 收藏
- 关注
原创 宏定义中的可变参数问题
早期的c语言版本:#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)但是这样定义有个问题,就是在没有输入参数时无法再调用该宏:debug("test");可以通过如下方式修订:#define debug(format, ...) fprintf (stderr, format, ##_
2012-06-20 16:59:15
831
原创 IcePatch2的使用
1、IcePatch2是一个用来同步文件系统的ICE工具集,可以用来进行应用程序发布包的升级发布。 A、构建应用程序发布目录 B、将应用程序发布包,非zip格式安装到发布目录 C、执行icepatch2calc来计算安装目录下的校验和 D、执行icepatch2server来运行patch服务器 E、在待同步的目标服务器上运行patch2的客户端程序(可以是
2012-05-12 11:33:16
2083
原创 ICESSL使用备忘
1、任何ICE的程序如果试图使用SSL的安全连接,那么对应的应用必须加载SSL插件2、配置程序在启动过程中加载SSL插件: Ice.Plugin.IceSSL=IceSSL:createIceSSL IceSSL.DefaultDir=/opt/certs IceSSL.CertFile=pubkey.pem IceSSL.KeyFile=privkey.pem
2012-05-08 22:48:50
2304
原创 ICE的Glacier2使用
1、使用Glacier2的步骤: A、编写一个Glacier2的配置文件,参见样例 B、设置Glacier2的访问鉴权(密码或者证书),passwords文件每行样例"test xxMqsnnDcK8tw" 可以通过openssl的passwd命令创建密码 C、定制Glacier2的session管理对象 D、启动Glacier2,glacier2router
2012-05-01 00:06:12
9616
原创 关于mysql的udf插件问题
今天调试应用程序,在程序中使用了mysql的udf函数插件和触发器来自动更新memcache的内存记录由于测试需要,想要更新udf动态库,同时使用新的动态库名称。原以为将原有的动态库插件删除,将新的动态库插件拷贝到mysql的插件目录即可。结果测试不行,发现找不到udf函数。在数据库中mysql.func表中存在函数相关信息。试图修改成新的动态库名称,修改完后仍旧不行,还是找不到udf
2012-04-30 02:41:34
1188
原创 windows ICE 调试问题总结
问题一、程序中如果加载了SSL插件,则导致communicator.initalize中报告异常:unable to load entry point `IceSSL:createIceSSL' 后经定位发现,由于系统中存在两个libeay32.dll库,由于非ICE目录下的libeay32.dll库不兼容ICE的ssl库,导致异常产生,
2012-04-26 23:10:40
3229
转载 IceSSL使用
==========【IceSSL使用的证书生成方法.txt】======================------------使用iceca脚本生成CA----------在执行脚本前先设置环境变量export ICE_CA_HOME=/home/mayjie/certs #指向证书存放目录export PYTHONUNBUFFERED=1 #
2012-04-26 09:12:12
4277
2
转载 vmware安装vmware tools
下面是安装步骤:1.启动Rad Hat(图形界面方式登陆),并且以管理员的身份登陆。2.在VMware虚拟机的菜单中点击:虚拟机->安装VMware 工具->install。3.Red Hat 自动挂载VMware Tools的虚拟光驱,并显示在桌面。4.进去VMware Tools的虚拟光驱里,把VMwareTools-*.tar.gz复制到/tmp目录。5.进去/tmp
2012-04-10 22:53:13
564
转载 解析虚拟VMware三种网络模式根本区别
提到VMware大家就想起了虚拟机技术,虚拟机技术在最近的几年中得到了广泛的发展,一些大型网络服务商都开始采用虚拟机技术,不仅节省了投资成本,更节约了能源的消耗。 我们知道VMware也分几种版本,普通用户最常用的就是Workstation,但是不管使用哪种版本,我们都能发现在安装过程中让我们选择网络模式。在默认情况下会选中桥接模式,但有用户会问其他模式是干什么用的?有时候选择了其他模式
2012-04-10 21:56:35
810
原创 ICE的消息编码规则
1、代表size的长度字段: 值小于255用1个字节标示,如果大于255则使用5个字节,第一个字节为255,后续的4个字节标示真实长度2、基本数据类型按照小端序进行实际长度编码3、字符串被编码成size加utf-8的实际内容,注意不包含结束字符 4、sequence被编码成size加实际元素编码5、枚举值被按照元素个数来进行字节编码,枚举的第一个元素取值被编码成0
2012-04-08 17:20:04
2268
原创 ICE的连接机制
1、当使用ICE的proxy进行方法调用时,ICE运行环境会建立一个到服务器的连接。当proxy提供了多个endpoint时 默认的ICE运行环境选择endpoint的行为为random,可以通过ice_endpointSelection设置选择endpoint的方式为order 也可以通过设置属性:Ice.Default.EndpointSelection、name.Endpoi
2012-04-08 12:42:49
16394
2
原创 字符编码介绍
1、ASCII码 美国人发明的字符编码方式,用一个字节即8个bit来编码字符,共可以编码256个字符,但是它的最高位一直是0,仅仅编码了128个符号这些符号包含基本可见字符和32个不可见的控制符号2、UniCode unicode是一种全世界符号的编码集合,它将全世界语言范围内的所有字符符号都进行了一个唯一二进制表示方式。这些二进制的表示方式可能需要1个字节、2
2012-04-03 23:00:23
844
原创 ICE的异步动态调用
1、ICE除了提供同步的动态调用,还提供了异步的动态调用: Ice::AsyncResultPtr begin_ice_invoke(const std::string& operation, Ice::OperationMode mode, const std::pair& inParams,
2012-04-02 22:10:58
2843
原创 ICE的同步动态调用
1、ICE环境下基于slice上的proxy方法调用是传统的静态RPC调用方式,ICE提供了另外一种动态的调用方式,可以不依赖于 具体的slice接口定义,具体接口如下: bool ice_invoke(const std::string& operation, Ice::OperationMode mode, const std::vector& inParams,
2012-04-02 22:10:36
3176
原创 ICE的输入流和输出流
1、ICE提供流式接口InputStream来进行对象的解码操作,通过如下方法构造一个输入流对象: InputStreamPtr createInputStream(const Ice::CommunicatorPtr& communicator, const std::vector& data);2、在输入流对象InputStream上提供了多个重载的read方法,用来从输入流中提取
2012-04-01 22:40:34
2945
原创 ice的facet使用
1、一个ICE对象在服务器端可以有多个表现方式,这种表现方式可称为facet,每个facet其实是servant对象 的一组功能集合的名称,在服务器端,操作对象的facet有如下API: local interface ObjectAdapter { Object* addFacet(Object servant, Identity id, string
2012-04-01 22:39:56
2490
原创 ICE的插件使用
1、实现插件接口 local interface Plugin { void initialize(); void destroy(); }; extern "C" { ICE_DECLSPEC_EXPORT Ice::Plugin* functionName(const Ice::
2012-03-30 22:55:21
2785
原创 ICE的日志和统计接口
1、获取日志对象: virtual LoggerPtr getLogger() const;2、日志对象提供的方法: local interface Logger { void print(string message); void trace(string category, string message); vo
2012-03-30 22:12:06
3458
原创 ICE的proxy使用
1、在ICE的客户端获取代理的方式如下: A、Ice::ObjectPrx p = communicator->stirngToProxy("MyProxy:tcp -h 10.0.0.1 -p 12345"); B、Ice::ObjectPrx p = communicator->propertyToProxy("MyProxy"); 在配置文件中配置MyProx
2012-03-28 22:46:32
6640
原创 ICE运行环境备忘三
1、ICE是一个多线程的运行环境,每个communicator通信器中都有一个Leader-Follower的线程池负责处理客户端的服务请求, ICE的线程池有一系列的属性用以来控制线程池的运行,主要包含如下内容: ThreadPoolName.Size = 3 # 线程池初始线程个数3个,注意默认大小1个 ThreadPoolN
2012-03-28 22:45:34
5978
原创 linux环境下归档两个静态库为一个静态库
如果在你的项目中有两个工程,分别编译成liba.a和libb.a,这时如果要开放一个新的api库给客户端使用libc.a但是在libc.a中依赖了liba.a和libb.a,那么发布的时候不可能发布三个库,只能发布一个库libc.a,那么就需要将liba.a和libb.a打入到libc.a中,可通过如下命令方式来做:rm libc.a rm ar.mac echo CREATE
2012-03-27 12:23:07
1146
原创 ICE运行环境备忘二
1、需要理解ICE运行环境对客户端请求的调用分派语义,即当一个请求到来时,如何查找到对应到servant服务对象进行消息处理 A、在ASM 中查找该标识。如果ASM 有这样一个条目,就把请求分派到对应的servant。 B、如果到来的对象标识的范畴不是空的,就查找针对该范畴注册的servant定位器。如果有这样的servant 定位器,就调用这个定位器的locate,
2012-03-25 17:08:28
1547
原创 ICE运行时环境备忘一
1、ICE运行环境的唯一句柄Communicator对象,其用来管理ICE运行环境下所有对象资源,包含但不限于: A、客户端线程池,主要用来进行AMI方法的回调接口调用,防止环形调用产生的死锁 B、服务器端的线程池,主要用来接收和处理客户端的接口调用请求 C、ICE运行环境对应的属性集合 D、对象工厂,主要用来根据实例化接口对象 E、日志对象和统计对象,其实
2012-03-25 14:50:32
4576
原创 ICE的属性设置
1、ICE的属性即"name=value"值,具体的name范畴可以见后续描述。可以在程序中设置属性值到ICE的运行环境中 但一定要注意在Communicator::Initialize方法调用之前设置好值,在之后设置的值会被ICE的运行环境忽略2、属性名不能包含如下前缀:Ice、IceBox、IceGrid、IcePatch2、IceSSL、IceStorm、Freeze、Glaci
2012-03-24 22:38:34
4053
原创 ICE的工具集基本功能
1、为了能够生成一个全局的唯一标示,主要用来在adapter注册servant的时候需要ID,可以通过该方法获得一个 string IceUtil::generateUUID()2、工具集提供了两个字符集的转换函数,主要用于unicode和utf8之间的转换 wstring IceUtil::stringToWstring(const string& str, Conver
2012-03-24 16:06:08
7302
原创 利用rational rose做c++的逆向工程之备忘
1. ANSI C++(标准C++)逆向工程(Reverse Engineer)使用标准C++逆向工程,需要在组件图(component view)中创建一个组件(component),设置好需要进行转换的组件的信息,也就是该组件的语言、所包含的文件、文件所在的路径、文件后缀等等信息,然后Reverse Engineer就可以根据给定的信息将代码转换成类图了。a) 右键点击组件视图(Com
2012-03-23 19:04:01
2868
1
原创 ICE的服务器对象实现
1、需要增加一个类继承至生成的接口类,并实现接口类的虚方法。2、创建实现类的对象3、调用adpater的add方法将创建的对象绑定到adapter中,并传入一个全局唯一标示符,该唯一标示可以通过如下方法生成: adapter->add(hello, communicator()->stringToIdentity("hello")); adapter->addWithUUI
2012-03-22 22:57:10
2058
原创 slice的AMD方法实现与调用
借由一个interface来说明amd方法的使用:interface MyInterface{int NormalOp(string name, out long l);["amd"] int AmdOp(string name, out long l);};生成的c++代码如下:class MyInterface : public virtual IcePro
2012-03-22 22:55:45
1508
原创 ice环境初始化和slice方法调用
1、客户端环境调用#includeint main(int argc, char* argv[]){ Ice::CommunicatorPtr ic; try { ic = Ice::initialize(argc, argv); Ice::ObjectPrx base = ic->stringToProxy("MyProx
2012-03-21 22:17:48
3069
原创 ICE的AMI方法调用
从一个例子来说明AMI方法的使用,例如如下的接口定义:interface MyInterface { int op(double d, string s, out int i, out long l);};其映射生成的方法如下:class MyInterface : public virtual IceProxy::Ice::Object{public
2012-03-21 19:23:07
2736
原创 slice的c++映射
1、Slice标识符映射到相同的C++标识符。(尽量不要使用与语言相关的标示符)2、Slice模块映射到C++名字空间。3、Slice基本数据的bool和string映射到C++的bool和std::string,其他均映射到ice的跨平台数据类型4、slice枚举映射到c++的枚举5、slice结构映射到c++的同名结构,其成员变量映射成同名的c++成员变量。为了支持标准库的集合
2012-03-21 19:22:05
5361
原创 ICE的slice定义注意事项
一、源文件规则1、文件扩展名必须为.ice2、在使用#include来包含其他的ice定义文件时,只能使用3、每个slice定义文件中最好加上#ifndef的宏定义,防止文件的双重包含4、文件必须是utf-8编码的二、词法规则1、slice文件支持c++的单行和多行注释2、slice定义中的关键字均为小写3、slice文件中关键字不能以下划线开始和结尾,当然
2012-03-21 19:17:01
8793
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人