企业分布式应用系统中实现资源加载及资源热更新的方法

文档序号:6433049阅读:381来源:国知局
专利名称:企业分布式应用系统中实现资源加载及资源热更新的方法
技术领域
本发明涉及计算机应用技术领域,特别涉及计算机企业应用系统技术领域,具体是指一种企业分布式应用系统中实现资源加载以及资源热更新的方法。
背景技术
目前,在企业级应用开发领域,其架构主要是按照面向服务体系架构 (Service-Oriented Architecture,S0A)或者按,照 J2EE架构(Java 2Platform Enterprise Edition)实现的,在功能开发时,通常将应用划分为多个功能模块,每个功能模块完成特定的功能。在模块功能实现的过程中,不可避免地要涉及到与各种资源,在功能代码实现中需要对资源进行解析加工,把各种资源转换化为机器能识别的形式。应用中的每个模块相对独立,包含了实现模块功能需要的所有资源,模块之间通过模块间的依赖关系可以使用依赖模块中的资源,实现资源的重用。模块中的资源通常包括页面展现资源、服务描述资源、业务逻辑资源、模块配置以及模块元数据资源等,为了管理的方便,每个模块的资源通常部署在单独的压缩包或者目录中。在运行期,系统加载模块中资源时首先对模块资源的存储形式如压缩包(zip、jar)、文件目录、资源存储库等进行分析,对压缩包等类型的模块进行解压缩,对通过存储库存取资源的模块从存储库中下载模块对应的资源至本地系统中,然后系统针对不同的资源分别进行处理。在处理资源时,针对不同类型的资源文件分别提供不同的资源查找逻辑和加载逻辑,对于模块中不同类型的资源将有可能进行重复遍历和搜索,由此造成效率的降低以及功能代码的重复,同时如果新增对某一类资源的处理,则需要重新编写与其资源相对应的查找以及加载逻辑。在资源的热更新处理方面,每一类资源单独启动针对此资源的监听线程进行处理,不同类型的资源使用不同的资源变更通知机制,缺乏统一的热更新通知和管理机制,同时大量启动线程也浪费了大量的系统资源。随着应用系统的不断扩大,系统中包含的资源也越来越多,格式也越来越复杂,通常为了编码实现的方便,系统中已提供了对已有资源类型的支持,资源处理与应用逻辑采取的是紧耦合的方式,应用功能开发完成后,如果新增对一种资源类型的支持,需要修改其核心业务代码,这都将使测试人员和维护人员的工作量急剧增加。随着现有技术中,在多系统分工合作日益地紧密,如何方便的提供针对不同资源类型的加载、热更新支持成为该技术领域中尤为迫切需要解决的问题。

