开放平台模块化的方法和装置制造方法
【专利摘要】本发明提供了开放平台模块化的方法和装置,包括,基于多模块进行请求路由和资源隔离管理;通过请求对应的方法名称和版本号码来统一管理模块资源,同时进行多版本运行和管理。基于节点模式进行模块版本部署,同一版本模块可运行在不同的节点。本发明实现模块服务高性能、高可用,动态部署更加简单,运行可控,模块开发降低耦合。
【专利说明】开放平台模块化的方法和装置
【技术领域】
[0001]本发明涉及程序开发领域,特别涉及一种开放平台模块化的方法和装置。
【背景技术】
[0002]开放平台模块化依托OGSI (Open Service Gateway Initiative)技术实现模块生命周期管理和服务注册。通过节点控制实现模块热部署和热控制,多模块版本可共存提供服务。降低了开放平台API开发的耦合度,模块通过版本控制,实现部署、启动、停止、卸载,使模块的运行能通过服务平台进行管理监控,对整个开放平台的稳定运行提供全套的治理功能。同时实现模块的多版本仓库管理,所有模块在仓库中都存储物理文件,对于不同版本的比较和回滚提供了有效保障。
[0003]然而,由于模块API的业务复杂性,多模块之间存在相互依赖的问题,不仅包括开放平台模块化存在的类编译依赖,对于复杂的模块,还存在双向依赖和循环依赖的问题。
[0004]针对相关技术中所存在的上述问题,目前尚未提出有效的解决方案。
【发明内容】
[0005]为解决上述现有技术所存在的问题,本发明提出了一种开放平台模块化的方法和装置,实现模块动态部署和动态卸载,提供模块仓库管理和版本控制,实现服务热更新,降低开发耦合度。
[0006]本发明采用如下技术方案:一种开放平台模块化方法,包括:
[0007]控制台基于节点模式对模块进行部署和安装,供网站端读取;
[0008]当启动模块时,通过控制台将当前模块注册到模块资源管理器中;
[0009]利用模块仓库实现模块的多版本存储,同一版本模块可运行在不同的节点。
[0010]优选地,该方法还包括:当停止模块时,将模块资源从开放平台的模块资源管理器中移除。
[0011]优选地,所述部署和安装步骤进一步包括模块上传、模块解析和模块元数据存储,
[0012]其中,模块资源管理器与开放平台网站端数据通过数据库进行统一展现和管理,上传到指定的节点上并且加载和实例化相应的jar文件,解析该jar文件的API描述元数据到数据库中,网站通过读取数据库的API来显示相应的API文档。
[0013]优选地,该方法还包括:
[0014]当卸载模块时,将模块从开放平台的模块资源管理器移除,并从模块资源管理器中移除对应的模块资源。
[0015]优选地,所述启动模块的步骤进一步包括:
[0016]响应于用户请求,控制台将指定的模块示例加载到当前模块资源管理器中,并在启动时更新API状态,通过读取数据库,网站显示API文档,
[0017]其中,将模块的入库类ServiceMethodBean注解作为统一模块的入口类,将其已安装的资源和classLoader切换到当前的类加载器中,并且注册到模块资源管理器中,用于加载将要启动的模块的资源,通过代理找到启动的模块。
[0018]优选地,在资源定位过程中,使用调用的方法名称与版本号的组合来确定唯一的接口服务。
[0019]优选地,所述停止模块的步骤进一步包括:
[0020]响应于用户请求,控制台从当前资源管理器中将指定的模块实例移除,并在实时更新API状态,通过读取数据库,网站显示API文档,将模块的资源从开放平台的模块资源管理器中移除,开放平台就忽略所有停止的模块,进入的请求将无法处理,开放平台前端网站对应的API文档以及描述均被标记为暂停使用。
[0021]优选地,所述卸载模块的步骤进一步包括:
[0022]控制台从模块资源管理器中移除对应的模块资源,同时该模块的实体jar文件也将移除,开放平台前端网站对应的API文档,处于历史版本,同时网站不显示该API相关描述。
[0023]优选地,在所述模块多版本存储中,采用maven的存储目录结构,模块仓库在控制台上进行统一管理,所有的模块部署到必须上传到模块仓库上,统一分发和部署到对应的节点。
[0024]根据本发明的另一方面,提供了一种开放平台模块化装置,包括:
[0025]安装单元,用于基于节点模式对模块进行部署和安装,供网站端读取;
[0026]启动单元,用于将当前模块注册到模块资源管理器中以启动该模块;
[0027]模块仓库单元,用于实现模块的多版本存储,其中同一版本模块可运行在不同的节点;
[0028]停止单元,用于将模块资源从开放平台的模块资源管理器中移除,以停止该模块;
[0029]卸载单元,用于将模块从开放平台的模块资源管理器移除,并从模块资源管理器中移除对应的模块资源;
[0030]其中,所述装置使用要调用的方法名称与版本号的组合来确定唯一的资源。
[0031]相比于现有技术,本发明的技术方案的具有以下优点:
[0032]模块在平台中的动态部署更加简单,运行可控,模块开发降低耦合,模块更新实现热部署控制,多模块版本共存,通过仓库和版本控制,将模块升级风险降低到最小化,并且不同历史版本的模块可相互比较,模块接口访问实现动态可控,可针对模块进行方法级控制启动停止。
【专利附图】
【附图说明】
[0033]图1是根据本发明实施例的开放平台模块化方法的流程图。
[0034]图2是根据本发明实施例的模块安装过程的流程图。
[0035]图3是根据本发明实施例的模块启动过程的流程图。
[0036]图4是根据本发明实施例的模块停止过程的流程图。
[0037]图5是根据本发明实施例的模块卸载过程的流程图。
[0038]图6是根据本发明实施例的模块多版本共存示意图。
[0039]图7是根据本发明实施例的模块多版本管理的流程图。[0040]图8是根据本发明实施例的类加载机制的流程图。
[0041]图9是根据本发明实施例的模块类的查找流程图。
[0042]图10是根据本发明实施例的模块生命周期示意图。
【具体实施方式】
[0043]多种方式可以用于(包括实施为过程;装置;系统;物质组成;在计算机可读存储介质上包括的计算机程序产品;和/或处理器(诸如如下处理器,该处理器被配置成执行在耦合到处理器的存储器上存储的和/或由该存储器提供的指令))实施本发明。在本说明书中,这些实施或者本发明可以采用的任何其他形式可以称为技术。一般而言,可以在本发明的范围内变更公开的过程的步骤顺序。除非另有明示,描述为被配置成执行任务的部件(诸如处理器或者存储器)可以实施为被临时配置成在给定时间执行该任务的一般部件或者被制造成执行该任务的具体部件。
[0044]下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
[0045]图1是根据本发明实施例的开放平台模块化方法的流程图。本发明提供的方法包括:
[0046]1、控制台对模块进行部署和安装,供网站端读取。
[0047]模块部署和安装,通过控制台的部署安装模块,包括模块上传、模块解析和模块元数据存储。并且和开放平台网站端数据统一展现和管理。
[0048]图2是根据本发明实施例的模块安装过程的流程图。如图2所示,响应于用户的请求,governor对指定节点进行部署,将API发布至数据库中。网站通过读取数据库的API来显示相应的API文档。
[0049]根据本发明进一步优选的实施例,部署模块通过Governor来上传到指定的Node上并且加载和实例化该jar,以及解析该jar文件的API描述元数据到数据库中,此时标记为已安装,网站不显示。
[0050]2、当启动模块时,将当前模块注册到模块资源管理器中。
[0051]图3是根据本发明实施例的模块启动过程的流程图。如图3所示,响应于用户请求,Governor将指定的模块示例加载到当前模块资源管理器中,并在启动时更新API状态。通过读取数据库,网站显示API文档。
[0052]在本发明优选的实施例中,将模块的入库类ServiceMethodBean注解作为统一模块的入口类,将其已安装的资源和classLoader切换到当前的类加载器中,并且注册到模块资源管理器中用于加载将要启动的模块的资源。这样通过代理就可以找到启动的模块。目前使用调用的方法名称与版本号的组合来确定唯一的接口服务。
[0053]3、利用模块仓库实现模块的多版本存储。
[0054]模块仓库用于存储模块的目标目录。图6是根据本发明实施例的模块多版本共存示意图。如图5所示,在本发明优选的实施例中,目录的结构参考maven的存储结构,基于模块名称下的多版本存储管理。
[0055]图7是根据本发明实施例的模块多版本管理的流程图。如图7所示,模块仓库在Governor上进行统一管理。所有的模块部署到必须上传到模块仓库上,统一分发和部署到对应的节点。
[0056]根据本发明的进一步实施例,当停止模块时,将模块资源从开放平台的模块资源存储器中移除。
[0057]图4是根据本发明实施例的模块停止过程的流程图。如图4所示,响应于用户请求,Governor从当前资源管理器中将指定的模块实例移除,并在实时更新API状态。通过读取数据库,网站显示API文档。将模块的资源从开放平台的模块资源管理器中移除,这样开放平台就可以忽略所有停止的模块,进入的请求将无法处理。同时开放平台前端网站对应的API文档以及描述都处于标记为”暂停使用”提示。
[0058]根据本发明的进一步实施例,当卸载模块时,将模块从开放平台的模块资源管理器移除,并从模块资源管理器中移除对应的模块资源。
[0059]图5是根据本发明实施例的模块卸载过程的流程图。如图5所示,响应于用户请求,Governor在从模块资源管理器中移除对应的模块资源时,该模块的实体jar文件也将移除。同时开放平台前端网站对应的API文档也将处于历史版本,同时网站不显示该API相关描述。
[0060]以下是本发明的模块类加载的进一步优选的实施例,用于实现模块类加载的过程。类加载机制中最重要的一点就是拥有独立分离的class loader机制而得以保证Modu I e的闭合,OSGI 框架的 classloader 由 System Classloader>Bundle Classloader 共同组成。每个Bundle拥有独立的Classloader。本发明Bundle的class的加载机制如图8所示。
[0061]模块类的查找可通过以下步骤,参见图9的流程图:
[0062]步骤A:如需要加载的为java.*的类,则直接委派给Parent Classloader,如在parent Classloader中找到了相应的类,则直接返回,如未找到,则抛出NoClassDefFoundException 异常。
[0063]步骤B:如加载的不是java.*的类,则判断加载的类是否属于boot delegation中配置的范围,如不属于则进入步骤C,如属于则继续委派给Parent Classloader,如在Parent Classloader中找到则直接返回,如未找到,贝U进入步骤C。
[0064]步骤C:如属于Bundle Import package 中的类,则交给export package 的Bundle的classloader进行加载,如加载失败,贝U直接抛出NoClassDefFoundException,如加载成功则直接返回。
[0065]步骤D:如不属于Bundle Import package中的类,贝U搜索是否属于RequireBundles 中 export 的 package 的类,如属于则交由 export package 的 Bundle 的Classloader进行加载,如加载成功则直接返回,如加载失败则进入步骤E。
[0066]步骤E:在Bundle classpath (就是在Bundle-Classpath所配置的路径)中搜索需要加载的类,如加载成功,则直接返回,如加载失败则继续进入步骤F。
[0067]步骤F:搜索 Fragment Bundle (参见 Fragment-Host 配置)的 classpath,如加载成功,则直接返回,如加载失败则继续进入步骤G。
[0068]步骤G:判断是否属于export的package,如属于则直接抛出NoClassDefFoundException,如不属于则进入步骤H。
[0069]步骤H:判断是否属于DynamicImport的package,如不属于则直接抛出NoClassDefFoundException,如属于则使用 export package 的 Bundle 的 ClassLoader 进行加载,如加载成功则直接返回,如加载失败则抛出NoClassDefFoundException。
[0070]对于Bundle 中的资源文件,可使用 bundle.getResource、bundle.getEntry或bundle.findEntries来获取,返回的是一个可被转变为java.net.URL的对象,通过URL就可加载到相应的资源文件,如果要获取到其他Bundle的资源文件则需通过设置Require-Bundle的方式才可获取,Require-Bundle也可视为实现资源文件共享的一种方式。
[0071]参见图10所示的模块生命周期示意图,本发明另一方面提供了一种对应于模块生命周期的装置。包括以下单元:
[0072]安装单元,用于基于节点模式对模块进行部署和安装,供网站端读取;
[0073]启动单元,用于将当前模块注册到模块资源管理器中以启动该模块;
[0074]模块仓库单元,用于实现模块的多版本存储,其中同一版本模块可运行在不同的节点;
[0075]停止单元,用于将模块资源从开放平台的模块资源管理器中移除,以停止该模块;
[0076]卸载单元,用于将模块从开放平台的模块资源管理器移除,并从模块资源管理器中移除对应的模块资源;
[0077]其中,所述装置使用要调用的方法名称与版本号的组合来确定唯一的资源。
[0078]综上所述,本发明提出的开放平台模块化方法和装置,实现了模块热部署和热控制,多模块版本共存和资源隔离,模块方法级控制运行状态,动态控制模块方法的运行启动,以及回滚控制。
[0079]显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
[0080]应当理解的是,本发明的上述【具体实施方式】仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
【权利要求】
1.一种开放平台模块化方法,其特征在于,包括: 控制台基于节点模式对模块进行部署和安装,供网站端读取; 当启动模块时,通过控制台将当前模块注册到模块资源管理器中; 利用模块仓库实现模块的多版本存储,同一版本模块可运行在不同的节点。
2.根据权利要求1所述的方法,其特征在于,该方法还包括: 当停止模块时,将模块资源从开放平台的模块资源管理器中移除。
3.根据权利要求1所述的方法,其特征在于,所述部署和安装步骤进一步包括模块上传、模块解析和模块元数据存储, 其中,模块资源管理器与开放平台网站端数据通过数据库进行统一展现和管理,上传到指定的节点上并且加载和实例化相应的jar文件,解析该jar文件的API描述元数据到数据库中,网站通过读取数据库的API来显示相应的API文档。
4.根据权利要求1所述的方法,其特征在于,该方法还包括: 当卸载模块时,将模块从开放平台的模块资源管理器移除,并从模块资源管理器中移除对应的模块资源。
5.根据权利要求1所述的方法,其特征在于,所述启动模块的步骤进一步包括: 响应于用户请求,控制台将指定的模块示例加载到当前模块资源管理器中,并在启动时更新API状态,通过读取数据库,网站显示API文档, 其中,将模块的入库类ServiceMethodBean注解作为统一模块的入口类,将其已安装的资源和classLoader切换到当前的类加载器中,并且注册到模块资源管理器中,用于加载将要启动的模块的资源,通过代理找到启动的模块。
6.根据权利要求5所述的方法,其特征在于,在资源定位过程中,使用调用的方法名称与版本号的组合来确定唯一的接口服务。
7.根据权利要求1所述的方法,其特征在于,所述停止模块的步骤进一步包括: 响应于用户请求,控制台从当前资源管理器中将指定的模块实例移除,并在实时更新API状态,通过读取数据库,网站显示API文档,将模块的资源从开放平台的模块资源管理器中移除,开放平台就忽略所有停止的模块,进入的请求将无法处理,开放平台前端网站对应的API文档以及描述均被标记为暂停使用。
8.根据权利要求3所述的方法,其特征在于,所述卸载模块的步骤进一步包括: 控制台从模块资源管理器中移除对应的模块资源,同时该模块的实体jar文件也将移除,开放平台前端网站对应的API文档,处于历史版本,同时网站不显示该API相关描述。
9.根据权利要求1所述的方法,其特征在于,在所述模块多版本存储中,采用maven的存储目录结构,模块仓库在控制台上进行统一管理,所有的模块部署到必须上传到模块仓库上,统一分发和部署到对应的节点。
10.一种开放平台模块化装置,其特征在于,包括: 安装单元,用于基于节点模式对模块进行部署和安装,供网站端读取; 启动单元,用于将当前模块注册到模块资源管理器中以启动该模块; 模块仓库单元,用于实现模块的多版本存储,其中同一版本模块可运行在不同的节占.停止单元,用于将模块资源从开放平台的模块资源管理器中移除,以停止该模块;卸载单元,用于将模块从开放平台的模块资源管理器移除,并从模块资源管理器中移除对应的模块资源; 其中,所述装置使 用要调用的方法名称与版本号的组合来确定唯一的资源。
【文档编号】G06F9/445GK103984567SQ201410161868
【公开日】2014年8月13日 申请日期:2014年4月22日 优先权日:2014年4月22日
【发明者】邓建利, 谢志胜, 贾玉光, 刘红斌 申请人:世纪禾光科技发展(北京)有限公司