首页> 中国专利> 企业分布式应用系统中实现资源加载及资源热更新的方法

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

摘要

本发明涉及一种企业分布式应用系统中实现资源加载以及资源热更新的方法,该方法包括开发期实现资源解析器接口和拦截器接口并配置格式定义的操作、运行期对资源加载配置文件解析的操作、运行期模块资源加载的操作以及运行期热更新线程监听的操作。采用本发明的方法能使资源的解析和热更新工作更为简单高效,增加新的资源类型时,无需修改核心代码,系统运行效率更高,性能稳定可靠,并降低了开发维护的成本,增强了系统可移植性和可扩展性,使用户专注于业务逻辑的处理,还能够快速适应业务需求和技术的变化,支撑建立高度模块化又高度整合的软件系统,其适用范围较为广泛,为企业应用中对资源的管理打下了坚实的基础。

著录项

  • 公开/公告号CN102436373A

    专利类型发明专利

  • 公开/公告日2012-05-02

    原文格式PDF

  • 申请/专利权人 上海普元信息技术股份有限公司;

    申请/专利号CN201110270105.5

  • 发明设计人 王锋;

    申请日2011-09-13

  • 分类号G06F9/44(20060101);G06F9/445(20060101);

  • 代理机构31002 上海智信专利代理有限公司;

  • 代理人王洁;郑暄

  • 地址 201203 上海市浦东新区张江高科技园区碧波路456号4F

  • 入库时间 2023-12-18 04:59:56

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-05-14

    授权

    授权

  • 2013-11-20

    著录事项变更 IPC(主分类):G06F9/44 变更前: 变更后: 申请日:20110913

    著录事项变更

  • 2012-06-27

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20110913

    实质审查的生效

  • 2012-05-02

    公开

    公开

说明书

技术领域

本发明涉及计算机应用技术领域,特别涉及计算机企业应用系统技术领域,具体是指一 种企业分布式应用系统中实现资源加载以及资源热更新的方法。

背景技术

目前,在企业级应用开发领域,其架构主要是按照面向服务体系架构(Service-Oriented  Architecture,SOA)或者按照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)具 体为:新建页面流资源解析扩展包,其包括以下步骤:

(11a)通过开发环境的“文件”菜单中新建子菜单,选择新建页面流资源解析扩展包;

(11b)输入页面流资源解析扩展包的名称,系统创建相应的目录结构;

(11c)生成页面流资源解析扩展包的资源树,包括配置、接口等结点。

所述的步骤(12)具体为:编写实现页面流资源解析器接口的实现类,其包括以下步骤:

(12a)新建Java Class,实现资源加载的接口IResourceLoader;

(12b)实现资源加载的接口中的loadResource资源加载方法,对资源进行解析,转换为 资源的内存模型;

(12c)对新增资源进行解析处理;

(12d)对修改资源进行解析处理;

(12e)对删除资源进行解析处理;

(12f)设置资源是否支持懒加载,本页面流资源支持懒加载。

所述的步骤(13)具体为:编写实现页面流资源拦截器接口的实现类,其包括以下步骤:

(13a)新建Java Class,实现资源拦截器的接口IResourceHandler;

(13b)实现资源拦截器的接口中的doBefore前执行、doAfter后执行、doException异常 执行方法,对资源解析前后进行拦截;

(13c)对资源解析前拦截器处理;

(13d)对资源解析后拦截器处理;

(13e)对资源解析出错后拦截器处理。

所述的步骤(14)具体为:配置页面流资源解析器、拦截器与资源的映射规则,其包括 以下步骤:

(14a)在资源解析扩展包扩展包中资源树下的“配置”结点下新建资源处理器配置文件 ResourceProcessor.xml;

(14b)在文件中配置资源处理的解析器、拦截器以及优先级。

所述的步骤(15)具体为:页面流资源解析器扩展包部署到运行环境中,其包括以下步 骤:

(15a)在资源解析扩展包资源树上选择“部署”菜单;

