一种软件构件服务化封装方法

文档序号:6600979阅读:791来源:国知局
专利名称:一种软件构件服务化封装方法
技术领域
本发明属于系统软件集成领域,具体涉及一种将软件构件自动化封装成Web服务 的技术,是一种实现以构件为基础的遗留系统与未来采用SOA技术体制的新系统综合集成 的手段。
背景技术
新研系统与遗留系统一体化设计与综合集成技术是软件开发领域中重要的关键 技术。当前随着信息技术的发展,软件系统构建朝网络化、服务化方向转型。遗留系统软件 服务化技术是实现系统服务化,实现面向服务新研系统与遗留系统一体化和综合集成的关 键。当前实现遗留系统软件服务化的方法主要有两个,一是依据业务需求,为相关的 软件模块重新设计服务化接口和服务实现,通过软件重构实现服务化。这种方法与新研系 统的一体化整合程度好,服务接口规范。但是需要重新开发功能相近的服务化模块,原有的 代码无法复用,软件开发量大,集成时间长。二是直接对已有软件模块进行服务化封装,通 常的做法是在.NET平台上将非托管动态库文件封装成C#语言形式的Web服务。这种方法 充分复用已有代码,对原有的软件改动小。但是整个过程目前只提供手工方法,当面对复杂 的动态库时,封装的工作量大。在文献“基于Web服务的企业应用集成研究”中,提出了采用J2EE平台基于Web 服务的企业应用集成框架,其核心思想是使用自底向上的方法,为企业遗留系统(如CRM、 ERP、SCM)中的功能构件设计符合Web服务标准的接口描述文件和服务具体实现,通过创建 适配器使这些新服务之间以及和原有的遗留系统间能够进行信息交互。这种方法本质上是 将原有系统中需要服务化的功能重新进行面向服务的设计和开发,在遗留系统和新服务之 间通过代理机制实现交互。主要存在的问题是,在面对大型遗留系统时,由于应用自身逻辑 和功能复杂,使得对系统功能的服务化设计、开发工作量增大,整个系统集成时间增长,并 且易出错。在文献“基于DCOM组件的PDMS的Web服务封装”中,使用的方法是针对原动态库 暴露的接口进行薄层封装,即利用.NET的运行时交互功能(runtimeinterop facilities) P/Invoke,将C风格的动态库中接口或非托管(immanaged) C++类封装成C#语言的托管代 码,并将其发布为Web服务。这种方法改动量小,基本继承了原有的软件功能,但是因为整 个过程是完全人工实现,对封装人员的技术水平要求高,同时当面对复杂的动态库时,封装 的工作量大。另外其并没有给出统一的描述软件构件Web服务元信息的模型,来规范服务 外部接口文件(WSDL)的生成。