发明内容
本发明的目的是克服了上述现有技术中的缺点,提供一种使资源的解析以及热更新工作变更为简单、高效,增加新的资源类型时,无需修改核心代码,从而使资源的处理以及解析过程更加直观,提高了开发的效率,系统运行效率较高,性能稳定可靠,开发维护成本较低,系统可移植性和可扩展性更强,且快速适应业务需求的变化和技术变化的企业分布式应用系统中实现资源加载以及资源热更新的方法
为了实现上述的目的,本发明的企业分布式应用系统中实现资源加载以及资源热更新的方法具体包括开发期实现资源解析器接口和拦截器接口并配置格式定义的操作、运行期对资源加载配置文件解析的操作、运行期模块资源加载的操作以及运行期热更新线程监听的操作;其中,所述的开发期实现资源解析器接口和拦截器接口并配置格式定义的操作, 包括以下步骤(11)新建资源解析扩展包;(12)编写实现资源解析器接口的实现类;(13)编写实现资源拦截器接口的实现类;(14)配置资源解析器、拦截器与资源的映射规则;(15)将资源解析器扩展包部署到运行环境中;所述的运行期对资源加载配置文件解析的操作,包括以下步骤(21)提供支持资源解析器扩展的接口类,以供扩展;(22)提供支持资源拦截器扩展的接口类,以供扩展;(23)加载定义的资源解析器、拦截器与资源映射规则配置文件;(24)根据对配置文件的解析形成资源与解析器的映射列表;(25)根据对配置文件的解析形成资源与拦截器的映射列表;(26)对资源与解析器的映射列表按优先级进行排序;所述的运行期模块资源加载的操作,包括以下步骤(31)遍历模块下所有资源,并缓存;(32)对资源按资源解析器的配置进行资源的分类;(33)执行资源解析前的拦截器;(34)针对分类资源调用不同的资源解析器进行资源解析;(35)判断资源解析器是否支持懒加载;(36)缓存资源解析后的模型;(37)执行资源解析后的拦截器;所述的运行期热更新线程监听的操作,包括以下步骤(41)资源热更新线程的编写;(42)设置热更新线程的扫描间隔;(43)遍历模块对应的目录,查找变更的资源;(44)对变更资源按资源解析器的配置进行资源的分类;(45)执行变更资源解析前的拦截器;(46)针对分类变更资源调用不同的资源解析器进行资源解析;(47)判断变更资源解析器是否支持懒加载;(48)变更缓存中资源解析的模型;(49)执行变更资源解析后的拦截器。该企业分布式应用系统中实现资源加载以及资源热更新的方法中,所述的步骤 (11)具体为新建页面流资源解析扩展包,其包括以下步骤
(Ila)通过开发环境的“文件”菜单中新建子菜单,选择新建页面流资源解析扩展包;(lib)输入页面流资源解析扩展包的名称,系统创建相应的目录结构;(Ilc)生成页面流资源解析扩展包的资源树,包括配置、接口等结点。所述的步骤(1 具体为编写实现页面流资源解析器接口的实现类,其包括以下步骤(12a)新建 Java Class,实现资源加载的接口 IResourceLoader ;(12b)实现资源加载的接口中的loadResource资源加载方法,对资源进行解析, 转换为资源的内存模型;(12c)对新增资源进行解析处理;(12d)对修改资源进行解析处理;(12e)对删除资源进行解析处理;(12f)设置资源是否支持懒加载,本页面流资源支持懒加载。所述的步骤(1 具体为编写实现页面流资源拦截器接口的实现类,其包括以下步骤(13a)新建 Java Class,实现资源拦截器的接口 IResourceHandler ;(13b)实现资源拦截器的接口中的doBefore前执行、doAfter后执行、 doException异常执行方法,对资源解析前后进行拦截;(13c)对资源解析前拦截器处理;(13d)对资源解析后拦截器处理;(13e)对资源解析出错后拦截器处理。所述的步骤(14)具体为配置页面流资源解析器、拦截器与资源的映射规则,其包括以下步骤(14a)在资源解析扩展包扩展包中资源树下的“配置”结点下新建资源处理器配置文件 ResourceProcessor. xml ;(14b)在文件中配置资源处理的解析器、拦截器以及优先级。所述的步骤(1 具体为页面流资源解析器扩展包部署到运行环境中,其包括以下步骤(15a)在资源解析扩展包资源树上选择“部署”菜单;(15b)资源解析对应扩展包下的资源按目录结构部署到运行环境中。该企业分布式应用系统中实现资源加载以及资源热更新的方法中,所述的步骤 (21)具体包括以下步骤(21a)定义资源解析器操作的接口类^esourceLoader,供用户扩展,接口中包括对新增、修改、删除资源的处理以及设置解析器是否支持懒加载;(21b)提供根据资源类型获取资源解析器的工厂类ResourceLoaderfactory。所述的步骤0 具体包括以下步骤(22a)定义资源拦截器操作的接口类^esourceHandler,供用户扩展,接口中包括对资源解析前、后以及发生异常的处理;(22b)提供根据资源类型获取拦截器的工厂类ResourceHandlerfactory。
所述的步骤具体包括以下步骤(23a)遍历应用类路径下所有的资源处理器配置文件ResourceftOcessor. xml, 形成处理器文件列表;(23b)循环解析处理器文件列表中的文件;(23c)针对每个处理器节点的资源处理器resourceftOcessor,形成处理器描述模型 ResourceProcessor ;(23d)对处理器描述模型ResourceftOcessor设置其资源类型属性;(23e)对处理器描述模型Resourcel^rocessor设置其优先级属性;(23f)对处理器描述模型ResourceftOcessOT设置其解析器属性,并对解析器实例化;(23g)对处理器描述模型Resourceft^cessor设置其拦截器属性,并对拦截器实例化。所述的步骤04)具体包括以下步骤(24a)遍历所有处理器描述模型ResourceftOcessor对应的列表;(24b)读取处理器描述模型ResourceftOcessor中的资源类型属性和对应的解析器实例;(24c)资源类型属性和对应的解析器实例形成映射列表。所述的步骤0 具体包括以下步骤(25a)遍历所有处理器模型ResourceftOcessor对应的列表;(25b)读取处理器模型ResourceftOcessor中的资源类型属性和对应的拦截器实例;(25c)资源类型属性和对应的拦截器实例形成映射列表;(25d)对资源类型属性和对应的拦截器实例形成映射列表进行缓存。所述的步骤06)具体包括以下步骤(26a)遍历所有处理器模型ResourceProcessor对应的列表;(26b)读取资源类型属性与优先级,形成映射关系列表;(26c)对资源类型属性与优先级映射关系列表按优先级排序;(26d)遍历资源类型属性和对应的解析器实例形成映射列表;(26e)按优先级的排序顺序,对解析器实例按同样规则进行排序;(26f)缓存排序后的资源类型与解析器实例映射列表。该企业分布式应用系统中实现资源加载以及资源热更新的方法中,所述的步骤 (31)具体包括以下步骤(31a)查找模块资源所在的根目录;(31b)遍历资源根目录下的一级子目录以及资源;(31c)递归遍历子目录,遍历其下的子目录以及资源;(31d)资源放入资源列表缓存,以资源所在的模块绝对路径为关键字,包括资源的修改时间、绝对路径列表。所述的步骤(3 具体包括以下步骤(32a)从缓存中的资源类型与解析器实例映射列表中计算出所有的已按设置的优先级进行了排序的资源类型列表;(32b)遍历模块资源缓存中的所有资源;(32c)按资源类型设置,对资源进行分类,形成资源类型与物理资源的映射列表。所述的步骤(3 具体包括以下步骤(33a)遍历缓存中的所有的资源类型列表;(33b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源;(33c)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;(33d)遍历查找到的资源拦截器实例列表;(33e)执行资源拦截器实例的doBefore前执行方法,把资源列表作为输入参数传递到拦截器中。所述的步骤(34)具体包括以下步骤(34a)遍历缓存中的所有的资源类型列表;(34b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源;(34c)根据资源类型属性从资源类型与资源解析器实例映射列表缓存中查找对应的资源解析器实例列表;(34d)遍历查找到的资源解析器实例列表;(34e)执行资源解析器实例的loadResource资源加载方法,把资源列表作为输入参数传递到拦截器中。所述的步骤(3 具体包括以下步骤(35a)执行资源解析器实例的isSupportLazyLoading是否支持懒加载方法;(35b)如果返回为真,则表示此资源解析器支持懒加载;如果返回为假,则表示此资源解析器不支持懒加载;(35c)如果资源解析器不支持懒加载,则调用资源解析器执行资源加载;(35d)如果资源解析器支持懒加载,则对资源引用关系进行缓存,其关键字为资源所在模块的相对路径URI ;(35e)用户从资源模型缓存中根据资源URI取得资源模型时,如果从资源缓存模型中未找到所对应的资源,则从资源引用关系缓存中查找此资源URI对应的资源物理信息,如果存在,则调用此资源对应解析器实例的loadResource资源加载方法,对资源进行加载。所述的步骤(36)具体包括以下步骤(36a)调用源解析器实例的loadResource资源加载方法后,形成资源对应的模型对象;(36b)对资源模型对象缓存,其关键字为资源所在模块的相对路径URI,值为对应的模型对象。所述的步骤(37)具体包括以下步骤(37a)遍历缓存中的所有的资源类型列表;(37b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源;(37c)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;(37d)遍历查找到的资源拦截器实例列表;(37e)执行资源拦截器实例的doAfter后执行方法,把资源列表作为输入参数传递到拦截器中;(37f)如果资源解析执行时出现错误,则执行资源拦截器实例的doExc印tion异常执行方法,把资源列表以及发生的异常作为输入参数传递到拦截器中。该企业分布式应用系统中实现资源加载以及资源热更新的方法中,所述的步骤 (42)具体包括以下步骤(42a)设置资源变更的扫描时间的设置单位;(42b)设置监听资源变更的时间间隔。所述的步骤具体包括以下步骤(43a)遍历模块对应的目录以及子目录,查找对应的资源;(43b)根据查找到的资源路径列表,与资源列表缓存进行比对;(43c)查找到的资源在资源列表缓存中存在,但时间戳不同,则表示此资源已修改;(43d)查找到的资源在资源列表缓存中不存在,则表示此资源为新增;(43e)反向查找资源列表缓存,如果资源列表缓存中存在但在查找到的资源列表中不存在,则表示此资源已删除;(43f)对新增、修改、删除的资源形成资源变更列表。所述的步骤04)具体包括以下步骤(44a)从缓存中的资源类型与解析器实例映射列表中计算出所有的已按设置的优先级进行排序的资源类型列表;(44b)遍历资源变更列表中的所有资源;(44c)按资源类型设置,对资源进行分类,形成资源类型与物理资源的映射列表。所述的步骤0 具体包括以下步骤(45a)遍历变更的资源类型与物理资源的映射列表;(45b)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;(45c)遍历查找到的资源拦截器实例列表;(45d)执行资源拦截器实例的doBefore前执行方法,把变更资源列表作为输入参数传递到拦截器中。所述的步骤06)具体包括以下步骤(46a)遍历变更的资源类型与物理资源的映射列表;(46b)根据资源类型属性从资源类型与资源解析器实例映射列表缓存中查找对应的资源解析器实例列表;(46c)遍历查找到的资源解析器实例列表;(46d)执行资源解析器实例的loadResource资源加载方法,把变更资源列表作为输入参数传递到拦截器中。所述的步骤07)具体包括以下步骤
13
(47a)执行资源解析器实例的isSupportLazyLoading是否支持懒加载方法;(47b)如果返回为真,则表示此资源解析器支持懒加载;如果返回为假,则表示此资源解析器不支持懒加载;(47c)如果资源解析器不支持懒加载,则调用资源解析器对变更资源执行资源加载;(47d)如果资源解析器支持懒加载,则更新资源引用关系缓存,其关键字为资源所在模块的相对路径URI。所述的步骤08)具体包括以下步骤(48a)调用源解析器实例的loadResource资源加载方法后,形成变更资源对应的模型对象;(48b)更新资源模型对象缓存,其关键字为资源所在模块的相对路径URI,值为资源变更后对应的模型对象。所述的步骤09)具体包括以下步骤(49a)遍历变更的资源类型与物理资源的映射列表;(49b)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;(49c)遍历查找到的资源拦截器实例列表;(49d)执行变资源拦截器实例的doAfter后执行方法,把变更资源列表作为输入参数传递到拦截器中;(49e)如果资源解析执行时出现错误,则执行资源拦截器实例的doExc印tion异常执行方法,把变更资源列表以及发生的异常作为输入参数传递到拦截器中。采用了该发明的企业分布式应用系统中实现资源加载以及资源热更新的方法,其包括开发期实现资源解析器接口和拦截器接口并配置格式定义的操作、运行期对资源加载配置文件解析的操作、运行期模块资源加载的操作以及运行期热更新线程监听的操作。从而使得对资源的解析以及热更新工作更为简单而高效,增加新的资源类型时,无需修改核心代码,可以完成以可插拔的方式进行资源处理器的注入。同时,采用本发明的方法,对资源的处理以及解析过程更加直观,提高了开发的效率,快捷方便,系统运行效率较高,性能稳定可靠,降低了开发维护的成本;而且增强了系统可移植性和可扩展性,使用户专注于业务逻辑的处理;不仅如此,该方法还能够快速适应业务需求的变化和技术变化,能够支撑建立高度模块化而且又高度整合的软件系统,适用范围较为广泛,为企业应用中对资源的管理打下了坚实的基础。


图1为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源加载接口 ^esourceLoader类图。图2为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源拦截器接口 IResourceHandler类图。图3为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源解析器工厂ResourceLoaderFactory类图。
图4为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源拦截器工厂ResourceHandlerFactory类图。图5为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源处理器模型ResourceProcessor类图。图6为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源处理汇总类图。图7为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源处理器配置文件解析流程图。图8为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源加载、解析流程图。图9为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源热更新线程监听流程图。
具体实施例方式为了能够更清楚地理解本发明的技术内容,特举以下实施例详细说明。在本发明的企业分布式应用系统中实现资源加载以及资源热更新方法应用于基于页面流资源的加载以及热更新的具体实施例中页面流描述为基于J2EE环境下单个 HTTP请求处理过程以及多个请求/页面之间的跳转关系,实现页面请求的流转,其配置格式采用XML结构,资源的扩展名为.flow。该企业分布式应用系统中实现资源加载以及资源热更新的系统结构及其方法,包括运行期支撑资源加载及热更新扩展的通用框架和开发期资源加载以及热更新的配置格式定义。运行期支撑资源加载及热更新扩展的通用框架包括对资源加载配置文件的解析, 通过对该配置文件的解析形成资源与解析器以及资源加载拦截器的映射列表,根据此列表能查找到资源对应的处理器和相应的拦截器;同时,为支持资源的热更新操作,运行期启动一监听线程,监听应用中所有资源的变化,当有资源发生变更时,把资源进行分类,然后交由配置的解析器进行资源的处理。开发期资源加载以及热更新的配置格式定义包括了针对特定资源加载以及热更新资源解析接口和拦截器接口的实现以及对此解析器、拦截器的注册。本发明的企业分布式应用系统中实现资源加载以及资源热更新的方法包括开发期资源解析器接口、拦截器接口实现以及配置格式定义操作、运行期对资源加载配置文件的解析操作、模块资源的加载操作以及热更新线程的监听操作。该实施例中的开发期资源解析器接口、拦截器接口实现以及配置格式定义操作包括以下步骤(11)新建页面流资源解析扩展包,包括以下步骤a)通过开发环境“文件”菜单中新建子菜单,选择新建页面流资源解析扩展包;b)输入页面流资源解析扩展包的名称,系统创建相应的目录结构;c)生成页面流资源解析扩展包的资源树,包括配置、接口等结点。(12)编写实现页面流资源解析器接口的实现类,包括以下步骤a)新建Java Class,实现资源加载的接口 ^esourceLoader,其类图如图1如示;b)实现资源加载的接口中的loadResource方法,对资源进行解析,转换为资源的内存模型;c)对新增资源进行解析处理;d)对修改资源进行解析处理;e)对删除资源进行解析处理;f)设置资源是否支持懒加载,本页面流资源支持懒加载,设置为true。(13)编写实现页面流资源拦截器接口的实现类,包括以下步骤a)新建Java Class,实现资源拦截器的接口 IResourceHandler,其类图如图2如示;b)实现资源拦截器的接口中的doBefore、doAfter、doException方法,对资源解析前后进行拦截;c)对资源解析前拦截器处理;d)对资源解析后拦截器处理;e)对资源解析出错后拦截器处理。(14)配置页面流资源解析器、拦截器与资源的映射规则,包括以下步骤a)在资源解析扩展包扩展包中资源树下的“配置”结点下新建文件 ResourceProcessor. xml ;b)在文件中配置资源处理的解析器、拦截器以及优先级,格式定义如下
<xselement name="resourceProcessors"> <xscomplexType>
<xs: sequence maxOccurs = "unbounded">
<xs: element name="resourceProcessor"> <xs:complexType> <xs:sequence>
<xs: elementname=MprocessorName“
type="xs: string"/>
<xs: element name="handlerName“ type=nxs: string"/〉 </xs:sequence>
<xs: attribute name="resourceExt" type="xs: string"/> <xs: attribute name="priority" type="xs: string"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>对本实施例扩展名为flow的资源的解析器类全称为com. FlowResourceProcessor,拦截器类全称为 com. FlowResourceHandler,优先级为 10,则此
资源对应处理器的配置为
< xml version="l.O" encoding="UTF-8“ > <resourceProces sors>
<resourceProcessor resourceExt="flow" priority="10">
<processorName>com. FlowResourceProcessor </processorName> <handlerName>com. FlowResourceHandler </handlerName> </resourceProcessor> </resourceProcessors>
16
(15)页面流资源解析器扩展包部署到运行环境中,包括以下步骤a)在资源解析扩展包资源树上右击,在弹出菜单中选择“部署”菜单;b)资源解析对应扩展包下的资源按目录结构部署到运行环境中。经过以上步骤,资源处理的准备阶段已经完成,用户在添加新的资源处理时,通过几个简单的步骤实现资源解析器接口、实现资源拦截器接口以及配置资源解析规则的操作就完成了。该实施例中的运行期对资源加载配置文件的解析操作包括以下步骤,其流程图如图7所示(21)提供支持资源解析器扩展的接口类,以供扩展,包括以下步骤a)定义资源解析器操作的接口类顶⑶皿!^此腿如!·,其类图如图1所示,供用户扩展,接口中包括对新增、修改、删除资源的处理以及设置解析器是否支持懒加载;b)提供根据资源类型获取资源解析器的工厂类ResourceLoaderfactory,其类图如图3如示。(22)提供支持资源拦截器扩展的接口类,以供扩展,包括以下步骤a)定义资源拦截器操作的接口类^esourceHandler,其类图如图2所示,供用户扩展,接口中包括对资源解析前、后以及发生异常的处理;b)提供根据资源类型获取拦截器的工厂类ResourceHandlerfactory,其类图如图4如示。(23)加载定义的资源解析器、拦截器与资源映射规则配置文件,包括以下步骤a)遍历应用类路径下所有的资源处理器配置文件ResourceftOcessor. xml,形成处理器文件列表;b)循环解析处理器文件列表中的文件;c)针对每个处理器节点resourceftOcessor,形成处理器描述模型 ResourceProcessor,其类图如图5如示,资源处理关键类关系图如图6如示;d)对处理器模型ResourceftOcessor设置其资源类型属性;e)对处理器模型ResourceftOcessor设置其优先级属性;f)对处理器模型ResourceftOcessor设置其解析器属性,并对解析器实例化;g)对处理器模型ResourceftOcessor设置其拦截器属性,并对拦截器实例化。(24)根据对配置文件的解析形成资源与解析器的映射列表,包括以下步骤a)遍历所有处理器模型ResourceProcessor对应的列表;b)读取处理器模型ResourceftOcessor中的资源类型属性和对应的解析器实例;c)资源类型属性和对应的解析器实例形成映射列表。(25)根据对配置文件的解析形成资源与拦截器的映射列表,包括以下步骤a)遍历所有处理器模型ResourceProcessor对应的列表;b)读取处理器模型ResourceftOcessor中的资源类型属性和对应的拦截器实例;c)资源类型属性和对应的拦截器实例形成映射列表;d)对资源类型属性和对应的拦截器实例形成映射列表进行缓存。(26)对资源与解析器的映射列表按优先级进行排序,包括以下步骤a)遍历所有处理器模型ResourceProcessor对应的列表;
b)读取资源类型属性与优先级,形成映射关系列表;c)对资源类型属性与优先级映射关系列表按优先级排序,优先级数字越大排序越
A+^. 、r .
罪目丨J ;d)遍历资源类型属性和对应的解析器实例形成映射列表;e)按优先级的排序顺序,对解析器实例按同样规则进行排序;f)缓存排序后的资源类型与解析器实例映射列表。该实施例中的运行期模块资源的加载包括以下步骤,其流程图如图8所示(31)遍历模块下所有资源,并缓存,包括以下步骤a)查找模块资源所在的根目录;b)遍历资源根目录下的一级子目录以及资源;c)递归遍历子目录,遍历其下的子目录以及资源;d)资源放入资源列表缓存,以资源所在的模块绝对路径为关键字,包括资源的修改时间、绝对路径列表。(32)对资源按资源解析器的配置进行资源的分类,包括以下步骤a)从缓存中的资源类型与解析器实例映射列表中计算出所有的资源类型列表,此资源列表已按设置的优先级进行了排序;b)遍历模块资源缓存中的所有资源;c)按资源类型设置,对资源进行分类,形成资源类型与物理资源的映射列表。(33)执行资源解析前的拦截器,包括以下步骤a)遍历缓存中的所有的资源类型列表;b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源;c)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;d)遍历查找到的资源拦截器实例列表;e)执行资源拦截器实例的doBefore方法,把资源列表作为输入参数传递到拦截器中。(34)针对分类资源调用不同的资源解析器进行资源解析,包括以下步骤a)遍历缓存中的所有的资源类型列表;b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源;c)根据资源类型属性从资源类型与资源解析器实例映射列表缓存中查找对应的资源解析器实例列表;d)遍历查找到的资源解析器实例列表;e)执行资源解析器实例的loadResource方法,把资源列表作为输入参数传递到拦截器中。(35)判断资源解析器是否支持懒加载,包括以下步骤a)执行资源解析器实例的isSupportLazyLoading方法;b)如果返回为真,则表示此资源解析器支持懒加载;如果返回为假,则表示此资源解析器不支持懒加载;c)如果资源解析器不支持懒加载,则调用资源解析器执行资源加载;
18
d)如果资源解析器支持懒加载,则对资源引用关系进行缓存,其关键字为资源所在模块的相对路径URI ;e)用户从资源模型缓存中根据资源URI取得资源模型时,如果从资源缓存模型中未找到所对应的资源,则从资源引用关系缓存中查找此资源URI对应的资源物理信息,如果存在,则调用此资源对应解析器实例的loadResource方法,对资源进行加载。(36)缓存资源解析后的模型,包括以下步骤a)调用源解析器实例的loadResource方法后,形成资源对应的模型对象;b)对资源模型对象缓存,其关键字为资源所在模块的相对路径URI,值为对应的模型对象。(37)执行资源解析后的拦截器,包括以下步骤a)遍历缓存中的所有的资源类型列表;b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源;c)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;d)遍历查找到的资源拦截器实例列表;e)执行资源拦截器实例的doAfter方法,把资源列表作为输入参数传递到拦截器中;f)如果资源解析执行时出现错误,则执行资源拦截器实例的doExc印tion方法, 把资源列表以及发生的异常作为输入参数传递到拦截器中。该实施例中的运行期热更新线程的监听包括以下步骤,其流程图如图9所示(41)资源热更新线程的编写,包括以下步骤a)设置资源变更的扫描时间的设置单位,通常设置为秒;b)设置监听资源变更的时间间隔,通常设置为5就可以了,即每5秒扫描一次。(42)遍历模块对应的目录,查找变更的资源,包括以下步骤a)遍历模块对应的目录以及子目录,查找对应的资源;b)根据查找到的资源路径列表,与资源列表缓存进行比对;c)查找到的资源在资源列表缓存中存在,但时间戳不同,则表示此资源已修改;d)查找到的资源在资源列表缓存中不存在,则表示此资源为新增;e)反向查找资源列表缓存,如果资源列表缓存中存在但在查找到的资源列表中不存在,则表示此资源已删除;f)对新增、修改、删除的资源形成资源变更列表。(43)对变更资源按资源解析器的配置进行资源的分类,包括以下步骤a)从缓存中的资源类型与解析器实例映射列表中计算出所有的资源类型列表,此资源列表已按设置的优先级进行了排序;b)遍历资源变更列表中的所有资源;c)按资源类型设置,对资源进行分类,形成资源类型与物理资源的映射列表。(44)执行变更资源解析前的拦截器,包括以下步骤a)遍历变更的资源类型与物理资源的映射列表;b)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源
19拦截器实例列表;c)遍历查找到的资源拦截器实例列表;d)执行资源拦截器实例的doBefore方法,把变更资源列表作为输入参数传递到拦截器中。(45)针对分类变更资源调用不同的资源解析器进行资源解析,包括以下步骤a)遍历变更的资源类型与物理资源的映射列表;b)根据资源类型属性从资源类型与资源解析器实例映射列表缓存中查找对应的资源解析器实例列表;c)遍历查找到的资源解析器实例列表;d)执行资源解析器实例的loadResource方法,把变更资源列表作为输入参数传递到拦截器中。(46)判断变更资源解析器是否支持懒加载,包括以下步骤a)执行资源解析器实例的isSupportLazyLoading方法;b)如果返回为真,则表示此资源解析器支持懒加载;如果返回为假,则表示此资源解析器不支持懒加载;c)如果资源解析器不支持懒加载,则调用资源解析器对变更资源执行资源加载;d)如果资源解析器支持懒加载,则更新资源引用关系缓存,其关键字为资源所在模块的相对路径URI。(47)变更缓存中资源解析的模型,包括以下步骤a)调用源解析器实例的loadResource方法后,形成变更资源对应的模型对象;b)更新资源模型对象缓存,其关键字为资源所在模块的相对路径URI,值为资源变更后对应的模型对象。(48)执行变更资源解析后的拦截器,包括以下步骤a)遍历变更的资源类型与物理资源的映射列表;b)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;c)遍历查找到的资源拦截器实例列表;d)执行变资源拦截器实例的doAfter方法,把变更资源列表作为输入参数传递到拦截器中;e)如果资源解析执行时出现错误,则执行资源拦截器实例的doExc印tion方法, 把变更资源列表以及发生的异常作为输入参数传递到拦截器中。经过以上步骤,企业应用系统中针对页面流资源处理包括资源解析以及资源热更新过程全部完成,从中可以得出采用了该发明的企业分布式应用系统中实现资源加载以及资源热更新的方法,使得对资源的解析以及热更新工作变得简单而高效,当增加新的资源类型时,不再需要修改核心代码,可以完成以可插拔的方式进行资源处理器的注入。采用该发明的方法,对资源的处理以及解析过程更加直观,提高了开发的效率,快捷方便,系统运行效率较高,性能稳定可靠,降低了开发维护的成本;同时增强了系统可移植性和可扩展性,使用户专注于业务逻辑的处理;不仅如此,该方法还能够快速适应业务需求的变化和技术变化,能够支撑建立高度模块化而且又高度整合的软件系统,适用范围较为广泛,为企业
20应用中对资源的管理打下了坚实的基础。 在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
权利要求
1.一种企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的方法包括开发期实现资源解析器接口和拦截器接口并配置格式定义的操作、运行期对资源加载配置文件解析的操作、运行期模块资源加载的操作以及运行期热更新线程监听的操作;所述的开发期实现资源解析器接口和拦截器接口并配置格式定义的操作,包括以下步骤(11)新建资源解析扩展包;(12)编写实现资源解析器接口的实现类;(13)编写实现资源拦截器接口的实现类;(14)配置资源解析器、拦截器与资源的映射规则;(15)将资源解析器扩展包部署到运行环境中;所述的运行期对资源加载配置文件解析的操作,包括以下步骤(21)提供支持资源解析器扩展的接口类,以供扩展;(22)提供支持资源拦截器扩展的接口类,以供扩展;(23)加载定义的资源解析器、拦截器与资源映射规则配置文件;(24)根据对配置文件的解析形成资源与解析器的映射列表;(25)根据对配置文件的解析形成资源与拦截器的映射列表;(26)对资源与解析器的映射列表按优先级进行排序; 所述的运行期模块资源加载的操作,包括以下步骤(31)遍历模块下所有资源,并缓存;(32)对资源按资源解析器的配置进行资源的分类;(33)执行资源解析前的拦截器;(34)针对分类资源调用不同的资源解析器进行资源解析;(35)判断资源解析器是否支持懒加载;(36)缓存资源解析后的模型;(37)执行资源解析后的拦截器;所述的运行期热更新线程监听的操作,包括以下步骤(41)资源热更新线程的编写;(42)设置热更新线程的扫描间隔;(43)遍历模块对应的目录,查找变更的资源;(44)对变更资源按资源解析器的配置进行资源的分类;(45)执行变更资源解析前的拦截器;(46)针对分类变更资源调用不同的资源解析器进行资源解析;(47)判断变更资源解析器是否支持懒加载;(48)变更缓存中资源解析的模型;(49)执行变更资源解析后的拦截器。
2.根据权利要求1所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(11)具体为新建页面流资源解析扩展包,其包括以下步骤(Ila)通过开发环境的“文件”菜单中新建子菜单,选择新建页面流资源解析扩展包;(lib)输入页面流资源解析扩展包的名称,系统创建相应的目录结构; (Ilc)生成页面流资源解析扩展包的资源树,包括配置、接口等结点。
3.根据权利要求2所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(1 具体为编写实现页面流资源解析器接口的实现类,其包括以下步骤(12a)新建 Java Class,实现资源加载的接口 IResourceLoader; (12b)实现资源加载的接口中的loadResource资源加载方法,对资源进行解析,转换为资源的内存模型;(12c)对新增资源进行解析处理; (12d)对修改资源进行解析处理; (12e)对删除资源进行解析处理;(12f)设置资源是否支持懒加载,本页面流资源支持懒加载。
4.根据权利要求3所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(13)具体为编写实现页面流资源拦截器接口的实现类,其包括以下步骤(13a)新建Java Class,实现资源拦截器的接口 IResourceHandler; (13b)实现资源拦截器的接口中的doBefore前执行、doAfter后执行、doExc印tion异常执行方法,对资源解析前后进行拦截; (13c)对资源解析前拦截器处理; (13d)对资源解析后拦截器处理; (13e)对资源解析出错后拦截器处理。
5.根据权利要求4所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(14)具体为配置页面流资源解析器、拦截器与资源的映射规则,其包括以下步骤(14a)在资源解析扩展包扩展包中资源树下的“配置”结点下新建资源处理器配置文件 ResourceProcessor. xml ;(14b)在文件中配置资源处理的解析器、拦截器以及优先级。
6.根据权利要求5所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(1 具体为页面流资源解析器扩展包部署到运行环境中,其包括以下步骤(15a)在资源解析扩展包资源树上选择“部署”菜单;(15b)资源解析对应扩展包下的资源按目录结构部署到运行环境中。
7.根据权利要求1至6中任一项所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤具体包括以下步骤(21a)定义资源解析器操作的接口类^esourceLoader,供用户扩展,接口中包括对新增、修改、删除资源的处理以及设置解析器是否支持懒加载;(21b)提供根据资源类型获取资源解析器的工厂类ResourceLoaderfactory。
8.根据权利要求7所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤0 具体包括以下步骤(22a)定义资源拦截器操作的接口类^esourceHandler,供用户扩展,接口中包括对资源解析前、后以及发生异常的处理;(22b)提供根据资源类型获取拦截器的工厂类ResourceHandlerfactory。
9.根据权利要求8所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤具体包括以下步骤(23a)遍历应用类路径下所有的资源处理器配置文件ResourceftOcessor. xml,形成处理器文件列表;(23b)循环解析处理器文件列表中的文件;(23c)针对每个处理器节点的资源处理器resourceftOcessor,形成处理器描述模型 ResourceProcessor ;(23d)对处理器描述模型ResourceftOcessor设置其资源类型属性;(23e)对处理器描述模型ResourceftOcessor设置其优先级属性;(23f)对处理器描述模型ResourceftOcessOT设置其解析器属性,并对解析器实例化;(23g)对处理器描述模型ResourceftOcessOT设置其拦截器属性,并对拦截器实例化。
10.根据权利要求9所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤04)具体包括以下步骤(24a)遍历所有处理器描述模型ResourceftOcessor对应的列表;(24b)读取处理器描述模型Resourcel^ocessor中的资源类型属性和对应的解析器实例;(24c)资源类型属性和对应的解析器实例形成映射列表。
11.根据权利要求10所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤0 具体包括以下步骤(25a)遍历所有处理器模型ResourceftOcessor对应的列表;(25b)读取处理器模型ResourceftOcessor中的资源类型属性和对应的拦截器实例;(25c)资源类型属性和对应的拦截器实例形成映射列表;(25d)对资源类型属性和对应的拦截器实例形成映射列表进行缓存。
12.根据权利要求11所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤06)具体包括以下步骤(26a)遍历所有处理器模型ResourceftOcessor对应的列表; (26b)读取资源类型属性与优先级,形成映射关系列表; (26c)对资源类型属性与优先级映射关系列表按优先级排序; (26d)遍历资源类型属性和对应的解析器实例形成映射列表; (26e)按优先级的排序顺序,对解析器实例按同样规则进行排序; (26f)缓存排序后的资源类型与解析器实例映射列表。
13.根据权利要求12所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(31)具体包括以下步骤(31a)查找模块资源所在的根目录;(31b)遍历资源根目录下的一级子目录以及资源;(31c)递归遍历子目录,遍历其下的子目录以及资源;(31d)资源放入资源列表缓存,以资源所在的模块绝对路径为关键字,包括资源的修改时间、绝对路径列表。
14.根据权利要求13所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(3 具体包括以下步骤(32a)从缓存中的资源类型与解析器实例映射列表中计算出所有的已按设置的优先级进行了排序的资源类型列表;(32b)遍历模块资源缓存中的所有资源;(32c)按资源类型设置,对资源进行分类,形成资源类型与物理资源的映射列表。
15.根据权利要求14所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(3 具体包括以下步骤(33a)遍历缓存中的所有的资源类型列表;(33b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源; (33c)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;(33d)遍历查找到的资源拦截器实例列表;(33e)执行资源拦截器实例的doBefore前执行方法,把资源列表作为输入参数传递到拦截器中。
16.根据权利要求15所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(34)具体包括以下步骤(34a)遍历缓存中的所有的资源类型列表;(34b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源; (34c)根据资源类型属性从资源类型与资源解析器实例映射列表缓存中查找对应的资源解析器实例列表;(34d)遍历查找到的资源解析器实例列表;(34e)执行资源解析器实例的loadResource资源加载方法,把资源列表作为输入参数传递到拦截器中。
17.根据权利要求16所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(3 具体包括以下步骤(35a)执行资源解析器实例的isSupportLazyLoading是否支持懒加载方法; (35b)如果返回为真,则表示此资源解析器支持懒加载;如果返回为假,则表示此资源解析器不支持懒加载;(35c)如果资源解析器不支持懒加载,则调用资源解析器执行资源加载; (35d)如果资源解析器支持懒加载,则对资源引用关系进行缓存,其关键字为资源所在模块的相对路径URI ;(35e)用户从资源模型缓存中根据资源URI取得资源模型时,如果从资源缓存模型中未找到所对应的资源,则从资源引用关系缓存中查找此资源URI对应的资源物理信息,如果存在,则调用此资源对应解析器实例的loadResource资源加载方法,对资源进行加载。
18.根据权利要求17所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(36)具体包括以下步骤(36a)调用源解析器实例的loadResource资源加载方法后,形成资源对应的模型对象;(36b)对资源模型对象缓存,其关键字为资源所在模块的相对路径URI,值为对应的模型对象。
19.根据权利要求18所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤(37)具体包括以下步骤(37a)遍历缓存中的所有的资源类型列表;(37b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源; (37c)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;(37d)遍历查找到的资源拦截器实例列表;(37e)执行资源拦截器实例的doAfter后执行方法,把资源列表作为输入参数传递到拦截器中;(37f)如果资源解析执行时出现错误,则执行资源拦截器实例的doException异常执行方法,把资源列表以及发生的异常作为输入参数传递到拦截器中。
20.根据权利要求19所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤0 具体包括以下步骤(42a)设置资源变更的扫描时间的设置单位; (42b)设置监听资源变更的时间间隔。
21.根据权利要求20所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤具体包括以下步骤(43a)遍历模块对应的目录以及子目录,查找对应的资源; (43b)根据查找到的资源路径列表,与资源列表缓存进行比对; (43c)查找到的资源在资源列表缓存中存在,但时间戳不同,则表示此资源已修改; (43d)查找到的资源在资源列表缓存中不存在,则表示此资源为新增; (43e)反向查找资源列表缓存,如果资源列表缓存中存在但在查找到的资源列表中不存在,则表示此资源已删除;(43f)对新增、修改、删除的资源形成资源变更列表。
22.根据权利要求21所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤G4)具体包括以下步骤(44a)从缓存中的资源类型与解析器实例映射列表中计算出所有的已按设置的优先级进行排序的资源类型列表;(44b)遍历资源变更列表中的所有资源;(44c)按资源类型设置,对资源进行分类,形成资源类型与物理资源的映射列表。
23.根据权利要求22所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤0 具体包括以下步骤(45a)遍历变更的资源类型与物理资源的映射列表;(45b)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;(45c)遍历查找到的资源拦截器实例列表;(45d)执行资源拦截器实例的doBefore前执行方法,把变更资源列表作为输入参数传递到拦截器中。
24.根据权利要求23所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤G6)具体包括以下步骤(46a)遍历变更的资源类型与物理资源的映射列表;(46b)根据资源类型属性从资源类型与资源解析器实例映射列表缓存中查找对应的资源解析器实例列表;(46c)遍历查找到的资源解析器实例列表;(46d)执行资源解析器实例的loadResource资源加载方法,把变更资源列表作为输入参数传递到拦截器中。
25.根据权利要求M所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤G7)具体包括以下步骤(47a)执行资源解析器实例的isSupportLazyLoading是否支持懒加载方法;(47b)如果返回为真,则表示此资源解析器支持懒加载;如果返回为假,则表示此资源解析器不支持懒加载;(47c)如果资源解析器不支持懒加载,则调用资源解析器对变更资源执行资源加载;(47d)如果资源解析器支持懒加载,则更新资源引用关系缓存,其关键字为资源所在模块的相对路径URI。
26.根据权利要求25所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤G8)具体包括以下步骤(48a)调用源解析器实例的loadResource资源加载方法后,形成变更资源对应的模型对象;(48b)更新资源模型对象缓存,其关键字为资源所在模块的相对路径URI,值为资源变更后对应的模型对象。
27.根据权利要求沈所述的企业分布式应用系统中实现资源加载以及资源热更新的方法,其特征在于,所述的步骤G9)具体包括以下步骤(49a)遍历变更的资源类型与物理资源的映射列表;(49b)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截器实例列表;(49c)遍历查找到的资源拦截器实例列表;(49d)执行变资源拦截器实例的doAfter后执行方法,把变更资源列表作为输入参数传递到拦截器中;(49e)如果资源解析执行时出现错误,则执行资源拦截器实例的doException异常执行方法,把变更资源列表以及发生的异常作为输入参数传递到拦截器中。
全文摘要
本发明涉及一种企业分布式应用系统中实现资源加载以及资源热更新的方法,该方法包括开发期实现资源解析器接口和拦截器接口并配置格式定义的操作、运行期对资源加载配置文件解析的操作、运行期模块资源加载的操作以及运行期热更新线程监听的操作。采用本发明的方法能使资源的解析和热更新工作更为简单高效,增加新的资源类型时,无需修改核心代码,系统运行效率更高,性能稳定可靠,并降低了开发维护的成本,增强了系统可移植性和可扩展性,使用户专注于业务逻辑的处理,还能够快速适应业务需求和技术的变化,支撑建立高度模块化又高度整合的软件系统,其适用范围较为广泛,为企业应用中对资源的管理打下了坚实的基础。
文档编号G06F9/445GK102436373SQ20111027010
公开日2012年5月2日 申请日期2011年9月13日 优先权日2011年9月13日
发明者王 锋 申请人:上海普元信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1