AVIDM产品XML配置文件读取研究及应用
2016-07-22李天立
李天立
摘要:AVIDM 5.0系统在开发过程中,采用了模块化的开发方法,每个模块都使用了大量的配置文件,用于支撑属性格式化、模型树配置、功能权限、默认出厂配置等方面的应用。使用的配置文件类型主要包括Properties格式和xml格式。Properties格式的属性文件结构简单,包括key和Value,加载过程中可以自动覆盖和合并,由于其配置、合并和使用简单,在属性定义方面有很好的应用。AVIDM 5.0系统中有大量结构化的配置信息需要使用xml格式的配置文件[1]。Xml格式的优点是具有层级结构,但是XML文件的合并确有一定的难度。AVIDM 5.0系统支持模块化开发,模块之间需要对某一个主要的结构化配置文件进行扩展和补充,因此多模块环境下xml配置文件的查找、合并和解析便成了亟需解决的技术难题。该文针对以上需求提出了一种解决方案,并在给出了具体的实践案例,该方案不仅适合AVIDM系统,也适合所有基于模块开发的软件应用系统。
关键词:xml;模块开发;配置文件;开发规范
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)16-0113-03
1 问题空间界定
神舟AVIDM(企业级协同产品研制管理平台),是神舟软件公司在制造业信息化领域历经十余年打造出的拥有自主知识产权的、基于Web的企业级PDM/PLM产品。产品基于JavaEE和面向服务体系结构,全面采用Java、JSP、Applet等技术,实现产品研制所需数据、应用资源、软件工具与计算设备的有机集成。 AVIDM产品的宗旨为以信息技术为基础,以项目管理为主线、以技术流程和计划流程为依据、以满足国防和军工复杂产品技术状态管理为目标,为企业构建起一个基于Web的、从设计、生产到管理综合集成的分布式集成系统平台和协同工作环境[2]。在AVIDM系统的开发过程中,采用了大量的配置文件。为了方便研究多模块配置文件读取的模型和普适性的实现方法,我们可以将问题空间的前提条件界定如下:
1) 属性文件单独存储。
2) 应用模块的xml配置文件单独存储。
3) 应用模块都具有功能类似的xml配置文件。
4) 应用模块功能类似的xml格式配置文件存放目录层级结构及层级目录名称相同。
5) 应用模块功能类似的xml配置文件的内容节点层级结构及必要节点id相同。
6) 应用模块类似功能的xml配置文件支持根据类似功能合并其内容,可以达到扩展功能的目的。
7) 应用模块不同功能的xml配置文件需要统一配置和解析,以解决模块对不同配置文件的需求。
8) 解析后的配置文件转换为对象可以供调用方直接使用。
以上假定条件具有一般性意义,能够覆盖AVIDM产品开发过程中读取xml配置文件的各种具体需求,让各种具体需求成为他们的子集,并且通过特定的手段和方法处理后得到解决。
2 xml配置文件读取方案
为了实现多模块环境下结构化信息配置文件的查找、合并和解析,在充分参考国内外先进技术后,提出了解决问题的思路:
1)配置文件按照约定的根目录和目录深度存放,以便于使用Spring提供的通过通配符查找文件的方法加载文件[3]。
在AVIDM 5.0系统中,约定使用一个存放在固定位置的目录AVIDM_HOME作为配置文件存放的根目录,在根目录下建立一个plm目录作为多项目配置文件的父目录,每个项目下需要扩展的配置文件按照约定的路径存放在相应的目录下。比如:模块adm需要扩展按钮的定义,则其配置文件的存放路径为%AVIDM_HOME%/plm/adm/actions,其中adm为模块名字,actions为约定的目录,使用Spring查找文件的路径通配格式为%AVIDM_HOME%/plm/*/actions,以此可以获取该目录下所有的文件。
2)Xml配置文件中所有待合并的结构化元素根据结构化的层级和id属性值两个标准进行元素合并。
Apache组织的顶级项目Configuration默认提供三种Xml配置文件合并模式:元素合并,即以后来的元素完全覆盖该元素,属性覆盖,即把相同结构层级相同元素的属性以解析的先后顺序覆盖,属性合并,即把相同结构层级相同元素相同属性的属性值以逗号隔开合并起来。在AVIDM 5.0系统中,所有的xml元素都有id属性,并且该id属性在同层级结构中不会重复,相同的属性id为相同的元素。基于此特征,Configuration项目中提供的默认配置都不能满足合并要求。在该创新中通过扩展“属性覆盖“方法并添加id属性相等的需求,实现可扩展的xml配置文件合并。
3 xml配置文件读取支撑技术
在多模块xml配置文件模型的支撑下,为了保证多模块环境下xml配置文件读取服务能够达到预期目标,我们在遵循软件工程规范[4]和AVIDM开发规范的基础上,设计了基于公共服务组件的xml配置文件读取组件。整个组件由用户调用接口、xml文件配置规范、xml文件重新加载机制,xml配置文件读取支撑技术等部分组成。具体内容如下:
1) 用户调用接口:旨在为使用方提供统一、方便的调用服务。该服务方法符合AVIDM系统服务的开发调用规范。在AVIDM系统中,所有的服务都要提供相应的助手类,由助手类获取到相应的服务,供调用方使用。接口的实现类由spring管理,通过助手类使用静态的方法从Spring的管理的对象池中获取接口实现类的单例,并提供给调用方使用。
2) xml配置文件规范:AVIDM产品中xml配置文件需要满足相应的规范,以便于实现xml配置文件的合并解析。配置文件规范分为合并规范、解析规范、配置文件存放路径规范。
① xml配置文件合并规范:在AVIDM产品中,需要合并的xml配置文件的根元素必须相同,在根元素上不添加属性。根元素以下的元素需要合并时,需要提供元素的id标识,合并的内容包括元素的属性和元素的子元素。不需要合并的元素,则以新元素的规则增加到合并后的内容中。
② xml配置文件解析规范:解析每一个元素对应一个类,多个相同元素对应列表类,元素的属性对应类的属性,属性的名称与类中属性的名称相同,使用该规范可以保证xml文件的配置、纠错简单可行。
③ 配置文件存放路径规范:需要合并的配置文件存放路径相对于模块的根目录必须一致,以便于使用路径模糊匹配规则查找文件。
3) xml配置文件重新加载:修改修改配置文件后,在不影响生产环境正常运行的情况下需要支持配置文件的重新加载,即时生效。产品在生产环境中,经常会根据实际环境的运行情况做一些调整,调整后需要即时生效,为了不影响系统的正常使用,提供了重新加载配置文件的服务,供生产环境实时调用。
4) xml配置文件读取支撑技术:xml相关的读取解析技术目前已经成熟,一些开源组织的公共组件提供了基本的读取解析功能,在该方案中可以直接调用。
4 应用实例
AVIDM系统是可扩展、可组装的系统,新模块按照一定的规则组装到系统中,新模块的功能可以扩展已有系统的功能,也可以自定义新的功能,组装到系统中。在系统中主要体现在按钮的增加上,扩展原有系统的功能,或者增加新的功能。
在AVIDM系统中,存在数以千计的按钮,这些按钮按照如下的原则组织:
1)按钮定义:每个按钮自身有若干属性定义,比如标题、图标、显示文字、点击后触发的动作、点击后打开的页面等属性。
2)按钮组:多个按钮排列组合成按钮组。每个按钮的定义或者组装都有唯一标识,系统根据该唯一标识使用按钮或者按钮组。不同的模块可以扩展按钮组中的按钮,以增加新的功能。在系统运行过程中,需要合并所有的按钮组定义文件,并把合并后的结果转换成按钮对象供系统调用和展示。
假设系统中存模块foundation和pdm两个模块,每个模块中都有action定义的属性配置文件,则文件之间的关系可以表述如图1:
系统在运行过程中需要根据模块来合并相同功能的属性配置文件,根据模块下的路径区分不同功能的属性文件。
系统中也存在不同功能的配置文件,比如按钮组的定义文件,foundation模块和pdm模块之中的按钮定义配置文件间的关系如图2所示:
在遵循开发规范的前提下,设计出了读取配置文件的java类图,如图3所示。
在ConfigServiceImpl中实现对文件的读取、合并、解析。
1)读取:调用Spring框架中已有的方法按照路径通配符的方式读取文件,具体做法是使用Spring的路径匹配的资源解析器获取到文件资源。
2)合并:根据Apache通用项目Configuration中的工具类CombinedConfiguration调用自定义的合并器实现按照ID合并xml文件。
3)解析:使用Apache通用项目Digester工具类解析合并后的xml文件,转换成相应的对象。
4)把所有属性文件的路径等配置到固定的元数据配置xml中,把所有xml读取、合并、解析所需要的信息配置到固定的元数据配置文件中,根据该元数据配置文件读取、合并、解析相关的类,并实现重新加载。
5 结束语
使用该方案成功地实现了多模块下属性文件和xml配置文件的查找与合并,由于其易于理解和学习、使用方便、稳定性高等优点,在AVIDM 5.0系统中得到了充分的应用。
1) 应用在按钮配置模块,实现了多模块下按钮的无缝扩展。在AVIDM 5.0系统中,界面上的操作按钮统一使用配置文件定义和管理,首先使用Properties配置文件实现单个按钮各个属性的定义,使用xml文件把单个按钮组织成按钮组合,系统根据按钮组合的标识读取该按钮并展示到系统中。使用该方案可以扩展按钮组合的配置文件从而实现多模块下按钮配置的扩展。
2) 应用在功能权限模块,实现了功能权限定义、列表展示、出厂默认配置等的扩展。功能权限定义、功能权限列表展示、功能权限出厂默认配置功能所需要的信息都以结构化的形式存储在xml配置文件中,以id属性标示其唯一性,其他属性存储在该元素中,从而使用该方案可以完美解决功能权限模块的扩展。
该方案支持按照目录结构的xml文件的查找,其本身具备的按目录查找能力不仅适用于properties文件、xml文件等普通文件的查找,也适应与其他格式的普通文件查找。其结构化的xml配置文件合并能力也可适用于不具有id属性的xml元素的合并。因此在AVIDM 5.0系统中其他有xml合并和按目录查找文件需求的模块也从可以从中受益。
参考文献:
[1] 王海波,耿晖,姜吉发,等. 基于XML的数据交换的实现[J]. 计算机应用,2010(4).
[2] 北京神舟航天软件技术有限公司[EB/OL].http://www.bjsasc.com/AVIDMintro.html.
[3] 尹建璋.基于XML的应用层数据交换技术的研究[J].计算机与现代化,2009,9(8).
[4] 张海藩. 软件工程导论[M].3版.北京:清华大学出版社,1998.