ACE Service Configurator 框架(ACE Service Configurator Framework)

ACE Service Configurator 框架(ACE Service Configurator Framework)
http://hi.baidu.com/pass86/blog/item/52402fdb56024e65d1164eea.html
 
需要的灵活性:在运行时对你的应用进行不同的配置,从而使用不同的服务。
ACE Service Configurator 框架是Component Configurator 模式的一种实现。
配置静态服务
静态服务是代码已经链接进可执行程序的服务。
核心:
1.你的服务类必须是 ACE_Service_Object 的之类。
2.每个服务都需要实现以下挂钩方法:
virtual int init (int argc, ACE_TCHAR *argv[]), 框架会在这个服务的实例进行初始化时调用这个方法。
virtual int fini (void), 框架会在服务实例关闭时调用这个方法。
virtual int info (ACE_TCHAR **str, size_t len), 可选,服务用这个方法类报告关于自身的信息。

ACE把已知的、可配置的静态服务放在一个内部仓库中。每个静态服务都必须用ACE提供一些宏把一些薄记信息插入这个仓库。被放在服务的.cpp文件中。
初始化服务3步曲
ACE_FACTORY_DEFINE(CLS,SERVICE_CLASS)
帮助创建和销毁对象
CLS:你的程序/库用来导入/导出声明的标识符,若不需导出到DLL,可使用 ACE_Local_Service
SERVICE_CLASS:从 ACE_Service_Object派生的类的名称,会在服务初始化时被实例化。

ACE_STATIC_SVC_DEFINE(SERVICE_VAR,NAME,TYPE,FACTORY,FLAGS,ACTIVE)
向仓库登记服务所需全部信息
SERVICE_VAR:创建的静态对象的名称
NAME:一个文本串。在服务配置文件中将使用该名称来标识这个服务。不应包含空格。
TYPE:正在登记的对象类型。 ACE_SVC_OBJ_T。
FACTORY:一个指针,指向用于创建服务对象实例的工厂函数。一般用 ACE_SVC_NAME (SERVICE_CLASS)来产生。
FLAGS:指定在服务关闭时,怎样处置与服务相关的对象。使用 常用ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ
ACTIVE:1表示在程序启动后激活。0表示会根据配置文件中的指令进行初始化。

ACE_STATIC_SVC_REQUIRE(SERVICE_VAR)
确保在你的程序启动时创建你的服务对象的一个实例,并向框架登记它。
SERVICE_VAR:创建的静态对象的名称


静态服务的配置行的格式:
static service-name [arguments]

启动服务

ACE_STATIC_SVC_REGISTER(HA_Status_Descriptor);//HA_Status_Descriptor为创建静态对象名称
ACE_Service_Config::open (argc,
                                             argv,
   ACE_DEFAULT_LOGGER_KEY,
   0);

ACE_Service_Config::open()默认情况下会尝试处理当前目录中名为svc.conf的文件。

设置动态服务

动态服务可以从共享库(DLL)中动态加载。
与静态服务的过程区别:
1)动态的服务类将驻留在共享库(DLL)中,所以声明服务类时( ACE_Service_Object派生的类 )必须使用适当的导出声明。
2)只需要的宏: ACE_FACTORY_DEFINE

你可能感兴趣的:(ACE Service Configurator 框架(ACE Service Configurator Framework))