(15b)资源解析对应扩展包下的资源按目录结构部署到运行环境中。

该企业分布式应用系统中实现资源加载以及资源热更新的方法中,所述的步骤(21)具 体包括以下步骤:

(21a)定义资源解析器操作的接口类IResourceLoader,供用户扩展,接口中包括对新增、 修改、删除资源的处理以及设置解析器是否支持懒加载;

(21b)提供根据资源类型获取资源解析器的工厂类ResourceLoaderFactory。

所述的步骤(22)具体包括以下步骤:

(22a)定义资源拦截器操作的接口类IResourceHandler,供用户扩展,接口中包括对资 源解析前、后以及发生异常的处理;

(22b)提供根据资源类型获取拦截器的工厂类ResourceHandlerFactory。

所述的步骤(23)具体包括以下步骤:

(23a)遍历应用类路径下所有的资源处理器配置文件ResourceProcessor.xml,形成处理 器文件列表;

(23b)循环解析处理器文件列表中的文件;

(23c)针对每个处理器节点的资源处理器resourceProcessor,形成处理器描述模型 ResourceProcessor;

(23d)对处理器描述模型ResourceProcessor设置其资源类型属性;

(23e)对处理器描述模型ResourceProcessor设置其优先级属性;

(23f)对处理器描述模型ResourceProcessor设置其解析器属性,并对解析器实例化;

(23g)对处理器描述模型ResourceProcessor设置其拦截器属性,并对拦截器实例化。

所述的步骤(24)具体包括以下步骤:

(24a)遍历所有处理器描述模型ResourceProcessor对应的列表;

(24b)读取处理器描述模型ResourceProcessor中的资源类型属性和对应的解析器实例;

(24c)资源类型属性和对应的解析器实例形成映射列表。

所述的步骤(25)具体包括以下步骤:

(25a)遍历所有处理器模型ResourceProcessor对应的列表;

(25b)读取处理器模型ResourceProcessor中的资源类型属性和对应的拦截器实例;

(25c)资源类型属性和对应的拦截器实例形成映射列表;

(25d)对资源类型属性和对应的拦截器实例形成映射列表进行缓存。

所述的步骤(26)具体包括以下步骤:

(26a)遍历所有处理器模型ResourceProcessor对应的列表;

(26b)读取资源类型属性与优先级,形成映射关系列表;

(26c)对资源类型属性与优先级映射关系列表按优先级排序;

(26d)遍历资源类型属性和对应的解析器实例形成映射列表;

(26e)按优先级的排序顺序,对解析器实例按同样规则进行排序;

(26f)缓存排序后的资源类型与解析器实例映射列表。

该企业分布式应用系统中实现资源加载以及资源热更新的方法中,所述的步骤(31)具 体包括以下步骤:

(31a)查找模块资源所在的根目录;

(31b)遍历资源根目录下的一级子目录以及资源;

(31c)递归遍历子目录,遍历其下的子目录以及资源;

(31d)资源放入资源列表缓存,以资源所在的模块绝对路径为关键字,包括资源的修改 时间、绝对路径列表。

所述的步骤(32)具体包括以下步骤:

(32a)从缓存中的资源类型与解析器实例映射列表中计算出所有的已按设置的优先级进 行了排序的资源类型列表;

(32b)遍历模块资源缓存中的所有资源;

(32c)按资源类型设置,对资源进行分类,形成资源类型与物理资源的映射列表。

所述的步骤(33)具体包括以下步骤:

(33a)遍历缓存中的所有的资源类型列表;

