STKOS相关工具集成框架下的插件封装研究与实现*
2015-03-14吴思竹郑见立郑慧霞
吴思竹 洪 娜 郑见立 郑慧霞 方 安
(中国医学科学院医学信息研究所 北京 100020)
STKOS相关工具集成框架下的插件封装研究与实现*
吴思竹 洪 娜 郑见立 郑慧霞 方 安
(中国医学科学院医学信息研究所 北京 100020)
针对知识组织相关工具集成服务系统的需求和应用场景,提出基于OSGi的科技知识组织体系(STKOS)相关工具集成框架和基于该框架的插件封装设计思路和主要流程,阐述其实施效果。封装后的插件可自动注册、存储到系统插件库中,进行分类管理、版本和生命周期管理,能够提供工作流组配或独立运行、下载服务,供STKOS用户按需使用。
OSGi; 工具集成; 插件; 知识组织
1 引言
由国家科技文献信息中心牵头并组织实施的国家科技支撑计划“面向外文科技文献信息的知识组织体系建设和应用示范”项目,旨在构建我国面向外文科技文献的,涵盖理、工、农、医等领域的多层次知识组织体系,以支持信息资源揭示、组织和发现。项目开展同时,创建了多种用于知识组织构建、编辑、检测、管理的工具,如词汇抽取工具、词法分析工具、质量检测工具、同义词识别工具、新词推荐工具、词形规范工具、词表翻译工具、统计分析工具等。其中,很多工具不仅为项目构建的知识组织系统本身服务,也可以分离出来满足用户在利用其他知识资源时复用,避免工具重复开发建设,并且可将不同功能的知识组织相关工具进行组配形成满足用户特定需求的工作流,为用户提供新的应用。因此,将这些知识组织工具封装、集成在统一框架下形成“科技知识组织体系(Science and Technology Knowledge Organizing System,STKOS)的相关工具集成服务系统”具有重要的实际意义。本文主要阐述知识组织相关工具集成服务系统的需求分析和应用场景,介绍基于OSGi的知识组织工具集成框架及插件封装等关键技术、设计思路和实现情况。
2 需求分析
“科技知识组织体系的相关工具集成服务系统”主要收集、选择与STKOS相关的各种评估、筛选、映射、关联、加工、集成、整合和管理的系统和工具,在科技知识组织体系共享平台上进行组织和发布。为便于STKOS用户使用知识组织工具进行知识组织体系的编辑、管理、裁剪及利用,需设计可集成的系统框架,对STKOS相关课题涉及的各种知识组织工具的核心模块进行封装,规范这些插件的类型、输入/输出接口,使这些核心模块能够被集成到知识组织工具集成框架中,形成可被管理的组件对象。并且通过构建基于知识组织体系建设的工作流,使用户可以按需求选择各种知识组织工具的核心插件,将这些核心插件有机组合起来,完成某项知识组织体系建设的需要。因此,构建的知识组织工具集成框架要具有良好的封装业务逻辑和模块化集成思路,能够满足可扩展、动态部署等需求。
3 基于OSGi的STKOS相关工具集成框架
3.1 技术基础
对以Java语言开发的不同来源的知识组织工具进行规范封装、集成在统一框架中,并提供用户服务是本文的研究重点。支持异构模块动态部署、增量式模块开发、运行时刻服务动态管理、敏捷性开发等软件架构技术为本项目研究提供了基础。(Open Service Gateway Initiative,OSGi)是OSGi联盟于1999年制定的基于Java语言用于定义动态组件系统的一组规范[1],为开发面向服务、基于插件的大型软件项目提供了简单、动态和轻量级的基础框架,这种架构体系以由多个组件构成的Bundle插件方式划分系统。Bundle是一种较好的规范,突破了Java中默认Package为封闭单元的不足,具有模块化和生命周期。OSGi可将组件组装进一个应用进行动态的安装、卸载、运行和停止,具有足够的灵活性、扩展性和高效性。目前,大量平台和工具,如Sun的Glassfish、IBM的WebLogic、WebSphere等核心产品已全部迁移到了基于OSGi搭建的microServices框架上,使现有产品的性能得到改善和提高[2]。著名的Java程序开发工具Eclipse也基于OSGi规范框架进行了重新搭建,获得了较好的应用效果[3]。在国内,淘宝、支付宝、阿里巴巴等著名的电子商务网站也在其服务平台中使用OSGi框架进行重构,以提高平台的模块化和灵活的可扩展性。葛新和王焘等也分别探索了基于OSGi的面向服务软件体系架构建设方法,提高软件模块的复用能力[4-5]。
鉴于项目目标、系统建设需求和OSGi框架具有模块化、动态化、可扩展等优点,课题选用OSGi规范作为知识组织工具集成和组件建设的核心框架。OSGi是一种规范,需要通过具体框架实现。现有Equinox[6]、Knopflerfish[7]、Felix[8]、SpringDM[9]等多种OSGi开源实现框架,其中,Equinox和Felix最为成熟且具有较为广泛的应用,在实际应用中,Equinox是Eclipse所使用的OSGi框架,是Eclipse强大的插件体系的基础,Eclipse的稳定可靠性也证明了Equinox的有效性。结合本系统实际构建需要,综合考虑OSGi实现框架的稳定性、可扩展性、服务的全面性等,最终选取OSGi实现框架Equinox进行STKOS相关工具集成服务系统开发和建设。
3.2 集成框架
图1为STKOS相关工具集成服务系统的工具集成框架,将不同来源、不同类型的知识组织工具以插件形式集成在统一框架下。工具集成框架的实现依赖OSGi规范,实现从工具注册、表示、存储、封装,到插件的表示、存储、组配、交互、运行、集成、发布、服务的完整流程,并且提供对多种关系处理的管理机制和方法,如插件安装、启动、解析、停止、卸载的生命周期管理,插件间数据交互机制的管理,工作流的定制、监控、管理等,最终实现知识组织相关工具的插件化和插件的服务化,从单一课题独用到课题组及更大范围的工具规范管理、集成共用、共享的目标。STKOS相关工具集成服务系统的整体框架基于JVM内核,遵循OSGi规范框架,共分为核心业务层、管理层和服务层3个层次。核心业务层主要构建STKOS工具仓储,包括工具库和插件库,工具库主要存储各课题提交的知识组织工具,对工具进行插件封装后,形成插件存储在插件库中。工作流引擎,可将插件库中的插件组配为工作流满足特定应用。服务层主要面向用户提供工具和插件的浏览、检索、下载及工作流的定制、组配、运行等服务。管理层主要是提供对系统用户、用户单位的管理、日志管理、工具、插件及工作流的管理等。
图1 STKOS相关工具集成服务系统的工具集成框架
4 插件封装
4.1 设计思路
插件封装是STKOS相关工具集成服务系统建设的重要任务之一,其设计思路,见图2。STKOS相关课题提交的工具均存储在工具集成系统的工具库中,存储工具jar包及所需第3方jar包,工具运行的相关信息,如运行环境、调用接口等。插件封装基于OSGi的Equinox实现框架,通过对提交工具中的核心工具的jar包及其运行信息提取,对工具jar包加载并进行结构解析和规范接口封装,将工具封装为符合OSGi规范的插件。STKOS相关工具集成框架同时提供插件测试,封装成功后的插件可自动注册、存储到插件库中,按功能分类,并对插件进行版本和生命周期管理,提供工作流组配或独立运行的服务,为STKOS用户提供按需使用。
图2 知识组织工具插件封装思路
4.2 主要流程
4.2.1 概述 考虑STKOS工具开发用户上传的知识组织工具在功能、粒度、依赖的数据规模及类型等方面可能存在的复杂性,系统选择核心知识组织相关工具进行插件封装及服务提供,将封装过程分为自动封装和后台手动封装。自动封装主要解决粒度小,功能独立、单一的知识组织相关工具封装需求,可由工具提交用户在提交工具后由系统自动完成。而一些较为复杂、需要开放特定接口或无法自动封装的知识组织相关工具,由系统管理员进行后台手动封装、检测后再上传到插件库,发布并提供用户服务,以确保插件的可用性和有效性。知识组织用户提交的工具原则上实现单一功能,以jar包形式上传到系统,上传遵循系统向导,按步填写工具相关的描述信息,如工具功能描述、提交机构、开发环境、运行环境、工具类型、开发语言、备注等,这些描述用以进行工具及插件的表示,为多角度发现工具或插件提供有效信息。其中,工具运行调用的类名称、方法名称、调用方法中应输入参数的数量、参数类型、工具版本号以及工具运行所需的第3方jar包的信息最为重要。这些信息有助于系统进行有效的插件封装,当有工具在其实现中引入了第3方jar包,在系统封装过程中原则上不再对其进行拆分,而视为一个完整的工具包。知识组织工具的插件封装的主要流程,见图3。
图3 封装插件的主要流程
4.2.2 工具jar包结构解析 从工具库加载工具jar包及其相关描述信息,解析工具jar包结构。检测工具描述中记录的工具运行需调用的接口和类是否存在其中;如无误,则封装开始。
4.2.3 定义Bundle接口 插件通过接口提供功能,因此,封装首先要定义Bundle接口,先创建一个包含继承工具jar包接口与实现子类的Java文件和Bundle激活器Activator文件,分别放在com文件和searchbundle文件下。在Activator.java文件中写入Bundle启动及停止框架调用的start()和stop()方法,通过BundleContext的registerService方法注册service,其中涉及的3个参数分别是service的接口、实现和属性。实现创建Bundle运行接口的Java文件和Activator.java文件的核心方法为createClassFile和createActivatorFile。
4.2.4 编译打包 STKOS相关工具集成服务系统的插件封装主要采用Apache软件基金会开发的Apache Ant将重写的工具进行编译打包。在Java环境中,Ant可自动化实现软件编译、测试、部署等系列步骤。在(1)操作前先启动Ant打包所需的cmdjar.bat环境并修改build.xml文件。创建打包的路径,放入要打包的文件:com文件夹,包括工具实现接口(实现类和方法)的java文件;searchbundle文件夹,包括Bundle激活器Activator.java文件;lib文件夹,包括工具jar包、工具实现依赖的第3方jar包和必须的org.eclipse.osgi_3.8.1.jar。同时,也需要将配置文件build.xml和Ant打包所需的jar包也放在打包路径下的dist文件夹中。通过语句Runtime.getRuntime().exec("cmd /c start " + projectPathName + "cmdJAR.bat")执行打包编译命令。编译后,新生成的jar包中生成新的Manifest.mf文件。工具打包核心方法为projecttoJAR()。
4.2.5 修改Mainfest.mf文档 STKOS相关工具集成服务系统重写位于jar内部META- INF路径下的Mainfest.mf文档,该文档提供了框架需要安装和激活Bundle所需的必要信息,同时说明Bundle对外提供服务的功能以及允许外部对其引用的包。在STKOS相关工具集成服务系统中工具封装时必须写入Mainfest.mf文档的信息项,见表1,其中,Import-Package和Export-Package记录了重要的插件交互接口,揭示了当前插件要引用及依赖的包。修改Mainfest.mf文档的核心方法是writeMetaInFile。
表1 Mainfest.mf文档中的信息项
4.2.6 有效性检测 封装完成后对插件进行在线测试。加载Equinox容器,从Equinox中获取OSGi服务实例。将封装好的插件调度到插件运行环境中,准备进行插件测试。根据插件要求输入参数和测试数据,对比输出结果与预期结果。如果一致则插件封装成功,功能有效,可发布使用。否则失败,打上失败标签。如插件自动封装失败,则转至手动封装。启动Equinox的核心方法为start、停止Equinox的方法为stop、获取OSGi服务实例的方法为getOSGiService、获取OSGi中插件的类的方法为getBundleClass。手动封装由系统管理员在Eclipse中建立工具的项目工程,在项目中加入描述文件MANIFAST.MF用于描述OSGi相关的配置信息。特别注意其Import-Package和Export-Package中的信息是否书写正确,然后利用Eclipse提供的Export功能,来直接导出插件工程,测试有效后上传到系统。
4.2.7 存储入库 封装后的插件,经测试成功后,注册存储到插件库中,并进行插件分类。同时存储插件的相关信息,包括安装环境、运行环境、提交机构、版本号、封装时间等。
5 实现效果
5.1 运行环境
(1)硬件环境。服务器系统:Windows Server 2003/ Windows Server 2008/Linux;内存:4GB以上;系统客户端要求:浏览器支持IE6以上版本,分辨率最小为1 024×768。(2)软件环境。开发语言:Java;开发平台:Eclipse 3.7/My Eclipse 6.5;数据库:MYSQL5.1;软件:Apache Ant、Equinox。
5.2 实施效果
在STKOS相关工具的集成服务系统中已实现插件封装的功能,并利用实际工具进行了测试实现。通过系统上传入口上传SKOS概念查询工具QuerySTKOS,定义版本为1.0。工具上传成功后,工具管理中显示工具处理状态为“新入库”。点击该工具,可以看到该工具的详情,包括功能描述、版本号、所属机构、调用的类名、方法名等,提供工具的在线测试和下载使用。管理员权限下对工具测试审核成功后,在详情页面点击“审核”按钮,工具管理页面的工具状态转为“审核通过”,可以进入插件封装阶段。工具详情页面中的“未封装”状态隐藏,“封装”按钮显示,点击“封装”按钮,自动封装程序开启。工具自动封装时,界面变灰,显示正在封装。封装成功后,工具管理界面可看到工具状态变为“已封装(自动)”。插件管理中插件库创建新的入库插件QuerySTKOS,可看到插件信息,其继承工具的全部信息,并增加新的入库封装时间。点击“QuerySTKOS”插件名可以进入插件详情页,进行插件的测试使用。在文本框中输入查询的概念名,返回概念相关信息生成的RDF文本,见图4。如果自动封装失败,工具管理中工具状态显示“自动封装失败”。由管理员检查后将手动封装好插件通过界面上传到系统中。
图4 插件详细信息和在线测试结果
封装后,工具jar包和插件中Menifes.mf文件中的内容发生了变化,增加了插件的运行信息。封装前Manifest.mf中的信息为:
Manifest-Version: 1.0
封装后插件中增加了Bundle名称、版本号、文本标识等相关描述信息:
Manifest-Version: 1.0
Bundle-Name: QuerySTKOS
Bundle-SymbolicName: QuerySTKOS
Bundle-Version: 1.0
Bundle-Activator: searchbundle.Activator
Import-Package: org.osgi.framework;version="1.3.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ClassPath: libs/querystkos_1.0.jar,.
Export-Package: com.search.service
封装后的多个插件也可以应用于工作流组建,例如两个插件,STKOS查询插件和STKOS质检插件组配形成查询STKOS片段进行质量检查的组合工具提供用户服务。
6 结语
本文介绍了STKOS相关工具集成服务系统中的集成框架,以及集成框架下插件封装的设计思路和主要流程,进行了系统实现和测试。系统能够将课题各成员单位提交的知识组织相关工具封装集成到知识组织工具集成框架中形成可被管理的组件对象,规范管理工具的输入/输出接口、功能类型等,实现了工具的复用、共享。封装后的插件也可被用于组建知识组织体系建设的工作流当中,用户按需求选择各种知识组织工具的核心插件,将这些核心插件有机地组合起来成为工作流,完成某项知识组织体系建设的需要。目前,STKOS相关工具集成服务系统的主体功能已经开发完成,不断配合陆续提交到系统的知识组织相关工具开展系统的测试和完善工作,以便更好地支持STKOS用户的工具共享、复用。
1 郭庆, 李楠, 李守超.OSGi实战[M].北京:人民邮电出版社,2013.
2 林昊,曾宪杰.OSGi原理与最佳实践[M].北京:电子工业出版社,2009.
3 Eclipse[EB/OL].[2014-09-01].http://www.eclipse.org.
4 葛新,董朝阳,梁小江.基于OSGi面向服务的软件体系架构[J].计算机技术与发展,2012,22(10):121-124.
5 王焘,魏峻.一种面向OSGi的构件化软件再工程方法[J].计算机科学与探索,2009,3(6):601-611.
6 OSGi In Practice[EB/OL].[2015-02-27]. http://njbartlett.name/files/osgibook_preview_20091217.pdf.
7 Knopflerfish[2015-02-27].[EB/OL].http://www.knopflerfish.org/.
8 Felix[2015-02-27].[EB/OL].http://felix.apache.org/.
9 Rubio D. Pro Spring Dynamic Modules for OSGi? Service Platforms[M].Berkeley, Calif: Apress, 2009:149-176.
Research and Implementation of Plug-in Packaging Based on the Integrated Framework for STKOS-related Tools
WUSi-zhu,HONGNa,ZHENGJian-li,ZHENGHui-xia,FANGAn,
InstituteofMedicalInformation,ChineseAcademyofMedicalSciences,Beijing100020,China
According to the requirements and application scenarios of the integrated service system for knowledge organization related tools, the paper proposes the integrated framework for Science and Technology Knowledge Organization System (STKOS) -related tools based on OSGi as well as the design idea and main processes of plug-in packaging based on this framework, and elaborates its implementation effects. The packaged plug-in can be registered and stored into the system plug-in library automatically for sort management, version and life cycle management. They can also realize the assembly or independent operation of work processes and provide the download service for STKOS users to use as required.
OSGi; Tools integration; Plug-in; Knowledge organization
2015-05-06
吴思竹,博士,助理研究员,发表论文20篇;通讯作者:方安。
国家“十二五”科技支撑计划项目课题“科技知识组织体系共享服务平台建设” (项目编号: 2011BAH10B03)和其子课题3“科技知识组织体系(STKOS)相关工具集成服务系统建设”(项目编号: 2011BAH10B03-1)。
R-056
A 〔DOI〕10.3969/j.issn.1673-6036.2015.11.013