发明内容
发明目的本发明的目的是针对现有技术的不足,提供一种能够对软件构件高效 规范封装的服务化封装方法,。
技术方案为实现上述目的,本发明所述的软件构件服务化封装方法,首先将原动 态库中的元信息提取出来;再以此为基础,利用现有的java调用C或C++语言技术和工具, 以转调的java代码作为Web服务的具体实现部分,实现java对遗产系统的转调;最后将服 务类文件部署到特定的Web服务运行环境中(目前支持三种服务运行环境,包含Axis2、 MULE、SCA),根据用户的选择配置产生符合各自平台规定的部署描述文件,并将其和已生成 的服务实现类文件部署在各自的运行环境中,发布为相应的Web服务。该方法具体包括如下步骤(1)根据用户从界面设置的服务描述信息,以及原始动态库的头文件,采集出服务 的元数据信息,并存储在统一的Web服务接口模型中,为配置文件生成以及代码转调提供 了所需的信息支持;(2)以步骤(1)采集到的元数据信息为基础,利用Java调用C/C++语言工具SWIG 生成java转调代码和CXX临时文件;;(3)利用自动生成的make文件,调用make命令将cxx临时文件、lib文件和原始 头文件产生包装的dll文件;(4)动态构建抽象语法树,并以此来解析java中间代码,将获得的接口信息存入 接口函数数据模型中,用其填充显示界面中的接口提示信息;根据用户选择暴露的接口信 息,包装一个接口的java文件和一个实现接口的java文件,实现的java文件中加载包装 后的DLL;(5)根据用户的选择配置产生符合各自服务运行环境规定的部署描述文件;(6)并将步骤(5)产生的部署描述文件和已生成的服务实现类文件部署在服务运 行环境中,发布为相应的Web服务。所述Web服务接口是通过用户提示的方法,支持根据用户选择暴露的原动态库中 的接口自动生成。所述自动生成make文件为首先建立make文件结构模型,从逻辑的角度对make 文件参数进行了分类,在此基础上构建参数模板,包括依赖于具体源码工程的工程参数模 板以及与编译平台紧密相关的平台参数模板;生成方法为首先按照规定的格式生成工程 参数模板并保存到特定路径,接着解析该模板并按照解析结果从平台相关参数模板中读入 所需数据,最后生成所需的make文件。有益效果本发明与现有技术相比,其有益效果为1、本发明规范了服务接口模型,使得构件封装为服务后,对外提供的接口形式在任何服务运行平台中都保持一致,提高 了封装后服务的互操作性,实现了以构件为基础的遗留系统与未来采用SOA技术体制的新 系统的交互能力;2、在本发明支持下能够将多种形式的软件构件(如C动态库、C++动态库 和java代码段)封装为服务,并且也支持根据用户配置动态地发布为多种类型的Web服务 实现,有效的支撑了各种形态的构件服务化以及各种异构的SOA实现技术的集成;3、本发 明还提出了统一的构件服务化封装方法和软件实现,基于该流程编码实现的自动化服务封 装工具能够大大提高遗产系统服务化的效率;该封装流程还具有很高的灵活性,它能根据 需要扩展其中的代码转调功能,以支持不同形式的遗留构件的服务化封装,从而使其应用 范围更加广泛。