(33b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源;

(33c)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截 器实例列表;

(33d)遍历查找到的资源拦截器实例列表;

(33e)执行资源拦截器实例的doBefore前执行方法,把资源列表作为输入参数传递到 拦截器中。

所述的步骤(34)具体包括以下步骤:

(34a)遍历缓存中的所有的资源类型列表;

(34b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源;

(34c)根据资源类型属性从资源类型与资源解析器实例映射列表缓存中查找对应的资源 解析器实例列表;

(34d)遍历查找到的资源解析器实例列表;

(34e)执行资源解析器实例的loadResource资源加载方法,把资源列表作为输入参数传 递到拦截器中。

所述的步骤(35)具体包括以下步骤:

(35a)执行资源解析器实例的isSupportLazyLoading是否支持懒加载方法;

(35b)如果返回为真,则表示此资源解析器支持懒加载;如果返回为假,则表示此资源 解析器不支持懒加载;

(35c)如果资源解析器不支持懒加载,则调用资源解析器执行资源加载;

(35d)如果资源解析器支持懒加载,则对资源引用关系进行缓存,其关键字为资源所在 模块的相对路径URI;

(35e)用户从资源模型缓存中根据资源URI取得资源模型时,如果从资源缓存模型中 未找到所对应的资源,则从资源引用关系缓存中查找此资源URI对应的资源物理信息,如果 存在,则调用此资源对应解析器实例的loadResource资源加载方法,对资源进行加载。

所述的步骤(36)具体包括以下步骤:

(36a)调用源解析器实例的loadResource资源加载方法后,形成资源对应的模型对象;

(36b)对资源模型对象缓存,其关键字为资源所在模块的相对路径URI,值为对应的模 型对象。

所述的步骤(37)具体包括以下步骤:

(37a)遍历缓存中的所有的资源类型列表;

(37b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源;

(37c)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截 器实例列表;

(37d)遍历查找到的资源拦截器实例列表;

(37e)执行资源拦截器实例的doAfter后执行方法,把资源列表作为输入参数传递到拦 截器中;

(37f)如果资源解析执行时出现错误,则执行资源拦截器实例的doException异常执行 方法,把资源列表以及发生的异常作为输入参数传递到拦截器中。

该企业分布式应用系统中实现资源加载以及资源热更新的方法中,所述的步骤(42)具 体包括以下步骤:

(42a)设置资源变更的扫描时间的设置单位;

(42b)设置监听资源变更的时间间隔。

所述的步骤(43)具体包括以下步骤:

(43a)遍历模块对应的目录以及子目录,查找对应的资源;

(43b)根据查找到的资源路径列表,与资源列表缓存进行比对;

(43c)查找到的资源在资源列表缓存中存在,但时间戳不同,则表示此资源已修改;

(43d)查找到的资源在资源列表缓存中不存在,则表示此资源为新增;

(43e)反向查找资源列表缓存,如果资源列表缓存中存在但在查找到的资源列表中不存 在,则表示此资源已删除;

(43f)对新增、修改、删除的资源形成资源变更列表。

所述的步骤(44)具体包括以下步骤:

(44a)从缓存中的资源类型与解析器实例映射列表中计算出所有的已按设置的优先级进 行排序的资源类型列表;

(44b)遍历资源变更列表中的所有资源;

(44c)按资源类型设置,对资源进行分类,形成资源类型与物理资源的映射列表。

所述的步骤(45)具体包括以下步骤:

(45a)遍历变更的资源类型与物理资源的映射列表;

(45b)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截 器实例列表;

(45c)遍历查找到的资源拦截器实例列表;

(45d)执行资源拦截器实例的doBefore前执行方法,把变更资源列表作为输入参数传 递到拦截器中。

所述的步骤(46)具体包括以下步骤:

(46a)遍历变更的资源类型与物理资源的映射列表;

(46b)根据资源类型属性从资源类型与资源解析器实例映射列表缓存中查找对应的资源 解析器实例列表;

(46c)遍历查找到的资源解析器实例列表;

(46d)执行资源解析器实例的loadResource资源加载方法,把变更资源列表作为输入参 数传递到拦截器中。

所述的步骤(47)具体包括以下步骤:

(47a)执行资源解析器实例的isSupportLazyLoading是否支持懒加载方法;

(47b)如果返回为真,则表示此资源解析器支持懒加载;如果返回为假,则表示此资源 解析器不支持懒加载;

(47c)如果资源解析器不支持懒加载,则调用资源解析器对变更资源执行资源加载;

(47d)如果资源解析器支持懒加载,则更新资源引用关系缓存,其关键字为资源所在模 块的相对路径URI。

所述的步骤(48)具体包括以下步骤:

(48a)调用源解析器实例的loadResource资源加载方法后,形成变更资源对应的模型对 象;

(48b)更新资源模型对象缓存,其关键字为资源所在模块的相对路径URI,值为资源变 更后对应的模型对象。

所述的步骤(49)具体包括以下步骤:

(49a)遍历变更的资源类型与物理资源的映射列表;

(49b)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源拦截 器实例列表;

(49c)遍历查找到的资源拦截器实例列表;

(49d)执行变资源拦截器实例的doAfter后执行方法,把变更资源列表作为输入参数传 递到拦截器中;

(49e)如果资源解析执行时出现错误,则执行资源拦截器实例的doException异常执行 方法,把变更资源列表以及发生的异常作为输入参数传递到拦截器中。

采用了该发明的企业分布式应用系统中实现资源加载以及资源热更新的方法,其包括开 发期实现资源解析器接口和拦截器接口并配置格式定义的操作、运行期对资源加载配置文件 解析的操作、运行期模块资源加载的操作以及运行期热更新线程监听的操作。从而使得对资 源的解析以及热更新工作更为简单而高效,增加新的资源类型时,无需修改核心代码,可以 完成以可插拔的方式进行资源处理器的注入。同时,采用本发明的方法,对资源的处理以及 解析过程更加直观,提高了开发的效率,快捷方便,系统运行效率较高,性能稳定可靠,降 低了开发维护的成本;而且增强了系统可移植性和可扩展性,使用户专注于业务逻辑的处理; 不仅如此,该方法还能够快速适应业务需求的变化和技术变化,能够支撑建立高度模块化而 且又高度整合的软件系统,适用范围较为广泛,为企业应用中对资源的管理打下了坚实的基 础。

附图说明

图1为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源加载接 口IResourceLoader类图。

图2为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源拦截器 接口IResourceHandler类图。

图3为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源解析器 工厂ResourceLoaderFactory类图。

图4为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源拦截器 工厂ResourceHandlerFactory类图。

图5为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源处理器 模型ResourceProcessor类图。

图6为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源处理汇 总类图。

图7为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源处理器 配置文件解析流程图。

图8为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源加载、 解析流程图。

图9为本发明企业分布式应用系统中实现资源加载以及资源热更新的方法中资源热更新 线程监听流程图。

具体实施方式

为了能够更清楚地理解本发明的技术内容,特举以下实施例详细说明。

在本发明的企业分布式应用系统中实现资源加载以及资源热更新方法应用于基于页面流 资源的加载以及热更新的具体实施例中:页面流描述为基于J2EE环境下单个HTTP请求处理 过程以及多个请求/页面之间的跳转关系,实现页面请求的流转,其配置格式采用XML结构, 资源的扩展名为.flow。

该企业分布式应用系统中实现资源加载以及资源热更新的系统结构及其方法,包括运行 期支撑资源加载及热更新扩展的通用框架和开发期资源加载以及热更新的配置格式定义。运 行期支撑资源加载及热更新扩展的通用框架包括对资源加载配置文件的解析,通过对该配置 文件的解析形成资源与解析器以及资源加载拦截器的映射列表,根据此列表能查找到资源对 应的处理器和相应的拦截器;同时,为支持资源的热更新操作,运行期启动一监听线程,监 听应用中所有资源的变化,当有资源发生变更时,把资源进行分类,然后交由配置的解析器 进行资源的处理。开发期资源加载以及热更新的配置格式定义包括了针对特定资源加载以及 热更新资源解析接口和拦截器接口的实现以及对此解析器、拦截器的注册。本发明的企业分 布式应用系统中实现资源加载以及资源热更新的方法包括开发期资源解析器接口、拦截器接 口实现以及配置格式定义操作、运行期对资源加载配置文件的解析操作、模块资源的加载操 作以及热更新线程的监听操作。

该实施例中的开发期资源解析器接口、拦截器接口实现以及配置格式定义操作包括以下 步骤:

(11)新建页面流资源解析扩展包,包括以下步骤:

a)通过开发环境“文件”菜单中新建子菜单,选择新建页面流资源解析扩展包;

b)输入页面流资源解析扩展包的名称,系统创建相应的目录结构;

c)生成页面流资源解析扩展包的资源树,包括配置、接口等结点。

