专利名称:基于可变性的适应性服务组装方法
技术领域:
本发明涉及一种软件系统的开发方法,尤其是一种基于Web服务的适应性服务组 装方法,属于软件技术领域。
背景技术:
近年来,Web服务组装逐渐成为Internet环境下的应用程序的主流开发范式。Web 服务是一个平台独立、松耦合、自包含、可编程、并依赖于Web技术的应用程序。Web服务的 描述、访问、检索与发布基于标准XML技术以及一系列的Web技术标准。这些技术及标准有 效地屏蔽了运行环境的异构性,使得Web服务可以直接部署和运行于Internet之上。由 于单个Web服务往往无法满足实际需求,因此需要将多个Web服务协调与组织起来构造新 的Web服务(复合服务),支持某个业务过程。通常,将多个Web服务组装起来的复合服 务称为基于Web服务的系统。目前,面向过程的服务组装相对成熟,如Business Process ExecutionLanguage (BPEL)是一个支持面向过程、可执行的Web服务组装语言,在学术界和 工业界受到广泛重视,并有相应的工具支持.基于Web服务的系统,可以支持快速的业务重整与优化、较好地解决了应用程序 的集成以及数据集成等难题。另一方面,与传统的应用程序相比,基于服务的系统的构造存 在很大的区别。主要表现为(I)Web服务及基于Web服务的系统往往部署和运行于一个动态、开放的环境中。(2)基于Web服务的系统面向差别极大的用户群。因此,服务组装过程应能支持快 速的变化,并提供有区分的服务。(3)基于Web服务的系统实现的业务过程本身往往是动态变化的。由于基于Web服务组装的应用程序上述新特点,已有方法或工具尚不能有效地解 决基于Web服务的适应性系统的构造问题。如何支持灵活的服务组装、增强基于Web服务 的系统的适应性是一个非常重要的问题。围绕着适应性服务组装的相关研究工作近年来非 常活跃。特别地,基于服务组装语言BPEL的适应性服务组装方法方面,已有工作主要探讨 了如何基于Aspect技术或采用代理机制解决Web服务组装的适应性问题。但是,提出的适 应性服务组装方法,都是基于运行时的服务组装实例、仅从服务组装的实现层上考虑适应 性问题,忽略了如何从服务组装的规格说明层考虑适应性问题。因此,这些方法存在不易维 护、技术实现复杂、影响了服务组装性能等缺点。可变性是指一个软件系统具有可以被扩展、变更、定制及配置到特定上下文中的 能力。可变性管理包括设计、使用和维护可变性,缘起于软件产品线技术,主要解决用于软 件产品线中的复用问题。
发明内容
本发明要解决的技术问题主要在于,针对现有适应性服务组装方法中存在的不易 维护、技术实现复杂、影响了服务组装性能等问题,提出一种基于可变性的适应性服务组装方法,在服务组装的设计阶段引入可变性建模、在部署和运行阶段支持可变性配置与解释 执行。通过增强基于Web服务的系统在设计、部署和运行时的可变性,显式地表达和管理服 务组装中不稳定或可变的因素,即将可变因素作为第一类设计对象并实施可变性管理。本发明通过如下的技术方案实现的 一种基于可变性的适应性服务组装方法,包括如下步骤步骤一、建立面向服务组装的可变性管理框架;步骤二、开发可变性构造子,支持不同类型可变性的定义与表达;步骤三、设计阶段在服务组装规格说明中引入可变性定义;步骤四、在运行时刻支持包含可变性定义的服务组装规格说明的解释执行。步骤一中建立面向服务组装的可变性管理框架的具体步骤为定义面向服务组装 的可变性管理框架的元模型(Meta-Model),及变异点视图(View)。所述的元模型用来刻画可变性管理中的基本概念及其联系,包括变异点 (Variation Point),变体(Variant),变异点与变体之间的实现、不同抽象层上变异点之间 的依赖及其关联关系。所述的变异点视图刻画不同抽象层上变异点之间的实现关系。抽象层包括系统需求层、体系结构层和实现层;不同层的实现语言是不同的,但元 模型相同。步骤二中的可变性构造子的开发依据可变性管理框架的元模型,采用XML语法格 式表示可变性元素。所述的可变性元素包括变异点、变异点集合、变体、变体集合、变体和变异点构成 的配置信息、配置选择项以及配置选择项集合。可变性元素的之间的包含关系通过XML语 法的层次性结构来实现、依赖关系或约束关系通过XML属性来定义。所述的可变性类型包括相同参数的服务替换与不同参数的服务替换、服务调用的 参数变更和系统的组装方式的变更。步骤三中的服务组装规格说明采用BPEL语言,采用手工书写或采用支持BPEL的 设计工具辅助生成。所述步骤三中引入可变性定义的方式主要包括内联方式(Inline)和独立方式 (Separate)两种;可变性构造子中各个元素的类型在单独的名字空间中定义,使用这些构 造子必须引用相应的名字空间。内联方式是指将可变性定义直接加入到流程定义(即服务组装规格说明)中; BPEL元素被带有不同命名空间的元素封装。独立方式是指将可变性定义与流程定义相结合;通过将可变性定义以一个独立的 部分加入到流程定义中,或者存放在一个独立的文件中;为了区分流程定义和可变性元素, 可变性元素需要增加前缀,但流程定义无须改变。步骤四中在运行时刻支持包含可变性定义的服务组装规格说的解释执行的实现 方法是扩展已有BPEL引擎,具体包括采用BPEL引擎解释流程定义,即标准的服务组装规 格说明;采用可变性构造子解释器解释可变性定义,即扩展的服务组装规格说明部分。本发明的方法通过扩展服务组装语言,提供灵活的可变性构造子,从服务组装的 规格说明层上考虑可变性的设计与实现。一个复杂的业务系统的服务组装包括业务流程的定义和可变性定义两部分。由于包含可变性的服务组装规格说明中考虑了业务过程中可变元素,运行时刻只需依据可变性配置值决定变异点的执行。因此,采用本发明开发的服务组 装具有很强的适应性。另一方面,由于可变性构造子与BPEL提供的标准组装构造子的风格 相似,体现了明确的可变性语意,内嵌在服务组装规格说明中,采用本发明开发的适应性服 务组装具有易于理解、易于维护和易于扩充等优点。这对于目前基于Web服务的大型软件 系统的开发和维护具有十分重要的意义。
图1、基于可变性的适应服务组装方法原理2、可变性管理框架的元模型图3、包含可变性定义的服务组装规格说明的运行平台原理图
具体实施例方式以下结合附图和具体实施例对本发明进行详细说明。一种基于可变性的适应性服务组装方法,如图1、包括如下步骤步骤一、建立面向服务组装的可变性管理框架;步骤二、开发可变性构造子,支持不同类型可变性的定义与表达;步骤三、设计阶段在服务组装规格说明中引入可变性定义;步骤四、在运行时刻支持包含可变性定义的服务组装规格说明的解释执行。具体说明如下基于Web服务组装实现一些大型复杂的业务过程时,这些系统往往涉及到大量的 服务。为了支持灵活的业务过程,实现这类系统的服务组装必须具备足够的灵活性和适应 性。典型的适应性服务组装的实现技术仅从服务组装的实现层上考虑适应性问题,并且是 基于服务组装实例。例如,借助Aspect技术实现服务组装的适应性问题,即采用服务组装 实现业务逻辑,即主要关注,将相互交错的其它关注说明为Aspect,在编译和运行时刻,将 这些分离的组装规格说明编织起来。由于服务组装规格说明的分散和杂乱,导致维护和调 试非常困难。再如,借助代理机制实现服务组装的适应性问题,即需要对已有的BPEL过程 进行变换,并增加一个通用代理(也称虚拟服务或抽象服务案例)。通用代理的作用是,当 一个服务失败时,采用一个预先定义的或新发现的服务来替换。由于每个服务都需要开发 相应的代理,该方法产生了多个版本的服务组装规格说明,不仅维护困难,还影响了服务组 装的性能。为此,本发明从规格说明层考虑服务组装的适应性问题,将服务组装中的可变因 素视为第一类设计对象,即基于可变性的适应性服务组装方法。该方法通过扩展服务组装 语言,提供灵活的可变性构造子,在服务组装的设计阶段引入可变性定义,在运行阶段支持 可变性配置与解释执行。为了在服务组装中引入可变性定义,首先应开发面向服务组装的可变性管理框 架。为此,本发明定义了一种可变性管理框架的元模型。该元模型不仅是可变性构造子的 依据,也是各种可变性相关的支持工具依据,包括可变性分析、设计与解释工具。以下结合 图2,对元模型进行说明。变异点代表提供选择的位置。变异点有很多特征,如变化类型、抽象层次、绑定时间和基本原理。
变异体代表变异点中可行的选项。实现由于变异点可存在于不同的抽象层次中,实现关系指明了如何通过低层抽 象中选择变体,以实现高层抽象中变异点的选择的规则。依赖代表了一种系统属性,并且说明变异点的绑定如何影响这个属性值,即选择 特定的变异体如何影响该属性的值。依赖包含关联和参考数据,细化为依赖交互。依赖交互描述依赖关系的一个条目。关联指影响系统属性值的变异点。对于与某个依赖相关的每个变异点,关联关系 是依赖关系的一部分,因此,关联定义了与变异点的某种联系。参考数据定义了诸如变异点绑定和相应的系统属性值等实体的信息。这些系统 属性的值是通过测试获得的。由于服务组装中只有部分设计元素是可变的。为了便于理解与刻画业务流程(即 业务逻辑)中不稳定部分,因此需要一种机制来关注其中可变成份。本发明采用了变异点 视图,是对服务组装中可变成份的一种抽象。依据上述可变性管理框架的元模型,可以进一步开发可变性定义的构造子。考虑 到现有服务组装语言BPEL采用了 XML表示法,本发明中可变性构造子也采用XML表示。这 样的设计方案进一步强化了基于Web服务的系统在应用程序集成和数据集成方面的特出 优点。变体是可变性管理中的核心概念之一,如下列描述所示<VXSpaceVariant name = $variant_name><VXSpace:VPBpelCode>< !—可选的BPEL活动一></VXSpace:VPBpelCode></VXspace:Variant)其中,变体由<VXSpace:Variant)标识,“VXSpace” 是定义了 Variant 类型 定义的名字空间。变体通过名字name进行引用和标识。变体相关的BPEL代码由 <VXSpace: VPBpelCode)标识。变异点由名字(Name)和一组变体(Variants)组成,是可变性管理另一核心概念。 如下列描述所示<VXSpaceVariationPoint name = $VariationPoint_name>CVXSpaceVariants〉< !—定义各个变体一></VXSpace:Variants)</VXSpaceVariationPoint>其中,变异点由<VXSpace:VariationPoint> 标识,“VXSpace” 是定义了 VariationPoint类型定义的名字空间。变异点通过名字name进行引用和标识。实现该变 异点的变体集合由〈VXSpace: Variants〉标识,包含的变体由〈VXSpace: Variant〉进一步定 义。复杂的BPEL流程中可能包含多个变异点,而且这些变异点之间存在依赖关系。本发明采用可配置变异点(即变异点视图)来描述这些可变性元素之间的依赖关系。可配 置变异点由名字(Name)、唯一标识号(id)、初始化缺省变体(defaultVariant)、基本原理 (Rationale)、一组变体(Variants)组成。可配置变异点的描述如下<VXSpaceConfigurableVariationPoint id = $ID defaultVariant = $default_variant_name><VXSpace: Name)......</VXSpace: Name)
<VXSpace:Rationale)...... </VXSpace:Rationale)CVXSpace:Variants〉<VXSpace:Variant name = $variant_name><VXSpace:Variantlnfo)......</VXSpace:Variantlnfo)<VXSpace:RequiredConfiguration><VXSpace:VPChoices><VXSpace:VPChoice vpname = $vpname variant = $variant_name/></VXSpace:VPChoiees></VXSpace:RequiredConfiguration></VXSpace:Variant)......< !—定义其它变体一></VXSpace:Variants)</VXSpace:Conf i gurab1eVar iationPoint>其中,可配置变异点由<VXSpace:ConfigurableVariationPoint> 标识, ID属性唯一标识可配置变异点,通过defaultVariant属性可指定缺省的实现变体。 〈VXSpace:Rationale〉和〈VXSpace:Variantlnfo〉分别说明了可配置变异体和变体的相 关信息。每个变体所需要的配置信息由〈VXSpace:RequiredConfiguration〉标识。配置 信息细化为一组变体的选择,由</VXSpace:VPChoices>标识。对每个变体选择的说明由 <VXSpace:VPChoice)标识,vpname属性指明了该选择的名字,variant属性通过名字引用 已定义的变体。本发明通过〈VXSpace:RequiredConfiguration〉和 <VXSpace:VPChoices> 的联合使用,实现复杂的可变性配置中的实现和依赖关系。基于上述可变性构造子,对标准的业务流程的规格说明实施可变性设计。本发明 提出了采用内联或单独方式,在已有的服务组装规格说明中引入可变性定义。两种方式的 主要区别在于内联方式指将可变性定义与流程定义混合在一起,而独立方式中可变性定 义与流程定义是分离的。无论是内联还是独立方式中,通过指明可变性构造子所属的名字 空间,来区分可变性定义元素和标准的流程定义元素。通过上述步骤,完成了面向标准业务流程的服务组装的可变性设计,将可变性定 义追加到服务组装规格说明中。接下来,结合图3说明运行时刻如何解释执行包含可变性 定义的服务组装规格说明。为了执行这样服务组装规格说明,需要对标准服务组装引擎(标准BPEL引擎)进 行扩充,使其能够支持对可变性构造子的解释。具体说来,当服务组装引擎阅读流程定义 时,必须能够识别和储存可变性定义元素;在执行过程中,需为这些可变性定义元素定义行为动作。标准BPEL引擎读入一个流程定义时,在存储器中创建一个类似解析树的数据结 构。这个数据结构实际上就是一个蓝图。当一个流程被调用,这个数据结构就被查询,根据 这个数据结构再创建一个新的执行数据结构,然后这个执行数据结构会被执行。对流程的 并行调用,会产生多个执行数据结构。流程内(低层)变异点在流程数据结构内被储存为新元素,分发给可变性构造子 解释器完成。在执行点前,这些变异点被标准BPEL引擎按相同的方式处理。在执行点需要 决定哪个变体的代码要被执行。当前流程的设置决定了对变体的选择。当前配置由可配置 变异点(高层)的状态决定。这些可配置变异点和当前配置被保存在新的数据结构中。这 个配置会被每个低层变异点访问,来决定使用哪个变体。为了使执行变得有意义,就需要允许对这个配置进行改变,进而对流程本身进行 重新配置。为了让这种情况在运行时发生,可以通过外部工具显示关联了可配置变异点和 当前配置的数据结构。通过这些显示功能性的方法,来改变那些与配置信息相关的对象的 状态,从而就有可能重新配置流程。以下结合图1,以支持可变性定义的VxBPEL(—种扩展的BPEL语言)实现为例,对 本发明的技术方案进行详细说明。VxBPEL是对标准服务组装语言BPEL的扩展,支持基于Web服务系统中的可变性 表达。VxBPEL基于实用于软件产品线的可变性管理框架C0VAM0F(ConIPF Variability ModelingFramework),采用XML的表示形式。VxBPEL提供了一组可变性构造子,支持四种类 型的可变性定义,可变性定义以内联方式方式引入服务组装规格说明中。为了在运行时刻 支持可变性的解释执行,对ActiveBPEL引擎(一种BPEL引擎的实现版本)进行了扩展,使 用JMX(JavaManagement extensions)管理系统外部的可变性。首先,采用Web服务实现一些典型的业务逻辑,采用标准BPEL语言定义服务组装 的规格说明。以基于Web服务的机票订购系统为例,BPEL描述的服务组装规格说明片段如 下列描述所示〈process targetNamespace = http //Iocalhost 8080/active-bpel/services/ orderFlight>......
TravelAgent/r name =〃 customer" TravelAgentLinkType “ /XpartnerLink name
“ TravelAgentLinkType “ partnerRo1e
<partnerLinks>
〈partnerLink myRoIe = partneLinkType = 〃 =〃 TravelAgent 〃partneLinkType = =〃 TravelAgent 〃 />〈partnerLink name = “ Airlines “ partnerLinkType =“AirlinesLinkType“ partnerRoIe = “ Flight" />......</partnerLinks>〈variables〉
8
〈variable messageType = “ StringMessageType “ name =〃 FlightRequest" />〈variable messageType = “ StringMessageType “ name =〃 FlightResponse" />......</variables><sequence>〈receive createlnstance = " yes" name=" ReceiveOrder〃 operation =〃 BookFlight 〃partnerLink =" customer" portType =" FlightBooking" variable ="FlightRequest" >〈source IirkName = " Cutomer-to-TraveIAgent〃 /></receive>......< i η vo ke inputVariable = " FlightRequest " name ="processingRequest" operation =" processRequest"outputVariable = " requestResponse " partnerLink ="Airlines" portType =" Airlines:
FlightProcessing" >
〈target IinkName = "Air1ines-to-Agent" />
〈source IinkName = "Agent-to_Airlines/> </invoke)......<reply name=" ReplyOrder" operation = " BookFlight" partnerLink ="customer" portType=〃 FlightBooking" variable =" FlightResponse" >〈target IinkName = " response-to-customer" /></reply></sequence></process>然后,对标准的业务过程的服务组装规格说明实施可变性设计。从业务角度,考虑 业务过程那些不稳定的部分及其各种可能替代业务策略;从技术角度,在BPEL定义的服务 组装规格说明中在引入各种可变性构造子。在上述机票定购系统中,通常有多家航空公司 (如中国国际航空CA和德国汉莎航空LH)可以提供所需的航班服务。这意味着在航班选择 方面存在不稳定因素。相应地,在服务组装规格说明中,需要在航班服务调用(即上述BPEL 片段中的〈invoke〉活动)的地方引入的变异点,如下所示<vxbpelVariationPoint name = "selecting an airline service"><vxbpel: Variants)
<vxbpel: Variant name = "CA" ><vxbpel:VPBpelCode>< invoke inputVariable = " FlightRequest " name ="processingRequest"operation = " processRequest " outputVariable ="requestResponse"par tnerLink = " AirlinesCA " portType ="AirlinesCA:FlightProcessing" ><target IinkName = " Airlines-to-Agent" />〈source IinkName = " Agent-to-Airlines/〉</invoke></vxbpel:VPBpelCode></vxbpe:Variant)<vxbpel:Variant name = "LH"><vxbpel:VPBpelCode><invoke inputVariable = " FlightRequest " name ="processingRequest"operation = " processRequest " outputVariable ="requestResponse"partnerLink = " AirlinesLH " portType ="AirlinesLH:FlightProeessing" ><target IinkName = " Airlines-to-Agent" />〈source IinkName = " Agent-to-Airlines/〉</invoke></vxbpel:VPBpelCode></vxbpel:Variant)</vxbpel:Variants)</vxbpel:VariationPoint>其中,定义可变性构造子的名字空间为vxbpel,该变异点的名字为‘‘selecting an airlineservice",该异点可有两个变体实现,变体的名字分别为“CA”和“LH”。为了在 标准的服务组装规格说明中有效引入上述可变性设计,需要在〈/partnerLinks〉部分增加 “AirlinesCA”和“AirlinesLH”的声明。作为示意,本例中仅考虑了两个变体,可根据实际 情况依据上述过程添加相应的变体。通过上述两步完成了包含可变性定义的服务组装规格说明。接下来,采用VxBPEL引擎解释执行具有上述包含可变性设计的服务组装规格说 明。依据上述服务组装实现的机票定购系统在运行时刻根据配置状态决定调用不同的航班 服务,即调用CA或LH变体实现的业务实现。本发明将可变性设计引入服务组装,提供了一个包括可变性管理框架、可变性设 计语言、可变性解释与执行的引擎在内的系统化且实用的解决方案。通过本发明实现的基于服务的系统,由业务流程的定义和可变性定义两部分组成。由于在服务组装构造时已经 考虑了各种可变性设计,运行时刻只需依据可变性配置值决定变异点的执行。因此,采用本 发明开发的服务组装具有很强的适应性。另一方面,由于可变性构造子与BPEL提供的标准 组装构造子的风格相似,体现了明确的可变性语意,内嵌在服务组装规格说明中,采用本发 明开发的适应性服务组装具有易于理解、易于维护和易于扩充等优点。这对于目前基于Web 服务的大型软件系统的开发和维护具有十分重要的意义。 最后应该说明的是,以上实施例仅用以说明本发明技术的方法而非限制,尽管参 照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明 的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖 在本发明的权利要求范围当中。
权利要求
基于可变性的适应性服务组装方法,其特征在于,包括如下步骤步骤一、建立面向服务组装的可变性管理框架;步骤二、开发可变性构造子,支持不同类型可变性的定义与表达;步骤三、设计阶段在服务组装规格说明中引入可变性定义;步骤四、在运行时刻支持包含可变性定义的服务组装规格说明的解释执行。
2.根据权利要求1所述基于可变性的适应性服务组装方法,其特征在于所述的步骤 一中建立面向服务组装的可变性管理框架的具体步骤为,定义面向服务组装的可变性管理 框架的元模型及变异点视图。
3.根据权利要求2所述基于可变性的适应性服务组装方法,其特征在于所述的可变 性管理框架的元模型刻画可变性管理中的基本概念及其联系,包括变异点,变体,变异点与 变体之间的实现、不同抽象层上变异点之间的依赖及其关联关系。
4.根据权利要求2所述基于可变性的适应性服务组装方法,其特征在于所述的变异 点视图刻画不同抽象层上变异点之间的实现关系。
5.根据权利要求3或4所述基于可变性的适应性服务组装方法,其特征在于所述的 抽象层包括系统需求层、体系结构层和实现层;不同层次的实现语言是不同的,但元模型和 变异点视图相同。
6.根据权利要求1所述基于可变性的适应性服务组装方法,其特征在于所述步骤二 中的开发可变性构造子的具体步骤为依据可变性管理框架的元模型,采用XML语法格式 表示可变性元素。
7.根据权利要求6所述基于可变性的适应性服务组装方法,其特征在于所述可变性 元素包括变异点、变异点集合、变体、变体集合、变体和变异点构成的配置信息、配置选择项 以及配置选择项集合;可变性元素的之间的实现关系通过XML语法的层次性结构来实现、 依赖关系或约束关系通过XML属性来定义。
8.根据权利要求1所述基于可变性的适应性服务组装方法,其特征在于所述的可变 性类型包括相同参数的服务替换与不同参数的服务替换、服务调用的参数变更和系统的组 装方式的变更。
9.根据权利要求1所述基于可变性的适应性服务组装方法,其特征在于所述步骤三 中在服务组装规格说明中引入可变性定义的具体步骤为采用BPEL语言表达服务组装规 格说明,采用手工书写或采用支持BPEL的设计工具辅助生成;引入可变性定义的方式主要 包括内联方式和独立方式两种;可变性构造子中各个元素的类型在单独的名字空间中定 义,使用这些构造子必须引用相应的名字空间。
10.根据权利要求1所述基于可变性的适应性服务组装方法,其特征在于所述步骤四 在运行时刻支持包含可变性定义的服务组装规格说明的解释执行,其实现方法为扩展已有 BPEL引擎,具体包括采用BPEL引擎解释标准的服务组装规格说明;采用可变性构造子解 释器解释扩展的服务组装规格说明部分。
全文摘要
一种基于可变性的适应性服务组装方法,包括建立面向服务组装的可变性管理框架;开发可变性构造子,支持不同类型可变性的定义与表达;设计阶段在服务组装规格说明中引入可变性定义;在运行时刻支持包含可变性定义的服务组装规格说明的解释执行。本发明将服务组装中的可变性因素视为第一类设计对象,有助于提高服务组装的适应性,对Internet环境下基于服务组装实现的业务过程的开发与维护具有十分重要的意义。另外,本发明弥补现有的服务组装语言Business Process Execution Language(BPEL)及支持平台在支持灵活的服务组装方面的不足。
文档编号G06F9/44GK101968737SQ20101028386
公开日2011年2月9日 申请日期2010年9月15日 优先权日2010年9月15日
发明者孙昌爱 申请人:北京科技大学