简介
ACE实现了组件配置器模式,包含ACE_Service_Object,
ACE_Service_Config和ACE_Service_Repository
组件配置器组成
ACE_Service_Object
ACE_Service_Object相当于Component
ACE_Service_Type
是服务配置器管理的基本组件类型。ACE_Service_Type使用了桥接模式
ACE_Service_Object_Type对应的组件类型为ACE_Service_Object
ACE_Module_Type对应的组件类型为ACE_Module
ACE_Stream_Type对应的组件类型为ACE_Stream
服务相关宏
ACE_FACTORY_DEFINE
定义为
# define ACE_FACTORY_DEFINE(CLS,SERVICE_CLASS) \
void ACE_MAKE_SVC_CONFIG_GOBBLER_NAME(ACE_VERSIONED_NAMESPACE_NAME,SERVICE_CLASS) (void *p) { \
ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object * _p = \
static_cast< ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object *> (p); \
ACE_ASSERT (_p != 0); \
delete _p; } \
extern "C" CLS##_Export ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object *\
ACE_MAKE_SVC_CONFIG_FACTORY_NAME(ACE_VERSIONED_NAMESPACE_NAME,SERVICE_CLASS) (ACE_Service_Object_Exterminator *gobbler) \
{ \
ACE_TRACE (#SERVICE_CLASS); \
if (gobbler != 0) \
*gobbler = (ACE_Service_Object_Exterminator) ACE_MAKE_SVC_CONFIG_GOBBLER_NAME(ACE_VERSIONED_NAMESPACE_NAME,SERVICE_CLASS); \
return new SERVICE_CLASS; \
}
ACE_MAKE_SVC_CONFIG_GOBBLER_NAME拼接字符串得到
_gobble_service_class,其中service_class为用户自定义的类
ACE_MAKE_SVC_CONFIG_FACTORY_NAME拼接字符串得到_make_service_class,其中service_class为用户自定义的类
#define ACE_MAKE_SVC_CONFIG_GOBBLER_NAME(VERSIONED_NAMESPACE,SERVICE_CLASS) ACE_MAKE_SVC_CONFIG_FUNCTION_NAME(_gobble,VERSIONED_NAMESPACE,SERVICE_CLASS)
# define ACE_MAKE_SVC_CONFIG_FUNCTION_NAME(PREFIX,VERSIONED_NAMESPACE,SERVICE_CLASS) PREFIX ## _ ## SERVICE_CLASS
ACE_FACTORY_DEFINE用于定义工厂函数,得到
void _gobble_<SERVICE_CLASS> (void *p)
{
ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object * _p = static_cast< ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object *> (p);
delete _p;
}
extern "C" CLS##_Export ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object * _make_<SERVICE_CLASS> (ACE_Service_Object_Exterminator *gobbler)
{
if (gobbler != 0)
{
*gobbler = (ACE_Service_Object_Exterminator)_gobble_<SERVICE_CLASS>;
}
return new SERVICE_CLASS;
}
ACE_FACTORY_DECLARE
工厂函数的声明,定义为
# define ACE_FACTORY_DECLARE(CLS,SERVICE_CLASS) \
extern "C" CLS##_Export ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object * \
ACE_MAKE_SVC_CONFIG_FACTORY_NAME(ACE_VERSIONED_NAMESPACE_NAME,SERVICE_CLASS) (ACE_Service_Object_Exterminator *);
即声明为
extern "C" CLS##_Export ACE_VERSIONED_NAMESPACE_NAME::ACE_Service_Object * _make_<SERVICE_CLASS> (ACE_Service_Object_Exterminator *)
ACE_SVC_NAME
其定义为
# define ACE_SVC_NAME(SERVICE_CLASS) ACE_MAKE_SVC_CONFIG_FACTORY_NAME(ACE_VERSIONED_NAMESPACE_NAME,SERVICE_CLASS)
即工厂函数名称,即_make_<SERVICE_CLASS>
ACE_STATIC_SVC_DEFINE
静态服务的定义
# define ACE_STATIC_SVC_DEFINE(SERVICE_CLASS, NAME, TYPE, FN, FLAGS, ACTIVE) \
ACE_Static_Svc_Descriptor ace_svc_desc_##SERVICE_CLASS = { NAME, TYPE, FN, FLAGS, ACTIVE };
定义ACE_Static_Svc_Descriptor类型变量描述服务
ACE_STATIC_SVC_REQUIRE
向服务配置器仓库中添加服务
# define ACE_STATIC_SVC_REQUIRE(SERVICE_CLASS)\
class ACE_Static_Svc_##SERVICE_CLASS {\
public:\
ACE_Static_Svc_##SERVICE_CLASS() { \
ACE_Service_Config::insert (\
&ace_svc_desc_##SERVICE_CLASS); \
} \
};\
static ACE_Static_Svc_##SERVICE_CLASS ace_static_svc_##SERVICE_CLASS;
定义ACE_Static_Svc_<SERVICE_CLASS>类,在其构造函数中将ACE_Static_Svc_Descriptor添加到服务仓库中
ACE_Service_Repository
服务仓库类,统一管理服务
svc_rep_:作为ACE_Service_Repository的单例
delete_svc_rep_:是否可以删除标识,如果单例是ACE_Service_Repository自身创建的,则是可以删除,如果不是,则不能由ACE_Service_Repository来删除
open,close,fini:提供仓库的生命周期管理
static ACE_Service_Repository * instance(size_t size = ACE_Service_Repository::DEFAULT_SIZE)
:创建ACE_Service_Repository的单例
static ACE_Service_Repository *instance (ACE_Service_Repository *)
:设置单例,释放由应用来释放
static void close_singleton (void)
:释放申请的单例
insert :向服务仓库中添加服务
find:查找服务名为name的服务
remove:删除服务名为name的服务
resume :恢复挂起的名称为name的服务
suspend:挂起名称为name的服务
服务仓库迭代器
ACE_Service_Config
ACE_Service_Config就是组件配置器模式中的Component Configurator,其结构为
ACE_Service_Gestalt.open:
- load_static_svcs:加载静态服务
- process_directives:处理配置文件中的指令,依赖Svc_Conf.y和Svc_Conf_y.cpp
- process_commandline_directives:处理命令行指令
解析配置文件中的指令是使用yacc做处理,解析的结点结构为
ACE_Location_Node:用于表示动态库的位置