(12)编写实现页面流资源解析器接口的实现类,包括以下步骤:

a)新建Java Class,实现资源加载的接口IResourceLoader,其类图如图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)在文件中配置资源处理的解析器、拦截器以及优先级,格式定义如下:

对本实施例扩展名为flow的资源的解析器类全称为com.FlowResourceProcessor,拦 截器类全称为com.FlowResourceHandler,优先级为10,则此资源对应处理器的配置为:

(15)页面流资源解析器扩展包部署到运行环境中,包括以下步骤:

a)在资源解析扩展包资源树上右击,在弹出菜单中选择“部署”菜单;

b)资源解析对应扩展包下的资源按目录结构部署到运行环境中。

经过以上步骤,资源处理的准备阶段已经完成,用户在添加新的资源处理时,通过几个 简单的步骤:实现资源解析器接口、实现资源拦截器接口以及配置资源解析规则的操作就完 成了。

该实施例中的运行期对资源加载配置文件的解析操作包括以下步骤,其流程图如图7所 示:

(21)提供支持资源解析器扩展的接口类,以供扩展,包括以下步骤:

a)定义资源解析器操作的接口类IResourceLoader,其类图如图1所示,供用户 扩展,接口中包括对新增、修改、删除资源的处理以及设置解析器是否支持懒加载;

