CN102141922B - 一种微内核插件化应用系统及其实现方法 - Google Patents
一种微内核插件化应用系统及其实现方法 Download PDFInfo
- Publication number
- CN102141922B CN102141922B CN201010106229.5A CN201010106229A CN102141922B CN 102141922 B CN102141922 B CN 102141922B CN 201010106229 A CN201010106229 A CN 201010106229A CN 102141922 B CN102141922 B CN 102141922B
- Authority
- CN
- China
- Prior art keywords
- plug
- unit
- resource
- configuration file
- resource configuration
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000000875 corresponding Effects 0.000 claims description 9
- 239000000203 mixture Substances 0.000 claims description 6
- 230000001276 controlling effect Effects 0.000 claims description 4
- 238000000034 method Methods 0.000 abstract description 10
- 238000009434 installation Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 2
- 210000004940 Nucleus Anatomy 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
Abstract
本发明公开了一种微内核插件化应用系统及其实现方法,用于解决现有软件架构方式下,软件更新效率低、冗余度大等技术问题。本发明实现了一个友好的基于插件的软件更新系统,软件更新时以插件为单位作为更新逻辑单元,减少了更新冗余。使用可扩展的插件结构,通过插件资源描述文件描述插件之间的依赖关系,微内核可根据插件资源配置文件嵌套加载插件资源,扩展性强。微内核依据插件资源配置文件先下载并加载包含关键功能的根插件,再下载并加载根插件所依赖的子插件,先加载的插件先使用,提升了用户体验。本发明实现了自动化插件版本判断、插件的自动下载及基于插件的懒加载程序架构,实现了系统升级的自动化。
Description
技术领域
本发明涉及程序语言的架构设计领域,尤其涉及一种微内核插件化应用系统及其实现方法。
背景技术
在软件的插件化架构实现中,有比较成熟的实现实例,比如eclipse的实现。eclipse的规范主要是基于java语言的架构,在其它语言(比如C++)环境中还没有建立标准化的插件系统。
传统的软件系统通过网络进行软件升级有如下几种方案:
1)直接下载最新的安装包安装。
2)软件系统自己检测新版本,提示用户下载并安装。
3)在方法2的基础上,检测本地的版本,上报服务器,服务器给出增量包的地址,然后客户端下载服务器上的增量升级包并安装。
方案1,2都是比较常用的方法,但效率比较低,即使有一点小的变化也得下载整个安装包。方案3的差量包的生成技术决定了下载的冗余度,而且上述3个方案都需要用户协助并且下载完成安装。
发明内容
有鉴于此,本发明的主要目的在于提供一种微内核插件化应用系统及其实现方法,用于解决现有程序应用架构不够灵活、软件更新效率低、冗余度大等技术问题。
为达到上述目的,本发明的技术方案是这样实现的:
一种微内核插件化程序应用系统的实现方法,包括:
基于插件实现应用的业务逻辑,使用插件资源配置文件描述组成应用的插件所依赖的资源信息,在应用运行时,由微内核依据插件资源配置文件加载所需插件。所述插件所依赖的资源信息包括插件信息和资源信息;所述插件信息至少包括:插件的名称、插件所在动态链接库、插件标识;所述资源信息至少包括资源文件名称。
进一步地,当所述应用基于多个插件实现时,所述插件资源配置文件还用于描述插件之间的依赖关系,所述插件信息还包含所述插件依赖的子插件信息,所述微内核基于所述插件之间的依赖关系先加载上层插件,后加载子插件,先加载的插件先提供服务。
进一步地,所述微内核在依据插件资源配置文件加载插件之前,先从服务器端下载最新版本的插件资源配置文件,并根据所述最新版本的插件资源配置文件从服务器端下载插件所依赖的资源。优选地,所述微内核在加载插件之前,先从服务器端获取当前插件资源配置文件的最新版本号,当依据所述版本号判定本地的插件资源配置文件不是最新版本时,再从服务器端下载最新版本的插件资源配置文件,并根据所述最新版本的插件资源配置文件从服务器端下载插件所依赖资源的最新版本。
基于上述方法,本发明还提出一种微内核插件化应用系统,包括:
插件资源配置文件,用于描述组成应用的插件所依赖的资源信息;所述应用基于插件实现其业务逻辑;所述插件所依赖的资源信息包括插件信息和资源信息;所述插件信息至少包括:插件的名称、插件所在动态链接库、插件标识;所述资源信息至少包括资源文件名称。
微内核,用于依据插件资源配置文件加载组成应用的插件以运行所述应用。
进一步地,当所述应用程序基于多个插件实现时,所述插件资源配置文件还用于描述插件之间的关系,所述插件信息还包含所述插件依赖的子插件信息,所述微内核先加载上层插件,后加载子插件,先加载的插件先提供服务。
进一步地,所述系统还包括:
资源下载服务器,用于根据微内核的下载请求提供插件资源配置文件及插件所依赖资源的下载服务;
所述微内核包括资源下载组件和插件加载器;
资源下载组件,用于根据插件加载器的请求,从资源下载服务器下载最新的插件资源配置文件及插件所依赖的资源;
插件加载器,用于解析插件资源配置文件,并根据插件资源配置文件加载插件。
进一步地,所述系统还包括:
插件版本控制服务器,用于控制插件资源配置文件的版本号;
所述微内核还包括:插件版本控制组件,用于根据插件加载器的请求向插件版本控制服务器发送版本查询请求,获取最新版本的插件资源配置文件版本号,当本地的插件资源配置文件的版本不是最新版本时,所述微内核请求资源下载组件下载最新的插件资源配置文件。
本发明实现了一个友好的基于插件的软件更新系统,软件更新时以插件为单位作为更新逻辑单元,减少了更新冗余。使用可扩展的插件结构,通过插件资源描述文件描述插件之间的依赖关系,微内核可根据插件资源配置文件嵌套加载插件资源,扩展性很强,实现了良好的系统结构。微内核在加载插件时,自动判断插件版本、下载插件资源,实现了系统升级自动化,无需要用户协助。
附图说明
图1为本发明基于插件的程序更新系统结构图;
图2为本发明基于插件的程序更新系统执行程序更新的流程图;
图3为本发明加载子插件的插件加载流程图。
具体实施方式
本发明的基本思想是:程序应用的业务逻辑基于插件来实现,使用插件资源配置文件描述组成程序应用的插件所依赖的资源信息,在程序应用运行时,由微内核依据插件资源配置文件加载所需插件。此外为了保证程序应用的版本为最新,所述微内核在依据插件资源配置文件加载插件时,首先从服务器端下载最新版本的插件资源配置文件,并根据最新版本的插件资源配置文件从服务器端下载该插件所依赖的资源。当程序应用基于多个插件实现时,所述插件资源配置文件还用于描述插件之间的依赖关系,一个插件还可依赖于一个或多个子插件,所述微内核先加载上层插件,后加载子插件,先加载的插件先提供服务,后加载的插件后提供服务,每加载成功一个插件用户即可使用该插件提供的服务,减少用户等待时间,改善了用户体验。
为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照附图,对本发明进一步详细说明。
图1为本发明基于微内核插件化的程序应用系统结构图,该系统包括:程序应用、插件版本控制服务器、资源下载服务器。
插件版本控制服务器,用于控制插件资源配置文件的版本,在插件版本控制服务器中存储有当前各插件对应的插件资源配置文件的最新版本号,所述插件资源配置文件用于描述插件依赖的资源,本发明一具体实施例中,将插件资源配置文件与个性化逻辑对应,一个插件资源配置文件描述一种个性化逻辑所依赖的资源,所述资源包括动态链接库、多媒体支持文件等。
资源下载服务器,用于提供插件资源配置文件及插件所依赖资源的下载;
微内核,为程序应用的核心模块,用于依据插件资源配置文件加载所需插件;还用于向插件版本控制服务器发送版本查询请求,根据插件版本控制服务器返回的插件资源配置文件的最新版本号判断本地插件版本是否为最新,若不是最新,则向资源下载服务器发送下载插件资源配置文件请求,在接收到资源下载服务器返回的最新的插件资源配置文件后,对其解析,从资源下载服务器下载插件资源配置文件中指示插件所依赖的资源。
所述微内核包括:插件加载器、插件版本控制组件、资源下载组件;
插件加载器,用于依据插件资源配置文件加载插件;还用于在微内核初始运行时向插件版本控制组件查询插件资源配置文件的版本;在获得插件版本控制组件反馈的最新的插件资源配置文件的版本号后和本地插件资源配置文件的版本号进行比对,若本地插件版本已经是最新版本,则直接加载,否则根据预置规则获得最新的插件资源配置文件的下载地址,请求资源下载组件下载对应的插件资源配置文件,也可由资源下载组件根据预置规则获得插件资源配置文件的下载地址后从资源下载服务器下载对应的插件资源配置文件;所述微内核所加载的插件可为一个或多个;插件加载器在获得最新插件资源配置文件后还负责对其进行解析,获得插件所依赖的资源标识和/或资源地址,然后请求资源下载组件下载对应的资源。
插件版本控制组件用于向插件版本控制服务器发起版本查询请求,在获得插件版本控制服务器的响应后将查询结果反馈给插件加载器;
资源下载组件用于根据插件加载器的请求,从资源下载服务器下载插件资源配置文件及插件所依赖的资源文件。
本发明另一具体实施例中提供了一种简化的微内核插件化程序应用,该程序应用只包含插件资源配置文件、插件所依赖的资源,微内核中也不包含插件资源配置文件及插件所依赖资源的下载逻辑,默认上述文件都已下载到本地,则微内核可直接加载。该简化结构中,微内核只包含插件加载器,在程序应用运行时,由微内核依据从本地读取的插件资源配置文件加载所需插件。
可选地,本发明另一具体实施例中,只包含微内核和资源下载服务器,微内核在加载插件时,根据预置的规则,依据插件标识和/或产品名称获得对应的插件资源配置文件的下载地址,直接到资源下载服务器上固定的下载地址下载最新的插件资源配置文件,从而确保每次都使用到最新的版本配置。相应地,在微内核中也只需要包含插件加载器和资源下载组件,在微内核运行时,直接请求资源下载组件从资源服务器上下载最新的插件资源配置文件,省去了通过插件版本控制组件进行版本比对的步骤,从而保证了每次运行时,加载运行的都是最新的插件版本。
图2为本发明基于插件的程序更新系统执行程序更新的流程图,具体步骤如下:
步骤201:在微内核启动运行后,插件加载器向插件版本控制组件请求插件版本;
步骤202:插件版本控制组件发送插件版本查询请求消息给插件版本控制服务器,获取插件的版本;请求消息中携带插件标识、产品名称等信息,本发明一具体实施例中,一个插件对应一种个性化逻辑,通过产品名称对该插件类型进行二级分类;
步骤203:插件版本控制组件获取插件版本成功后将获取的插件版本号发送给插件加载器;
步骤204:插件加载器根据与资源下载服务器约定的规则将插件版本号映射为插件资源配置文件的下载地址,请求资源下载组件下载插件对应的插件资源配置文件;
步骤205:资源下载组件从资源下载服务器下载与插件版本对应的插件资源配置文件;
步骤206:资源下载组件将下载的插件资源配置文件发送给插件加载器;
步骤207:插件加载器解析插件资源配置文件,获得插件所依赖的资源的标识、下载地址等信息;插件加载器请求资源下载组件下载对应的资源文件;
步骤208:资源下载组件从资源下载服务器下载资源文件;
步骤209:资源下载组件将下载的资源文件反馈给插件加载器,插件加载器加载所述资源。
本发明中的插件资源配置文件用于描述组成程序应用的插件所依赖的资源信息,插件所依赖的资源信息包括插件信息和资源信息;所述插件信息至少包括:插件的名称、插件所在动态链接库、插件标识等;所述资源信息至少包括资源文件名称。本发明一具体实施例中,插件资源配置文件使用XML(ExtensibleMarkup Language,可扩展标记语言)来描述插件所依赖的资源,通过XML语言不仅可描述插件本身的属性,而且还可结构化的描述插件之间的依赖关系,本发明中一个插件可依赖其它子插件而存在。以下为本发明采用XML语言的插件资源配置文件的实例:
Plugin标签中的Name属性定义插件的名字,LibraryName属性定义插件所在的库,ObjectID属性定义插件在库中的标识ID;Res标签项定义插件依赖的资源文件,在创建插件之前需要下载准备好Res标签中的Item标签所定义的资源;Children标签中可嵌套定义子插件,在本插件初始化完成后会加载子插件,这反应了插件之间的加载关系和依赖关系;PrivateConfig标签用于定义插件的一些配置。
图3为本发明加载子插件的插件加载流程图,为了具有通用性,该流程示例根子插件及根子插件下的子插件的加载流程,根子插件属于某一上层插件,一个插件可能拥有多个同层的兄弟插件,也可拥有多个子插件。程序客户端的微内核依据插件资源配置文件所描述的插件之间的依赖关系,嵌套执行根插件及其子插件所依赖资源的下载,并在上层插件资源下载完毕后首先加载上层插件,先加载的插件先提供服务,实现了懒加载的程序架构。子插件加载流程如下:
步骤301:在插件加载器解析到插件资源配置文件中包含子插件时,开始子插件加载过程;首先插件加载器请求资源下载组件下载当前层级的根子插件所依赖的资源;
步骤302:执行根子插件的预初始化和初始化;
插件对象的预初始化不是必须,但预初始化可提醒插件初始化准备必要的服务接口,便于兄弟节点使用,而且该方法中可以使用factroy创建子对象。
步骤303:将根子插件绑定到上层父插件,即将根子插件集合的指针和父插件关联(在同一个层级可同时包括多个子插件);
步骤304:当解析到根子插件还包含子插件时,通过跟子插件的接口启动加载子插件的流程;
步骤305:插件加载器请求资源下载组件下载根子插件的子插件x的资源;
步骤306:初始化和预初始化子插件x;
步骤307:将子插件x绑定到根子插件上;
步骤308:如果子插件x还依赖下一层的子插件,则插件加载器嵌套执行子插件的加载流程。如果同一层级下有多个子插件,则循环执行步骤304至步骤308。
本发明实现了遍历和寻找插件的服务接口,具体遍历插件和寻找插件的方法为:插件初始化函数被调用时会获得父节点指针,插件加载子节点后,绑定子插件函数被调用会获得子插件节点的指针接口IChildren,这样通过接口可以实现所有的插件遍历。插件通过插件查询函数(QueryInterface)对外提供接口服务,也可以直接继承于IPlugin,但IPlugin方式中一个插件只能够提供一个服务接口。
本发明一具体实施例中,接口创建和动态链接库(dll)管理框架基于对象工厂(factory)模式实现,包含三个方法,分别负责创建对象,销毁对象和注册新dll代替旧dll,本发明所述插件包含于动态链接库中。
创建对象步骤为:
(1)调用系统库装载函数(Loadlibrary)加载dll;
(2)取得创建对象的函数(CreateObject),该函数定义在dll中;
(3)调用CreateObject函数,传入指定的对象标识(dwObjectID),创建指定对象;
(4)调用所创建对象中的方法SetFactory把factory指针传给创建的对象,使之可以使用factory的方法。
系统使用一个dll中的对象时需要让factory创建dll文件中的接口,而如果某一个dll更新,并且文件名变化的话,依赖这个文件名创建某一个接口的库也需要重新编译,因此也就需要重新发布。本发明在管理框架中包含一个新dll注册方法RegisterNewLibrary,该方法使得被依赖dll重新编译,并且文件名变化后在接口不变的情况下,依赖它的dll无需重新编译,从而减少了重新编译的库,减少了系统更新的代价。
销毁对象步骤:
(1)调用对象Finalize函数,通知对象做析构前的处理;
(2)如果是同步析构则直接调用对象的Free方法,析构对象;
(3)如果是异步析构则在下一消息循环调用对象的Free方法,析构对象。
本发明的插件发布流程为:
(1)实现IPlugin接口,生成包含插件的库文件;
(2)为库文件命名后,将库文件放到资源下载服务器;
(3)把插件依赖的资源参数,包括名称、属性、地址等,添加到插件资源配置文件,形成新的插件资源配置文件;
(4)升级插件版本控制服务器上的插件版本号或插件资源配置文件的版本号。
上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (6)
1.一种微内核插件化应用系统的实现方法,其特征在于,包括:
基于插件实现应用的业务逻辑,使用插件资源配置文件描述插件所依赖的资源信息,在应用运行时,由微内核依据插件资源配置文件加载所需插件;其中,所述插件资源配置文件与个性化逻辑对应,一个插件资源配置文件描述一种个性化逻辑所依赖的资源;所述微内核包括资源下载组件和插件加载器;
所述微内核依据插件资源配置文件加载插件时,先经由资源下载组件从服务器端下载最新版本的插件资源配置文件,资源下载组件再基于插件加载器的请求根据最新版本的插件资源配置文件从服务器端下载该插件所依赖的资源;
其中,当所述应用基于多个插件实现时,所述插件信息还包含所述插件依赖的子插件信息;所述微内核基于所述插件之间的依赖关系先加载上层插件,后加载子插件,先加载的插件先提供服务。
2.根据权利要求1所述的方法,其特征在于,所述插件所依赖的资源信息包括插件信息和资源信息;所述插件信息至少包括:插件的名称、插件所在动态链接库、插件标识;所述资源信息至少包括资源文件名称。
3.根据权利要求1所述的方法,其特征在于,所述微内核在加载插件之前,先从服务器端获取当前插件资源配置文件的最新版本号,当依据所述版本号判定本地的插件资源配置文件不是最新版本时,再从服务器端下载最新版本的插件资源配置文件,并根据所述最新版本的插件资源配置文件从服务器端下载插件所依赖资源的最新版本。
4.一种微内核插件化应用系统,其特征在于,包括:
插件资源配置文件,用于描述组成应用的插件所依赖的资源信息,所述应用基于插件实现其业务逻辑;其中,所述插件资源配置文件与个性化逻辑对应,一个插件资源配置文件描述一种个性化逻辑所依赖的资源;
资源下载服务器,用于根据微内核的下载请求提供插件资源配置文件及插件所依赖资源的下载服务;
微内核,用于依据插件资源配置文件加载组成应用的插件以运行所述应用;其中,所述微内核在依据插件资源配置文件加载插件时,首先从服务器端下载最新版本的插件资源配置文件,并根据最新版本的插件资源配置文件从服务器端下载该插件所依赖的资源;
所述微内核包括资源下载组件和插件加载器;
资源下载组件,用于根据插件加载器的请求,从资源下载服务器下载最新的插件资源配置文件及插件所依赖的资源;
插件加载器,用于解析插件资源配置文件,并根据插件资源配置文件加载插件;
当所述应用基于多个插件实现时,所述插件信息还包含所述插件依赖的子插件信息;所述微内核基于所述插件之间的依赖关系先加载上层插件,后加载子插件,先加载的插件先提供服务。
5.根据权利要求4所述的系统,其特征在于,所述插件所依赖的资源信息包括插件信息和资源信息;所述插件信息至少包括:插件的名称、插件所在动态链接库、插件标识;所述资源信息至少包括资源文件名称。
6.根据权利要求4所述的系统,其特征在于,所述系统还包括:
插件版本控制服务器,用于控制插件资源配置文件的版本号;
所述微内核还包括:插件版本控制组件,用于根据插件加载器的请求向插件版本控制服务器发送版本查询请求,获取最新版本的插件资源配置文件版本号,当本地的插件资源配置文件的版本不是最新版本时,所述微内核请求资源下载组件下载最新的插件资源配置文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010106229.5A CN102141922B (zh) | 2010-01-29 | 一种微内核插件化应用系统及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010106229.5A CN102141922B (zh) | 2010-01-29 | 一种微内核插件化应用系统及其实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102141922A CN102141922A (zh) | 2011-08-03 |
CN102141922B true CN102141922B (zh) | 2016-12-14 |
Family
ID=
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1641569A (zh) * | 2004-01-06 | 2005-07-20 | 英业达股份有限公司 | Java小应用程序下插件功能的实现方法 |
CN1968154A (zh) * | 2006-09-15 | 2007-05-23 | 华为技术有限公司 | 使用插件进行业务扩展的系统及其方法 |
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1641569A (zh) * | 2004-01-06 | 2005-07-20 | 英业达股份有限公司 | Java小应用程序下插件功能的实现方法 |
CN1968154A (zh) * | 2006-09-15 | 2007-05-23 | 华为技术有限公司 | 使用插件进行业务扩展的系统及其方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7640542B2 (en) | Managing midlet suites in OSGI environment | |
CN104714828B (zh) | 应用安装、运行方法及装置 | |
US7263699B2 (en) | Preparation of a software configuration using an XML type programming language | |
US6353926B1 (en) | Software update notification | |
US8645945B2 (en) | Method and apparatus for dynamic middleware assembly | |
US7954087B2 (en) | Template integration | |
US20040194059A1 (en) | Method to deploy software using an open service gateway initiative (OSGi) framework | |
US20130332917A1 (en) | Out of Band Services Updates | |
US8762977B2 (en) | Mobile device software management method and apparatus | |
US20040088397A1 (en) | System and method for management of software applications | |
CN100421072C (zh) | 实现软件升级的方法 | |
US20080256225A1 (en) | Osgi-Based Dynamic Service Management Method for Context-Aware Systems | |
CN105373406B (zh) | 基于Android平台的应用布局动态切换方法及系统 | |
CN106406768A (zh) | 安卓系统用户数据分区调整方法及装置 | |
CN105516154A (zh) | 应用于SEAndroid系统的安全策略配置方法及装置 | |
CN105144085B (zh) | 针对存储设备的软件框架 | |
CN114968406B (zh) | 一种插件管理方法、装置、电子设备及存储介质 | |
CN102654835B (zh) | Linux操作系统发行制作方法 | |
US20070233717A1 (en) | Generic product configuration framework for building product specific installers | |
US7890945B2 (en) | Method for versioning classes loaded in an OSGi-enabled J2EE environment | |
CN115543546A (zh) | 一种基于Spring的模块热部署方法及系统 | |
CN106502685A (zh) | 一种数据库的升级方法及系统 | |
CN102141922B (zh) | 一种微内核插件化应用系统及其实现方法 | |
EP2643948A1 (en) | Network element configuration management | |
CN105122209A (zh) | 从软件框架提供的网络服务 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |