发明内容
有鉴于此,本发明的主要目的在于提供一种管理对象创建方法和装置,以解决现有的管理对象创建方法,使得操作维护代理缺乏灵活性的问题。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种管理对象MO创建方法,包括:
根据各类单元的全局唯一标识,创建与所述各类单元相对应的结构体;
在所创建的结构体中设置创建MO的静态函数,并将静态函数指针保存在所述结构体中;
根据输入的管理单元的全局唯一标识,查找与所输入的全局唯一标识相对应的结构体,并根据所查找的结构体中的静态函数指针,调用所述静态函数创建与所述管理单元相对应的MO。
所述创建与各类单元相对应的结构体,进一步包括:将所创建的结构体链接成单向链表,并存储所述单向链表的头指针;则所述查找与所输入的全局唯一标识相对应的结构体,是根据所述单向链表的头指针遍历所述单向链表进行查找的。
所述创建与各类单元相对应的结构体,进一步包括:采用所述各类单元的名称加上固定的前缀或后缀的方式对所创建的结构体进行命名。
所述输入管理单元的全局唯一标识的方式为网管输入或配置文件输入。
所述全局唯一标识包括所述各类单元的类名字符串和类型标识ID中的至少一种。
本发明还提供了一种MO创建装置,包括:
结构体创建模块,用于根据各类单元的全局唯一标识,创建与所述各类单元相对应的结构体;
静态函数设置模块,用于在所创建的结构体中设置创建MO的静态函数,并将静态函数指针保存在所述结构体中;
MO创建模块,用于根据输入的管理单元的全局唯一标识,查找与所输入的全局唯一标识相对应的结构体,并根据所查找的结构体中的静态函数指针,调用所述静态函数创建与所述管理单元相对应的MO。
所述结构体创建模块包括:
结构体创建子模块,用于根据各类单元的全局唯一标识,创建与所述各类单元相对应的结构体;
链表构造子模块,用于将所创建的结构体链接成单向链表,并存储所述单向链表的头指针。
所述MO创建模块包括:
链表遍历子模块,用于根据所述单向链表的头指针遍历所述单向链表中的各个结构体,查找与所输入的全局唯一标识相对应的结构体;
MO创建子模块,用于根据所查找的结构体中的静态函数指针,调用所述静态函数创建与所述管理单元相对应的MO。
所述全局唯一标识包括所述各类单元的类名字符串和对象类型标识ID中的至少一种。
本发明所提供的管理对象创建方法和装置,创建包含全局唯一标识的结构体,并在结构体中设置创建MO的静态函数;需要创建管理单元对应的MO时,根据动态输入的全局唯一标识调用结构体中的静态函数即可实现MO的创建。本发明利用全局唯一标识创建MO,使得操作维护代理具有较好的灵活性;且本发明无需编写代码,操作简单;另外,本发明中的结构体链接成单向链表,易于扩展。
具体实施方式
下面结合附图和具体实施例对本发明的技术方案进一步详细阐述。
本发明所提供的一种MO创建方法,如图1所示,该方法主要包括以下步骤:
步骤101,根据各类单元的全局唯一标识,创建与各类单元相对应的结构体。
在网元管理设备上,根据网元设备中各类单元的全局唯一标识,创建与各类单元相对应的结构体。结构体是动态创建机制的核心,各种不同类的单元分别对应不同的结构体,结构体中存储对应某类单元的全局唯一标识。
本发明中的全局唯一标识是指用来区分不同种类单元的标识,在实际应用中,各类单元的类名字符串和类型ID都可用来区分不同种类的单元,且不同种类的单元所对应的类名字符串和类型ID都不相同,因此,可以将类名字符串和类型ID中的至少一种作为各类单元的全局唯一标识。需要指出的是,本发明所指的全局唯一标识并不仅仅局限于类名字符串和类型ID,也包括其他可用来区分不同种类单元的标识。
另外,可以采用各类单元的名称加上固定的前缀或后缀的方式,对所创建的各个结构体进行命名。例如:创建与单板所对应的结构体时,对该结构体的命名可以为DYN BOARD或BOARD DYN。
步骤102,在所创建的结构体中设置创建MO的静态函数,并将静态函数指针保存在结构体中。
各个结构体中的静态函数是用来创建各类单元相对应的MO而存在的,调用结构体中所保存的静态函数指针,即可实现对静态函数的调用。
步骤103,根据输入的管理单元的全局唯一标识,查找与所输入的全局唯一标识相对应的结构体,并根据所查找的结构体中的静态函数指针,调用静态函数创建与管理单元相对应的MO。
例如:管理单元为单板A,输入单板A的全局唯一标识为a,则查找到存储标识为a的结构体,并利用结构体中的静态函数指针,调用静态函数创建与单板A相对应的MO。创建完与单板A相对应的MO之后,根据全局唯一标识a从网元管理设备的数据库中读取单板A所对应的属性参数,属性参数存储在创建的MO中。网元管理设备可以根据MO中的所存储的属性参数,通过对MO的操作实现对单板A的管理;并且将对单板A进行管理的结果,提供给数据库,以进行数据库中对应单板A的状态更新。
在操作维护代理上,当新增加一个管理单元时,动态输入管理单元的全局唯一标识,这个全局唯一标识可以由网管人工输入,也可以采用配置文件的形式自动输入。网元管理设备根据输入的管理单元的全局唯一标识,查找所有结构体中与所输入的全局唯一标识相对应的结构体,并根据所查找到结构体中的静态函数指针,调用结构体中的静态函数创建与管理单元相对应的MO。
本发明中,可以将上述所创建的各个结构体构造成单向链表的形式,从而方便对结构体的查找。下面结合构造单向链表的实施例,对上述本发明的MO创建方法进一步详细阐述。本发明实施例的MO创建方法的流程图,如图2所示,主要包括以下步骤:
步骤201,创建结构体。
在网元管理设备上,根据网元设备中各类单元的全局唯一标识,创建与各类单元相对应的结构体。每一个结构体中保存了某一类单元的全局唯一标识。
结构体的创建程序如下:
struct CDynMO
{
int MOType;
T*(*m_pfnCreateDynMO)();
T*CreateDynMO();
static CDynMO<T>*GetDynMO(int type);
static CDynMO<T>*pFirstMO;
CDynMO<T>*m_pNextMO;
};
其中,T表示某类单元;MOType表示对应某类单元的全局唯一标识,MOType可以包括类名字符串和类型ID中的至少一种;m_pfnCreateDynMO表示创建MO的静态函数;CreateDynMO表示静态函数的外部调用接口;GetDynMO表示获取静态函数的外部调用接口;pFirstMO表示单向链表的头指针;m_pNextMO表示指向本结构体所在结点的下一个链表结点的指针。
步骤202,在所创建的结构体中设置创建MO的静态函数,并将静态函数指针保存在结构体中。
步骤203,创建结构体的单向链表。
将所有的结构体链接成一个单向链表,单向链表的结构如图3所示,图中的链表包括n个结点,单向链表中的每个结点对应一个结构体,且每个结点都是由信息域和指针域组成的,信息域用来存储结构体,指针域用来指向下一结点。head表示单向链表的头指针,单向链表的尾结点的指针域为空。
步骤204,根据动态输入的全局唯一标识,从链表头开始遍历整个结构体的单向链表。
当新增加一个管理的单元时,网元管理设备根据动态输入的全局唯一标识和保存的链表头指针,从结构体的单向链表头开始,对整个单向链表进行遍历。
步骤205,判断在单向链表中是否匹配到与输入的全局唯一标识相同的结点,如果是,则转到步骤206;否则,结束该流程。
如果在对单向链表的遍历操作结束之前,能够匹配到某个结点中所存储的全局唯一标识与输入的全局唯一标识相同,则表明查找到与管理单元所对应的结构体;如果在对单向链表的遍历操作结束之前,没能匹配到与输入的全局唯一标识相同的结点,则表明单向链表中不存在与管理单元所对应的结构体,从而也就无法实现对管理单元进行MO的创建,结束该流程。
步骤206,调用所查找到的结点中的创建MO的静态函数,对管理单元进行MO的创建。
利用结点中所保存的静态函数指针,调用创建MO的静态函数,实现MO的创建。
为实现上述本发明的MO创建方法,本发明还提供了一种MO创建装置,可适用于网元管理设备中,如图4所示,该装置包括:结构体创建模块10、静态函数设置模块20和MO创建模块30。其中,结构体创建模块10,用于根据各类单元的全局唯一标识,创建与各类单元相对应的结构体。静态函数设置模块20,连接结构体创建模块10,用于在结构体创建模块10所创建的结构体中设置创建MO的静态函数,并将静态函数指针保存在所创建的结构体中。MO创建模块30,连接结构体创建模块10,用于根据输入的管理单元的全局唯一标识,查找与所输入的全局唯一标识相对应的结构体,并根据所查找的结构体中的静态函数指针,调用静态函数创建与管理单元相对应的MO。
其中,结构体创建模块10包括:结构体创建子模块11和链表构造子模块12。结构体创建子模块11,连接静态函数设置模块20,用于根据各类单元的全局唯一标识,创建与各类单元相对应的结构体。链表构造子模块12,连接结构体创建子模块11,用于将所创建的结构体链接成单向链表,并存储单向链表的头指针。
其中,MO创建模块30包括:链表遍历子模块31和MO创建子模块32。链表遍历子模块31,连接链表构造子模块12,用于根据单向链表的头指针遍历单向链表中的各个结构体,查找与所输入的全局唯一标识相对应的结构体。MO创建子模块32,连接链表遍历子模块31,用于根据所查找的结构体中的静态函数指针,调用静态函数创建与管理单元相对应的MO。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。