b)提供根据资源类型获取资源解析器的工厂类ResourceLoaderFactory,其类图 如图3如示。

(22)提供支持资源拦截器扩展的接口类,以供扩展,包括以下步骤:

a)定义资源拦截器操作的接口类IResourceHandler,其类图如图2所示,供用户 扩展,接口中包括对资源解析前、后以及发生异常的处理;

b)提供根据资源类型获取拦截器的工厂类ResourceHandlerFactory,其类图如图 4如示。

(23)加载定义的资源解析器、拦截器与资源映射规则配置文件,包括以下步骤:

a)遍历应用类路径下所有的资源处理器配置文件ResourceProcessor.xml,形成处 理器文件列表;

b)循环解析处理器文件列表中的文件;

c)针对每个处理器节点resourceProcessor,形成处理器描述模型 ResourceProcessor,其类图如图5如示,资源处理关键类关系图如图6如示;

d)对处理器模型ResourceProcessor设置其资源类型属性;

e)对处理器模型ResourceProcessor设置其优先级属性;

f)对处理器模型ResourceProcessor设置其解析器属性,并对解析器实例化;

g)对处理器模型ResourceProcessor设置其拦截器属性,并对拦截器实例化。

(24)根据对配置文件的解析形成资源与解析器的映射列表,包括以下步骤:

a)遍历所有处理器模型ResourceProcessor对应的列表;

b)读取处理器模型ResourceProcessor中的资源类型属性和对应的解析器实例;

c)资源类型属性和对应的解析器实例形成映射列表。

(25)根据对配置文件的解析形成资源与拦截器的映射列表,包括以下步骤:

a)遍历所有处理器模型ResourceProcessor对应的列表;

b)读取处理器模型ResourceProcessor中的资源类型属性和对应的拦截器实例;

c)资源类型属性和对应的拦截器实例形成映射列表;

d)对资源类型属性和对应的拦截器实例形成映射列表进行缓存。

(26)对资源与解析器的映射列表按优先级进行排序,包括以下步骤:

a)遍历所有处理器模型ResourceProcessor对应的列表;

b)读取资源类型属性与优先级,形成映射关系列表;