图1为软件构件服务化封装方法的原理图;图2为本发明提出的服务封装流程图;图3为头文件元数据信息自动抽取流程图; 图4为服务接口描述信息模型图;图5为make文件生成器原理图;图6为中间代码编译make文件结构图;图7为make文件生成器模型图;图8为平台相关参数模板图;图9为make文件生成序列图;图10为使用make文件构建流程图。
具体实施例方式下面结合附图,对最佳实施例进行详细说明,但是本发明的保护范围不局限于所 述实施例。图1所示为软件构件服务化封装方法的原理图,它依据创建的服务接口模型,通 过规范的服务封装流程和自动化服务封装工具,将C/C++语言的动态库形式的遗留系统 软件自动封装为Web服务。本发明提出一种通用的系统软件服务封装的方法,它首先定义 了一个统一的Web服务接口模型,以描述服务的基本元信息,从而规范服务外部接口文件 (WSDL)的生成;其次利用多语言转调工具,通过自动生成的配置文件实现编程语言间的互 操作;在封装过程中,使用服务接口自动生成技术,支持用户可选择地暴露原动态库的接 口 ;最后在部署过程中,提出了多Web服务实现适配技术,通过自动生成的,符合不同服务 运行环境(Axis2、MULE、SCA)规定的部署描述文件将封装后的服务进行发布。图2为本发明提出的服务封装流程图,首先用户将需要服务化的业务模块从原有 的遗产系统中提取出来,并按照封装要求规范化导出函数出\入参的数据类型,并判断待 封装遗产系统的语言类型,如果是C\c++代码则继续步骤(1),否则直接跳到步骤(5);步骤(1)根据用户从界面设置的服务描述信息(如服务的中英文名称、服务功能 描述、服务地址、服务关键字、服务类型信息等),以及原始动态库的头文件(.h文件),采集 出服务的元数据信息,并存储在一个设计合理的自定义内存数据结构中(该数据结构模型 在技术方案中已明确定义),为配置文件生成以及代码转调提供了所需的信息支持;步骤⑵主要是用户确定服务名,.h,.dll和lib文件,以后所有生成的文件命名 都根据服务名确定,建立工作目录和服务展示目录,.h和lib文件拷贝到工作目录,.dll拷 贝到服务展示目录;步骤(3)完成java代码转调功能,以步骤⑴获取的服务接口描述信息为基础构 造.i文件,即SWIG接口文件,利用SWIG工具的命令产生出Java中间代码和cxx临时文件, 在工作目录创建目录(包的目录),并将生成的java文件和CXX临时文件拷贝进去;步骤(4)根据步骤(3)中产生的cxx文件,使用编译器自带的Make工具编译链接 CXX临时文件,原始头文件和lib,生成可被Java加载调用的DLL。在生成make文件过程中, 首先按照规定的格式生成工程信息文件并保存到特定路径,接着生成器解析工程信息并按照解析结果从平台相关参数模板中读入所需数据,最后生成客户程序所需的Make文件;步骤(5)以java中间代码作为输入,动态构建抽象语法树,并以此来解析java中 间代码,将获得的接口信息存入接口函数数据模型中,用其填充显示界面中的接口提示信 息。根据用户选择暴露的接口信息,包装一个接口的java文件和一个实现接口的java文 件,实现的java文件中加载包装后的DLL ;步骤(6)据用户的选择配置产生符合各自服务运行环境(Axis2、MULE、SCA)规定 的部署描述文件;步骤(7)编译所有java文件,打包成jar包;将步骤(4)产出的dll文件和产生 的jar包文件复制到服务展示目录和相应的工作目录,并将其和已生成的服务实现类文件 部署在服务运行环境中,发布为相应的Web服务。本发明所采用的技术包括构件元信息提取技术、多语言代码转调技术、Web服务 接口自动生成技术和多Web服务实现适配技术。
(A)构件元信息提取技术构件元信息提取是根据输入的构件获取能为配置文件生成以及代码转调提供所 需支持的元数据信息的过程。 (a)本发明定义了一个统一的Web服务接口模型,用来规范化封装后Web服务的自 描述文件(WSDL),以及获取的服务元数据信息。它由服务属性描述信息模型和服务接口描 述信息模型组成。服务的元信息是指描述服务自身信息的数据,现做如下定义A 9 {P ,T }表示服务元数据信息其中
P 9 {Pi \ Pi χ B,i X N}B 9 {servbase ,itfacebase ,servbuss }表示服务属性描述信息集合
servbase 9 {η | η XR,i X N}R 9 {name , func , address , key, type }表示月艮务基本信息集合name表示服务的中英文名称,func表示服务功能描述,address表示服务地址, key表示服务关键字,type表示服务类型信息。itfacebase 9 {protol, access, name, desc }表示月艮务接 口 的基本信息其中protol表示服务接口传输协议,access表示访问协议,name表示接口中英文 名称,desc表示接口的基本描述信息。 servbuss 9 {provider , category }表示月艮务业务信息其中provider表示服务提供者,category表示服务分类信息,其中按软件类型分 为公共服务、专用服务。T V UiI t, X S,i X 表示服务接口描述信息集合服务接口描述信息即遗产程序的对外访问接口的完整描述信息。该信息实质上将 遗产程序的接口概念从原始的遗产程序中抽离,从而为后续的代码转调提供信息支持。其中 S1elem P {Ζ,//,^C}表示接口元素的描述数据
其中L表示C++中类的概念,
H表示类中的方法名,
γ表示类中的变量
c表示方法中的入参和或出 参,
表示接口元素之间的关系 这些信息都会在服务描述语言(WSDL)中定义,是对服务本身的描述说明,是区别 于其他Web服务的标识,同时也为后面配置文件的生成提供信息支持。在获取服务元数据时,服务属性描述信息可以通过用户输入的方式得到,而接口 的描述信息如果采用传统的通过用户输入的方法不仅使得移植过程的自动化程度大大降 低,并且对系统用户的专业性要求过高,使得程序的易用性降低。基于这些问题,本发明提 出了通过解析描述动态链接库输出接口的头文件来获取所需元数据的方法。该方法的流程 如图3所示,首先头文件解析器分析头文件后输出自定义格式的XML中间文件,然后由特定 的XML解析器抽取接口描述元信息。(b)本发明充分借鉴了 Java及.Net的反射机制建立了一套简单实用而且能够充 分表达服务接口描述信息的数据模型。实现了在获取服务接口描述信息后合理地存储这些 信息以便后续阶段能够方便的访问这些信息。图4为服务接口描述信息模型图。此模型对服务接口定义所需的各种信息进行了 抽象,又借鉴了面向对象的设计思想,形成了一套相对完整的对象体系。整个模型以可访问 对象类为基类,派生出接口定义的其它组成部分,这样既重用了公共信息又减少了对象的数量。服务接口描述信息模型主要从三个方面对关于接口描述信息进行建模。一是对接 口元素描述数据的建模,二是对接口元素之间关系的建模,三是对接口描述信息访问接口 的支持。可访问对象类,是整个接口描述信息模型的基类,它抽象和包含了在接口描述体 系中各个元素的基本元数据,例如元素的名称、所有者等,它也是接口描述信息数据结构的 数据基础,元素之间的关系则通过建立一组和面向对象编译语言相对应的类型来确定;类 是对类型的抽象,它与C++中类的概念非常接近,它定义了类的基础要素数据成员、成员 方法、构造/析构方法;函数类表达接口描述信息中函数的概念,是构件对外所提供的方 法,它由返回值、参数列表等要素组成;变量类则表述了服务接口的数据成员,描述了各种 类型的变量,是成员变量,全局变量的元类;参数类是参数的抽象,是变量类的一种特例,注 解类是对预编译头,注释等与代码有关信息的抽象,负责存储这类信息。在上述的每个类中 还提供了各种不同的操作,它们不仅为元数据获取阶段提供构建接口元数据的操作,也提 供了后续阶段访问元数据的方法。(B)多语言代码转调技术多语言代码转调是指能够实现用不同语言编写的代码之间的互相调用,是将不同的构件编程语言形成Java服务构件的重要手段。这里利用SWIG这种Java调用C/C++语 言的工具,实现Java对遗产系统的转调。主要步骤包括(a)依据原始动态库生成服务构件的中间文件。首先构造多语言代码转调工具需 要的头文件,通过服务接口描述信息构造.i文件,即SWIG接口文件,接着利用SWIG工具的 命令产生出Java中间代码作为原始动态库的代理,和对原动态库封装的临时文件 。(b)自动生成编译服务构件需要的Make文件。本发明提出了一种自动化生成Make 文件的方法,图5说明了 Make文件生成器原理。自动生成Make文件的最大障碍来源于编译参数的复杂性。本发明首先为其建立 了如图6概念模型。该模型从逻辑的角度对Make文件参数进行了分类,定义如下
CP 9 {cto, file,irule, brule, compile }其中,cto是编译器所需的程序编译和链接参数,file则给出了待编译源代码文 件的列表,这一部分的划分使得源码文件与编译器和平台相关的那些复杂的参数分离,从 而更易于实现模块化。irule是编译所需的固有规则,brule是编译链接规则包括指定目标代码的生成 目录,删除中间文件等。compile则指定了中间文件生成所需的各种依赖文件。但仅仅拥有Make文件的逻 辑结构还远远不够,大量的编译参数以及这些参数与平台的相关性使得这部分程序设计非 常困难,所以必须设计一个非常灵活的Make文件生成器模型,才能应对动态需求的变化。 Python是一种动态的解释性脚本语言,选择python实现Make文件生成器模型,正是充分利 用python的这些特点,基于以上的思想设计出如图7所示的Make文件生成器模型。本发明利用数据驱动的原理为各种经常变动的参数按照这些参数之间的关系设 计相应的模板文件,通过修改参数模板来改变参数。变化的编译参数分为以下两类依赖 于具体源码工程的各工程参数以及与编译平台紧密相关的平台参数。在所图7所示的模型 中,工程配置对象和可选项模板对象就分别代表存放这两类参数的模板文件。而生成器则 是这两类模板文件的处理器,它将这两种类型的文件作为输入,内置对象用于保存最终生 成的Make文件参数。而编译器配置派生自生成器并具备了处理特定编译平台参数的能力。在生成源代码后,根据当前源代码生成与之相关的模板文件供后面生成Make文 件使用。与编译平台、系统平台相关的信息存放于如图8所示结构的XML文件之中。它以 编译器类型为基础元素分类保存配置参数,而编译器的配置参数又分为两类通用参数类 型的特定编译器值、工程类型配置参数模板。其中工程类型配置参数模板={动态库,控制 台,应用程序};控制台模板包含了为建立一个控制台程序所需要的Make文件涵盖的参数 信息;应用程序模板包含了为建立一个应用程序所需要的Make文件涵盖的参数信息;动态 库模板包含了为建立动态链接库所需要的Make文件涵盖的参数信息;动态库模板={C编 译器选项,C++编译器选项,Lex文法分析器参数…}。整个make文件自动化生成序列图如图9所示。使用者首先按照规定的格式生成 工程信息文件保存到特定路径,然后通知生成器;接着生成器解析工程信息并按照解析结 果从平台相关参数模板中读入所需数据;最后生成使用者所需的Make文件。
(c)Make工具根据Make文件其所定义的规则,调用编译器编译相应的源代码,得 到目标文件,最后由链接器将目标链接成新DLL。这一过程是针对Java转调实现而言,在一 般的构建过程中产生何种形式的对象可由Make文件中的规则指定。图10是使用Make工具构建java服务构件的过程,其中的Make工具、编译器,链 接器都是由某种特定的编译器所提供,主流的编译器都包含这些工具。 (C) Web服务接口自动生成技术自动生成Web服务接口是指为了体现选择服务接口功能,需要解析出Java接口供 用户选择裁剪,并最终确定为服务的接口。本发明提出了基于接口提示信息的Web服务接口自动生成技术,首先通过用户提 示的方法,根据用户选择暴露的接口信息,包装一个接口的java文件和一个实现接口的 Java文件,实现中加载包装后的DLL,最终编译所有java文件,产生服务类文件。在生成接 口提示信息的过程中,根据已产生的java中间代码,生成接口函数数据模型。动态构建抽 象语法树,并以此来解析java中间代码,将获得的接口信息存入接口函数数据模型中,最 终用其填充显示界面中的接口提示信息。动态构建抽象语法树的算法实施步骤如下 第一步根据java中间代码的特点,定义关键字表{dataType,Token, exp},其中, dataType 表示 java 的基本数据类型(int.double,float 等),Token 表示”class”,”{”,,,},,第二步根据关键字表递归下降地匹配输入的java中间代码,假设有一个在输入 中保存当前下一个记号的token变量,如果匹配成功则前移,并将匹配结果挂入语法树的 相关节点上。匹配的原则是将一个非终结符A的规则看作将识别A的一个过程的定义。文 法规则包括
factor ! Token exp | 办;factor2 Type exp (B);
B Type exp, B 丨办;重复第二步,直到输入结束。至此,动态构建抽象语法树的的过程结束。(D)多Web服务实现适配技术多Web服务实现适配是指能够根据需要,将已生成的服务接口和服务实现类文件 发布为不同类型的狗13服务(如4^82,304,1^1^),这里通过生成的配置文件来灵活地定制 Web服务,配置文件将定义服务名称、服务的实现类、服务发布的方式,利用已有的遗产程序 转调代码作为服务实现,完成功能上迁移,再配置相应的部署描述文件,部署在各自的服务 运行环境中,从而发布为相应的Web服务。生成配置文件时需要根据不同服务运行平台的部署描述文件规范,为用户提供向 导信息,根据用户选择配置产生符合各自平台规定的部署描述文件。熟知本领域的人士将理解,虽然这里为了便于解释已描述了具体实施例,但是可 在不背离本发明精神和范围的情况下作出各种改变。因此,除了所附权利要求之外,不能用 于限制本发明。
权利要求
一种软件构件服务化封装方法,其特征在于首先将原动态库中的元信息提取出来;再以此为基础,利用java调用C或C++语言技术,以转调的java代码作为Web服务的具体实现部分,实现java对遗产系统的转调;最后将服务类文件部署到特定的Web服务运行环境中,根据用户的选择配置产生符合各自平台规定的部署描述文件,并将其和已生成的服务实现类文件部署在各自的运行环境中,发布为相应的Web服务。
2.根据权利要求1所述的软件构件服务化封装方法,其特征在于该方法具体包括如下 步骤(1)根据用户从界面设置的服务描述信息,以及原始动态库的头文件,采集出服务的元 数据信息,并存储在统一的Web服务接口模型中,为配置文件生成以及代码转调提供了所 需的信息支持;(2)以步骤(1)采集到的元数据信息为基础,利用Java调用C或C++语言工具SWIG生 成java转调代码和CXX临时文件;(3)利用自动生成的make文件,调用make命令将cxx临时文件、lib文件和原始头文 件产生包装的dll文件;(4)动态构建抽象语法树,并以此来解析java中间代码,将获得的接口信息存入接口 函数数据模型中,用其填充显示界面中的接口提示信息;根据用户选择暴露的接口信息,包 装一个接口的java文件和一个实现接口的java文件,实现的java文件中加载包装后的 DLL ;(5)根据用户的选择配置产生符合各自服务运行环境规定的部署描述文件;(6)并将步骤(5)产生的部署描述文件和已生成的服务实现类文件部署在服务运行环 境中,发布为相应的Web服务。
3.根据权利要求2所述的软件构件服务化封装方法,其特征在于所述Web服务接口 是通过用户提示的方法,支持根据用户选择暴露的原动态库中的接口自动生成。
4.根据权利要求2所述的软件构件服务化封装方法,其特征在于所述自动生成make 文件为首先建立make文件结构模型,从逻辑的角度对make文件参数进行了分类,在此 基础上构建参数模板,包括依赖于具体源码工程的工程参数模板以及与编译平台紧密相 关的平台参数模板;生成方法为首先按照规定的格式生成工程参数模板并保存到特定路 径,接着解析该模板并按照解析结果从平台相关参数模板中读入所需数据,最后生成所需 的make文件。
全文摘要
本发明公开一种软件构件服务化封装方法,首先将原动态库中的元信息提取出来;再以此为基础,利用现有的java调用C或C++语言技术和工具,以转调的java代码作为Web服务的具体实现部分,实现java对遗产系统的转调;最后将服务类文件部署到特定的Web服务运行环境中,根据用户的选择配置产生符合各自平台规定的部署描述文件,并将其和已生成的服务实现类文件部署在各自的运行环境中,发布为相应的Web服务。本发明规范了服务接口模型,使得构件封装为服务后,对外提供的接口形式在任何服务运行平台中都保持一致,提高了封装后服务的互操作性,实现了以构件为基础的遗留系统与未来采用SOA技术体制的新系统的交互能力。
文档编号G06F9/44GK101840334SQ20101015039
公开日2010年9月22日 申请日期2010年4月16日 优先权日2010年4月16日
发明者丁峰, 周晓明, 汪敏, 郭成昊 申请人:中国电子科技集团公司第二十八研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1