c)对资源类型属性与优先级映射关系列表按优先级排序,优先级数字越大排序 越靠前;

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)如果资源解析器不支持懒加载,则调用资源解析器执行资源加载;

d)如果资源解析器支持懒加载,则对资源引用关系进行缓存,其关键字为资源 所在模块的相对路径URI;

e)用户从资源模型缓存中根据资源URI取得资源模型时,如果从资源缓存模型 中未找到所对应的资源,则从资源引用关系缓存中查找此资源URI对应的资源物理 信息,如果存在,则调用此资源对应解析器实例的loadResource方法,对资源进行加 载。

(36)缓存资源解析后的模型,包括以下步骤:

a)调用源解析器实例的loadResource方法后,形成资源对应的模型对象;

b)对资源模型对象缓存,其关键字为资源所在模块的相对路径URI,值为对应 的模型对象。

(37)执行资源解析后的拦截器,包括以下步骤:

a)遍历缓存中的所有的资源类型列表;

b)根据资源类型从资源类型与物理资源的映射列表中查找对应的物理资源;

c)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源 拦截器实例列表;

d)遍历查找到的资源拦截器实例列表;

e)执行资源拦截器实例的doAfter方法,把资源列表作为输入参数传递到拦截器 中;

f)如果资源解析执行时出现错误,则执行资源拦截器实例的doException方法, 把资源列表以及发生的异常作为输入参数传递到拦截器中。

该实施例中的运行期热更新线程的监听包括以下步骤,其流程图如图9所示:

(41)资源热更新线程的编写,包括以下步骤:

a)设置资源变更的扫描时间的设置单位,通常设置为秒;

b)设置监听资源变更的时间间隔,通常设置为5就可以了,即每5秒扫描一次。

(42)遍历模块对应的目录,查找变更的资源,包括以下步骤:

a)遍历模块对应的目录以及子目录,查找对应的资源;

b)根据查找到的资源路径列表,与资源列表缓存进行比对;

c)查找到的资源在资源列表缓存中存在,但时间戳不同,则表示此资源已修改;

d)查找到的资源在资源列表缓存中不存在,则表示此资源为新增;

e)反向查找资源列表缓存,如果资源列表缓存中存在但在查找到的资源列表中 不存在,则表示此资源已删除;

f)对新增、修改、删除的资源形成资源变更列表。

(43)对变更资源按资源解析器的配置进行资源的分类,包括以下步骤:

a)从缓存中的资源类型与解析器实例映射列表中计算出所有的资源类型列表, 此资源列表已按设置的优先级进行了排序;

b)遍历资源变更列表中的所有资源;

c)按资源类型设置,对资源进行分类,形成资源类型与物理资源的映射列表。

(44)执行变更资源解析前的拦截器,包括以下步骤:

a)遍历变更的资源类型与物理资源的映射列表;

b)根据资源类型属性从资源类型与拦截器实例映射列表缓存中查找对应的资源 拦截器实例列表;

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)如果资源解析执行时出现错误,则执行资源拦截器实例的doException方法, 把变更资源列表以及发生的异常作为输入参数传递到拦截器中。

经过以上步骤,企业应用系统中针对页面流资源处理包括资源解析以及资源热更新过程 全部完成,从中可以得出采用了该发明的企业分布式应用系统中实现资源加载以及资源热更 新的方法,使得对资源的解析以及热更新工作变得简单而高效,当增加新的资源类型时,不 再需要修改核心代码,可以完成以可插拔的方式进行资源处理器的注入。采用该发明的方法, 对资源的处理以及解析过程更加直观,提高了开发的效率,快捷方便,系统运行效率较高, 性能稳定可靠,降低了开发维护的成本;同时增强了系统可移植性和可扩展性,使用户专注 于业务逻辑的处理;不仅如此,该方法还能够快速适应业务需求的变化和技术变化,能够支 撑建立高度模块化而且又高度整合的软件系统,适用范围较为广泛,为企业应用中对资源的 管理打下了坚实的基础。

在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种 修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限 制性的。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号