论文部分内容阅读
摘要:集成并协调供应链中各成员的Web服务可以使虚拟企业获得很高的效率,本文重点讨论跨企业供应链管理系统的建模问题。在分析跨企业过程的服务集成面临的相关问题的基础上,引入了面向对象的设计理念,详细阐述了过程模型的服务接口、服务活动、占位符和服务包装器四类服务模型原语。
关键词:供应链管理系统;Web服务;过程模型
中图分类号:F270 文献标识码:A
为了保持企业竞争力,现代企业必须在为顾客提供服务和产品方面进行协作,这些服务或产品取决于多种业务资源和多个组织资源。无论该协作是正式的长期联营或者仅仅持续到某项客户服务终止,协作期间参与企业都会形成高效运转的虚拟企业。建立能利用并管理供应链中各成员企业提供的Web服务的供应链,企业可以获得很高的效率。
本文提出一种通过集成并协调Web服务的跨企业过程,来建立并管理跨企业供应链的技术。为实现此目标,提出了基于Web服务的过程模型(Process Model)的概念:a. 将供应链捕获为选取、集成并使用Web服务的多个跨企业过程;b. 捕获Web服务,即对虚拟企业中的各联盟企业提供的服务间的函数关系、契约关系和会话关系进行建模;c. 通过Web服务组合和自动Web服务协调规范为供应链管理系统程序设计提供执行语义和协调原语。
一、 跨企业过程的服务集成所面临的问题
服务的使用包括服务请求者(服务客户)与服务提供者间的会话。这种会话包括服务请求操作的执行、服务运行期间的各种控制和信息交换操作以及服务结果的最终交付。对会话进行捕获和协调就需要建模和执行原语,这远远超出了传统工作流模型中活动的调用/结束语义。如果服务请求者与服务提供者间还存在异构性,那么情况将变得更加复杂。将异构服务集成进传统工作流模型会导致规范爆炸、过程活动及其依赖间的组合爆炸,因此实际应用中难以对其进行有效管理。
为了集成各成员企业提供的服务,在基于服务的跨企业过程中需要使用服务活动。服务活动也就是将各服务的操作和/或状态转换成可以加入到跨企业过程中活动行为的服务代理(Service Proxy)。在虚拟企业中,当相同的服务具有多个提供者时,基于服务的跨企业过程就必须包含抽象活动,称其为服务接口。一个服务接口可以具有多个实现,而服务活动用于实现各服务接口。这也就是说,相同的服务具有多个提供者时,可以用多个服务活动实现一个服务接口。
过程模型不对已提供服务做任何假设,而仅对服务设计人员做以下假设:
(1) 他/她不具有其它企业所使用的服务模型和实现方面的知识;
(2) 属于不同企业的服务只通过跨企业过程进行集成和交互。
现有过程模型(如工作流管理委员会提出的工作流过程模型)和很多传统的工作流管理系统对跨企业过程的支持却很有限,这主要是因为:
(1)服务通常都是会话式的;
(2)服务是异构的;
(3) 集成异构服务的跨企业过程规范会受到组合爆炸的影响。
1.会话式服务
在WSBPM模型中,将服务和活动这些的传统概念结合为单个WSBPM原语,称之为服务活动。实际上,服务常常封装多个单企业过程,这样的服务是典型的会话式服务,即服务在运行过程中需要交互。交互过程中,客户执行多个服务调用并接收可用于进一步调用的中间结果。由于现有的过程模型假定活动仅调用一次,随即进入运行状态直至完成或终止才产生结果数据,因此无法直接从现有的过程模型捕获会话式活动。例如,使用现有的过程模型来捕获服务的注销过程,就必须在服务提供活动后添加一个服务注销活动。因此,在捕获服务请求和注销过程中,现有过程模型具有以下局限:
a. 只有当服务请求操作(和服务内相应的单企业过程)完成后才能调用注销活动,即不能注销正在进行中的服务请求;
b. 无法将服务和相应的服务操作建模成单个传统活动。
本文提出的过程模型通过引入能够扩展活动语义的服务接口和服务活动来满足会话式服务的上述需求。
2.服务异构性
不同企业通常使用不同的模型和相应的语义对服务进行建模。异构服务是由不同服务供应者在不同时间为不同的客户设计的。尽管任何模型都不存在处理异构性的通用解决方案,但在处理异构性方面,捕获应用语义并通过子类(Subclass)提供有效抽象的过程模型比那些将集成语义隐藏在集成程序代码中的其它过程模型更加有效。
现有的过程模型仅提供一般活动状态和操作,如正在运行(running)、已完成(completed)或已终止(terminated)活动状态,这些活动状态无法捕获集成在跨企业过程中的异构服务的应用语义。在WSBPM模型中,可以为服务使用专用状态,如已订购(ordered)、已供应(provisioned)、已完成(fulfilled)等活动状态,还可以描述引起这些服务状态变迁的显式操作。此外,本模型还提供专用活动状态和操作的子类,这样就可以将其泛化为某个具体的一般状态。通过这种方法,我们就可以对继承和子类型(Subtype)进行清晰的语义分析,从而将面向对象程序设计方法应用到WSBPM模型中。
3. 组合爆炸
支付子过程、客户服务子过程等服务均表示为跨企业过程的单个传统活动(即表示为跨企业过程的子过程)。如果使用现有过程模型来集成这些服务,那么将变得极为复杂。尤其是在传统过程模型中捕获单企业过程集成语义,需要为这些单企业过程间的调用和交互引入辅助的调用和/或反馈活动。
此外,设计人员还必须引入辅助数据流和控制流,以便将这些活动与跨企业过程中的其它活动关联起来。而使用过程建模方法可以将单企业过程紧密集成到跨企业过程中。尤其是与每个单企业过程的每次交互,都必须将该单企业过程设计成至少包含一个调用活动;对于因与其进行交互而引起的另一个单企业过程的每个状态变化,都必须至少包含一个反馈活动。例如,假设跨企业过程中的各个组成服务由多个服务提供者提供,且跨企业过程提供者可以动态地选择最好的服务,那么就必须为服务提供者的各个可能的组合提供单独的单企业过程。而这必将导致跨企业过程组合爆炸。因此,当前的过程技术对跨企业过程管理的可扩展性和柔性设定了严格的限制条件。
二、问题的解决
为满足上述需求,该过程模型将服务活动接口从服务活动实现中分离出来。这样,活动类型就由活动接口决定。为了避免使用术语“活动”具有不同意义带来的混淆,以下将对活动类型(由活动接口表示)与活动实现进行区分,并将过程中使用的活动称为活动变量。
面向对象技术如抽象、封装和多态性(Polymorphism)等设计概念对于实现WSBPM模型的主要目标,即实现不同跨企业过程中服务的重用、跨企业过程的可扩展性和柔性等方面起着重要作用,因此将这些设计概念引入WSBPM模型,并将这些设计原理用于开发支持WSBPM模型外部服务的下述原语中:
(1) 服务接口(Service interface)即活动接口,用于将外部服务建模为可以包含专用状态和操作的状态机;
(2) 服务活动(Service activity)即可以在WSBPM过程模型中直接使用的活动。服务活动与外部服务(即服务实现)进行通信,以执行在服务接口中定义的实际调用和反馈操作;
(3) 占位符(Placeholder)也就是抽象活动,主要用于活动的后期绑定。当存在多个活动类型时,可以选择其中之一进行绑定。运行时由于占位符可以在多个服务提供者间进行选择,因此它支持服务的动态集成;
(4)服务包装器(Service wrapper)是用于隐藏服务异构性的过程。
1.服务接口
客户请求服务时,服务提供者将向客户提供一份包含服务接口的服务契约。如果客户对所提供的契约满意,就可以使用该服务接口来控制服务、请求服务状态信息或观察服务状态变化以便了解服务状态。服务接口是服务活动使用的外部服务的抽象。通过服务接口我们可以将服务活动向占位符进行映射。这样就可以用多个服务活动实现占位符。占位符类型接口在抽象层捕获实现需求,而服务活动接口在具体层捕获实现的性能。
WSBPM服务接口由活动状态机类型和活动输入/输出组成。下面介绍服务接口的组成。
2.服务状态机类型
服务状态机类型用于确定各活动接口实例可能的活动状态及其相应的状态变迁。服务状态机类型在形式上是一个(S, T)的二元组,其中S是状态组,而T是变迁组t=(s1, s2),其中s1, s2∈S,t∈T。状态变迁由活动操作的显式调用引起。
(1)活动操作
过程中活动的执行及相应的状态变迁通过执行活动操作(如开始和结束操作)进行驱动。现有的工作流过程模型如工作流管理委员会使用隐式活动操作,即在其过程模型中并不明确提及活动操作。而其活动操作与工作列表GUI和编程API中的活动表示紧密耦合。
(2) 活动状态
为实现与WfMC标准间的互操作,本文提供一组一般活动状态和状态变迁,这就构成了如图2所示的一般活动状态类型。活动状态Uninitialized(未初始化)与活动实例尚未存在的状态对应。当活动实例出现在一个或多个参与者的工作列表中时,活动状态变为Ready(就绪)。当参与者请求启动活动实例时,活动变为Running(运行)状态。而活动实例的最终状态是Completed(完成)还是Terminated(终止)状态将取决于活动是正常结束还是异常终止。这两种状态都是Closed(结束)状态的子状态。Suspended(挂起)状态只用于过程活动实例,表示过程实例的执行暂时挂起。处于挂起状态的过程活动实例在它重新开始运行前不能对其进行任何操作。图中的一般活动状态用于捕获应用独立活动实例的行为。
除一般活动状态外,在WSBPM模型中还可以定义专用状态。这样就可以对应用进行精确建模,而且也便于将不同企业的服务进行集成。某些工作流过程模型(如METEOR)可以定义任意活动状态。虽然这样可以实现活动状态的灵活定义,但就活动状态而言,由于活动间的共同点较少,反而会使过程模型变得非常复杂,使互操作性难以实现。
图1显示了相应的活动状态类型。客户通过虚拟企业提供的浏览购物页面,选择所需商品,输入所需数量及交货日期并提交订单,订单处理服务便开始运行。虚拟企业接收到客户提交的订单,开始启动订单处理流程,订单此时处于正在定购(Ordering)状态。虚拟企业对客户提交的订单进行验证,依据订单中各列支项(Line Item)的数量及交货日期对零售商系统的仓库和制造商系统进行查询,如果能满足客户需求,虚拟企业通知客户已接受该订单及应支付的预付定金。一旦收到客户的预付定金,这时订单处于已定购(Ordered)状态。此后,虚拟企业开始分配提供该服务所需资源(如采购制造该成品所需的原材料及零部件等)以履行该订单,订单便由已定购(Ordered)状态变为正在交付(Delivering)状态。图1中,状态由正在定购状态变为已订购状态,其上有标记为Internal。Internal是关键词,表示该状态变迁仅由活动实现触发,不由过程设定系统控制。商品交付客户后活动结束,即进入完成状态。只要定单尚未完成就可以取消该订单。取消用于表示从已订购状态到终止状态的状态变迁。图中为了简化,忽略了取消订单所需活动,并假定终止活动执行该项任务。同样,图中也省略了挂起(Suspend)活动。
图2中将正在运行状态细化为正在订购、已订购和正在交付三种服务状态。其中只有已订购状态可以直接变迁到终止状态。同样,只有经过正在交付服务状态才可以转变为完成状态。这样就可以限制过程直接从正在订购和已订购服务状态直接进入完成状态,或者服务进入正在交付服务状态后转变为终止服务状态。
3.服务活动
服务活动用于将活动接口中定义的操作转换为外部服务提供的操作,也就是服务活动代理(Proxy)。通过服务活动进行服务集成需遵循以下两个步骤:
(1) 服务活动声明:包括活动接口的选取或创建;
(2) 相应服务活动的程序实现:服务活动程序将外部服务提供的操作转换为服务接口指定的操作。
与作为描述性规范的WSBPM过程类型和服务活动接口不同的是,服务活动程序使用传统编程语言进行编码,而它们都是描述性规范。服务活动程序是一种用于外部服务的高级包装器程序。由于服务活动程序需处理通信协议和服务提供者格式,并将其转换成WSBPM中使用的格式,因此必须对程序进行部署(Deployment)。需注意的是一个服务接口可以存在多个实现,即属于不同服务提供者的服务活动程序。只要服务与已存在的服务接口一致,就不用改变WSBPM过程而增加新的服务提供者。因此,服务活动概念提供了一种用于处理服务异构性纯抽象方式。
4.占位符
由于可能存在多个服务提供者,且在制定过程规范时还无从知道各提供者所提供的服务,因此需要一种辅助机制,用于支持服务活动的后期绑定和服务提供者的选取。在WSBPM模型中,这种机制就是占位符和服务代理器(Service Broker)。
活动占位符不仅允许过程规范制定阶段活动实现未知或有意留待以后进行设定,还允许运行时将活动类型赋值给指定的活动变量。由于跨企业过程中的服务通常使用具有抽象活动状态类型的服务接口(该接口与多个具体类型匹配)来表示,因此活动占位符是运行时能够进行服务动态选取的基础。服务动态选取是跨企业过程中服务具有多个服务提供者的必然要求。
占位符用于替代过程类型中活动变量声明处的具体活动类型。活动占位符使用一种判定策略,可以在运行时为占位符活动变量选取实际活动类型。为保证那些使用活动占位符的过程类型间的一致性,必须指定活动类型组以便选取策略从其中进行选取。只有与所需要的活动状态类型或其子类型匹配的活动类型才可用于为活动占位符赋值。数据流使用的输入到使用占位符的活动变量的资源(或从使用占位符的活动变量输出的资源)会对可选取的活动类型施加额外的签名限制。
图3显示了跨企业过程中规范制定阶段的一个活动占位符示例。图中显示在规范制定阶段,活动变量provide_PartX的实际类型可以从零件供应商{Supplier_A,…,Supplier_N}构成的服务活动类型组中选取。为了简化,图中未描述选取策略逻辑。
图4显示了跨企业过程实例的一个快照。假设活动占位符选取策略已将活动类型Supplier_M赋值给活动占位符。
活动占位符由两部分构成:占位符活动变量和活动类型判定策略。占位符活动变量与过程类型中的活动变量类似,不同点在于占位符指定抽象活动类型,而不是具体活动类型。与其它的活动变量一样,占位符活动变量也可以有依赖,如用于控制流和数据流的依赖。
5. 服务包装过程
通过为抽象服务定义专用状态和操作,服务接口便建立起对外部服务的抽象。为充分利用服务抽象的概念,逻辑上等效的服务应纳入相同的服务接口。虽然不同的服务提供者会提供相似的服务,但在服务行为的细节方面仍会存在差异。过程规范中的每个可用服务都需要单独的服务变量,由于存在这样的异构性而引入各自的服务接口将增加跨企业过程规范的复杂性。此外,整个过程还必须适应每个新增的服务。为了解决上述问题,我们提出服务包装过程的概念。服务包装过程以一致的方式,通过对服务活动进行重新包装来解决服务异构性问题。使用服务包装过程可以对基本的服务活动进行包装并补偿其与目标服务接口的异构性。与基本服务过程一样,服务包装过程也有专用状态和专用活动操作这些特点,即它也实现服务接口。需注意的是,要包装的服务活动接口是包装过程服务接口的特殊化(specialization)。因此,包装过程的活动状态类型是服务活动状态类型的泛化(generalization),并且包装过程提供的活动操作是基本服务活动提供的活动操作的子集。包装过程提供的专用活动操作可以映射为已包装服务活动的专用操作。这样就可以确保包装过程的专用操作及其相应的状态变迁总能执行。而包装过程的内部状态变迁或者直接从已包装的服务活动内部变迁派生,或者从包装过程包含的辅助活动派生。
图5显示了一个服务包装过程示例。假定零件供应商提供一项服务provide_PartX,该服务与其他零件供应商提供的该项服务一致(即具有相同的接口)。但是它们之间也存在以下两点差别:
①某零件供应商一旦接收到服务客户的请求,便立即向该服务客户开具帐单;而其他零件供应商仅在零件供应服务完成后为客户开具帐单。这样,该服务供应商与其他零件供应商在为客户开具帐单的方式方面就很不一致。
②该零件供应商还会在所需信息设置完成前就报告该服务已激活。因此,该零件供应服务的客户必须能对该服务进行检查。
图5显示了对该不规范零件供应服务进行改写的服务包装过程,这样就可以与其他零件供应商提供的零件供应服务的行为保持一致。
包装过程包含三个服务活动:一个需集成的不规范的服务活动(零件供应服务)、一个退款活动和一个状态检查活动。在客户注销零件订单时,退款活动用于将此前开具的帐单金额退还给客户(图5中使用Terminated状态对注销活动进行建模)。我们在零件供应服务与退款活动之间提供一种新型的控制流变迁,这样无论什么时候,只要客户注销零件订单,退款活动都会自动执行。
作者单位:仲恺农业工程学院经济管理学院
参考文献:
[1]范玉顺,王刚,高展.企业建模理论与方法学导论[M].清华大学出版社,2001.
[2]刘敏, 李彪, 张申生.敏捷供应链中基于多代理的Legacy系统封装技术[J].上海交通大学学报,2001, 35(2):197-200.
[3]蹇崇军.供应链管理系统集成建模方法研究及系统实现[J].西北工业大学,2006,(7):68-71.
关键词:供应链管理系统;Web服务;过程模型
中图分类号:F270 文献标识码:A
为了保持企业竞争力,现代企业必须在为顾客提供服务和产品方面进行协作,这些服务或产品取决于多种业务资源和多个组织资源。无论该协作是正式的长期联营或者仅仅持续到某项客户服务终止,协作期间参与企业都会形成高效运转的虚拟企业。建立能利用并管理供应链中各成员企业提供的Web服务的供应链,企业可以获得很高的效率。
本文提出一种通过集成并协调Web服务的跨企业过程,来建立并管理跨企业供应链的技术。为实现此目标,提出了基于Web服务的过程模型(Process Model)的概念:a. 将供应链捕获为选取、集成并使用Web服务的多个跨企业过程;b. 捕获Web服务,即对虚拟企业中的各联盟企业提供的服务间的函数关系、契约关系和会话关系进行建模;c. 通过Web服务组合和自动Web服务协调规范为供应链管理系统程序设计提供执行语义和协调原语。
一、 跨企业过程的服务集成所面临的问题
服务的使用包括服务请求者(服务客户)与服务提供者间的会话。这种会话包括服务请求操作的执行、服务运行期间的各种控制和信息交换操作以及服务结果的最终交付。对会话进行捕获和协调就需要建模和执行原语,这远远超出了传统工作流模型中活动的调用/结束语义。如果服务请求者与服务提供者间还存在异构性,那么情况将变得更加复杂。将异构服务集成进传统工作流模型会导致规范爆炸、过程活动及其依赖间的组合爆炸,因此实际应用中难以对其进行有效管理。
为了集成各成员企业提供的服务,在基于服务的跨企业过程中需要使用服务活动。服务活动也就是将各服务的操作和/或状态转换成可以加入到跨企业过程中活动行为的服务代理(Service Proxy)。在虚拟企业中,当相同的服务具有多个提供者时,基于服务的跨企业过程就必须包含抽象活动,称其为服务接口。一个服务接口可以具有多个实现,而服务活动用于实现各服务接口。这也就是说,相同的服务具有多个提供者时,可以用多个服务活动实现一个服务接口。
过程模型不对已提供服务做任何假设,而仅对服务设计人员做以下假设:
(1) 他/她不具有其它企业所使用的服务模型和实现方面的知识;
(2) 属于不同企业的服务只通过跨企业过程进行集成和交互。
现有过程模型(如工作流管理委员会提出的工作流过程模型)和很多传统的工作流管理系统对跨企业过程的支持却很有限,这主要是因为:
(1)服务通常都是会话式的;
(2)服务是异构的;
(3) 集成异构服务的跨企业过程规范会受到组合爆炸的影响。
1.会话式服务
在WSBPM模型中,将服务和活动这些的传统概念结合为单个WSBPM原语,称之为服务活动。实际上,服务常常封装多个单企业过程,这样的服务是典型的会话式服务,即服务在运行过程中需要交互。交互过程中,客户执行多个服务调用并接收可用于进一步调用的中间结果。由于现有的过程模型假定活动仅调用一次,随即进入运行状态直至完成或终止才产生结果数据,因此无法直接从现有的过程模型捕获会话式活动。例如,使用现有的过程模型来捕获服务的注销过程,就必须在服务提供活动后添加一个服务注销活动。因此,在捕获服务请求和注销过程中,现有过程模型具有以下局限:
a. 只有当服务请求操作(和服务内相应的单企业过程)完成后才能调用注销活动,即不能注销正在进行中的服务请求;
b. 无法将服务和相应的服务操作建模成单个传统活动。
本文提出的过程模型通过引入能够扩展活动语义的服务接口和服务活动来满足会话式服务的上述需求。
2.服务异构性
不同企业通常使用不同的模型和相应的语义对服务进行建模。异构服务是由不同服务供应者在不同时间为不同的客户设计的。尽管任何模型都不存在处理异构性的通用解决方案,但在处理异构性方面,捕获应用语义并通过子类(Subclass)提供有效抽象的过程模型比那些将集成语义隐藏在集成程序代码中的其它过程模型更加有效。
现有的过程模型仅提供一般活动状态和操作,如正在运行(running)、已完成(completed)或已终止(terminated)活动状态,这些活动状态无法捕获集成在跨企业过程中的异构服务的应用语义。在WSBPM模型中,可以为服务使用专用状态,如已订购(ordered)、已供应(provisioned)、已完成(fulfilled)等活动状态,还可以描述引起这些服务状态变迁的显式操作。此外,本模型还提供专用活动状态和操作的子类,这样就可以将其泛化为某个具体的一般状态。通过这种方法,我们就可以对继承和子类型(Subtype)进行清晰的语义分析,从而将面向对象程序设计方法应用到WSBPM模型中。
3. 组合爆炸
支付子过程、客户服务子过程等服务均表示为跨企业过程的单个传统活动(即表示为跨企业过程的子过程)。如果使用现有过程模型来集成这些服务,那么将变得极为复杂。尤其是在传统过程模型中捕获单企业过程集成语义,需要为这些单企业过程间的调用和交互引入辅助的调用和/或反馈活动。
此外,设计人员还必须引入辅助数据流和控制流,以便将这些活动与跨企业过程中的其它活动关联起来。而使用过程建模方法可以将单企业过程紧密集成到跨企业过程中。尤其是与每个单企业过程的每次交互,都必须将该单企业过程设计成至少包含一个调用活动;对于因与其进行交互而引起的另一个单企业过程的每个状态变化,都必须至少包含一个反馈活动。例如,假设跨企业过程中的各个组成服务由多个服务提供者提供,且跨企业过程提供者可以动态地选择最好的服务,那么就必须为服务提供者的各个可能的组合提供单独的单企业过程。而这必将导致跨企业过程组合爆炸。因此,当前的过程技术对跨企业过程管理的可扩展性和柔性设定了严格的限制条件。
二、问题的解决
为满足上述需求,该过程模型将服务活动接口从服务活动实现中分离出来。这样,活动类型就由活动接口决定。为了避免使用术语“活动”具有不同意义带来的混淆,以下将对活动类型(由活动接口表示)与活动实现进行区分,并将过程中使用的活动称为活动变量。
面向对象技术如抽象、封装和多态性(Polymorphism)等设计概念对于实现WSBPM模型的主要目标,即实现不同跨企业过程中服务的重用、跨企业过程的可扩展性和柔性等方面起着重要作用,因此将这些设计概念引入WSBPM模型,并将这些设计原理用于开发支持WSBPM模型外部服务的下述原语中:
(1) 服务接口(Service interface)即活动接口,用于将外部服务建模为可以包含专用状态和操作的状态机;
(2) 服务活动(Service activity)即可以在WSBPM过程模型中直接使用的活动。服务活动与外部服务(即服务实现)进行通信,以执行在服务接口中定义的实际调用和反馈操作;
(3) 占位符(Placeholder)也就是抽象活动,主要用于活动的后期绑定。当存在多个活动类型时,可以选择其中之一进行绑定。运行时由于占位符可以在多个服务提供者间进行选择,因此它支持服务的动态集成;
(4)服务包装器(Service wrapper)是用于隐藏服务异构性的过程。
1.服务接口
客户请求服务时,服务提供者将向客户提供一份包含服务接口的服务契约。如果客户对所提供的契约满意,就可以使用该服务接口来控制服务、请求服务状态信息或观察服务状态变化以便了解服务状态。服务接口是服务活动使用的外部服务的抽象。通过服务接口我们可以将服务活动向占位符进行映射。这样就可以用多个服务活动实现占位符。占位符类型接口在抽象层捕获实现需求,而服务活动接口在具体层捕获实现的性能。
WSBPM服务接口由活动状态机类型和活动输入/输出组成。下面介绍服务接口的组成。
2.服务状态机类型
服务状态机类型用于确定各活动接口实例可能的活动状态及其相应的状态变迁。服务状态机类型在形式上是一个(S, T)的二元组,其中S是状态组,而T是变迁组t=(s1, s2),其中s1, s2∈S,t∈T。状态变迁由活动操作的显式调用引起。
(1)活动操作
过程中活动的执行及相应的状态变迁通过执行活动操作(如开始和结束操作)进行驱动。现有的工作流过程模型如工作流管理委员会使用隐式活动操作,即在其过程模型中并不明确提及活动操作。而其活动操作与工作列表GUI和编程API中的活动表示紧密耦合。
(2) 活动状态
为实现与WfMC标准间的互操作,本文提供一组一般活动状态和状态变迁,这就构成了如图2所示的一般活动状态类型。活动状态Uninitialized(未初始化)与活动实例尚未存在的状态对应。当活动实例出现在一个或多个参与者的工作列表中时,活动状态变为Ready(就绪)。当参与者请求启动活动实例时,活动变为Running(运行)状态。而活动实例的最终状态是Completed(完成)还是Terminated(终止)状态将取决于活动是正常结束还是异常终止。这两种状态都是Closed(结束)状态的子状态。Suspended(挂起)状态只用于过程活动实例,表示过程实例的执行暂时挂起。处于挂起状态的过程活动实例在它重新开始运行前不能对其进行任何操作。图中的一般活动状态用于捕获应用独立活动实例的行为。
除一般活动状态外,在WSBPM模型中还可以定义专用状态。这样就可以对应用进行精确建模,而且也便于将不同企业的服务进行集成。某些工作流过程模型(如METEOR)可以定义任意活动状态。虽然这样可以实现活动状态的灵活定义,但就活动状态而言,由于活动间的共同点较少,反而会使过程模型变得非常复杂,使互操作性难以实现。
图1显示了相应的活动状态类型。客户通过虚拟企业提供的浏览购物页面,选择所需商品,输入所需数量及交货日期并提交订单,订单处理服务便开始运行。虚拟企业接收到客户提交的订单,开始启动订单处理流程,订单此时处于正在定购(Ordering)状态。虚拟企业对客户提交的订单进行验证,依据订单中各列支项(Line Item)的数量及交货日期对零售商系统的仓库和制造商系统进行查询,如果能满足客户需求,虚拟企业通知客户已接受该订单及应支付的预付定金。一旦收到客户的预付定金,这时订单处于已定购(Ordered)状态。此后,虚拟企业开始分配提供该服务所需资源(如采购制造该成品所需的原材料及零部件等)以履行该订单,订单便由已定购(Ordered)状态变为正在交付(Delivering)状态。图1中,状态由正在定购状态变为已订购状态,其上有标记为Internal。Internal是关键词,表示该状态变迁仅由活动实现触发,不由过程设定系统控制。商品交付客户后活动结束,即进入完成状态。只要定单尚未完成就可以取消该订单。取消用于表示从已订购状态到终止状态的状态变迁。图中为了简化,忽略了取消订单所需活动,并假定终止活动执行该项任务。同样,图中也省略了挂起(Suspend)活动。
图2中将正在运行状态细化为正在订购、已订购和正在交付三种服务状态。其中只有已订购状态可以直接变迁到终止状态。同样,只有经过正在交付服务状态才可以转变为完成状态。这样就可以限制过程直接从正在订购和已订购服务状态直接进入完成状态,或者服务进入正在交付服务状态后转变为终止服务状态。
3.服务活动
服务活动用于将活动接口中定义的操作转换为外部服务提供的操作,也就是服务活动代理(Proxy)。通过服务活动进行服务集成需遵循以下两个步骤:
(1) 服务活动声明:包括活动接口的选取或创建;
(2) 相应服务活动的程序实现:服务活动程序将外部服务提供的操作转换为服务接口指定的操作。
与作为描述性规范的WSBPM过程类型和服务活动接口不同的是,服务活动程序使用传统编程语言进行编码,而它们都是描述性规范。服务活动程序是一种用于外部服务的高级包装器程序。由于服务活动程序需处理通信协议和服务提供者格式,并将其转换成WSBPM中使用的格式,因此必须对程序进行部署(Deployment)。需注意的是一个服务接口可以存在多个实现,即属于不同服务提供者的服务活动程序。只要服务与已存在的服务接口一致,就不用改变WSBPM过程而增加新的服务提供者。因此,服务活动概念提供了一种用于处理服务异构性纯抽象方式。
4.占位符
由于可能存在多个服务提供者,且在制定过程规范时还无从知道各提供者所提供的服务,因此需要一种辅助机制,用于支持服务活动的后期绑定和服务提供者的选取。在WSBPM模型中,这种机制就是占位符和服务代理器(Service Broker)。
活动占位符不仅允许过程规范制定阶段活动实现未知或有意留待以后进行设定,还允许运行时将活动类型赋值给指定的活动变量。由于跨企业过程中的服务通常使用具有抽象活动状态类型的服务接口(该接口与多个具体类型匹配)来表示,因此活动占位符是运行时能够进行服务动态选取的基础。服务动态选取是跨企业过程中服务具有多个服务提供者的必然要求。
占位符用于替代过程类型中活动变量声明处的具体活动类型。活动占位符使用一种判定策略,可以在运行时为占位符活动变量选取实际活动类型。为保证那些使用活动占位符的过程类型间的一致性,必须指定活动类型组以便选取策略从其中进行选取。只有与所需要的活动状态类型或其子类型匹配的活动类型才可用于为活动占位符赋值。数据流使用的输入到使用占位符的活动变量的资源(或从使用占位符的活动变量输出的资源)会对可选取的活动类型施加额外的签名限制。
图3显示了跨企业过程中规范制定阶段的一个活动占位符示例。图中显示在规范制定阶段,活动变量provide_PartX的实际类型可以从零件供应商{Supplier_A,…,Supplier_N}构成的服务活动类型组中选取。为了简化,图中未描述选取策略逻辑。
图4显示了跨企业过程实例的一个快照。假设活动占位符选取策略已将活动类型Supplier_M赋值给活动占位符。
活动占位符由两部分构成:占位符活动变量和活动类型判定策略。占位符活动变量与过程类型中的活动变量类似,不同点在于占位符指定抽象活动类型,而不是具体活动类型。与其它的活动变量一样,占位符活动变量也可以有依赖,如用于控制流和数据流的依赖。
5. 服务包装过程
通过为抽象服务定义专用状态和操作,服务接口便建立起对外部服务的抽象。为充分利用服务抽象的概念,逻辑上等效的服务应纳入相同的服务接口。虽然不同的服务提供者会提供相似的服务,但在服务行为的细节方面仍会存在差异。过程规范中的每个可用服务都需要单独的服务变量,由于存在这样的异构性而引入各自的服务接口将增加跨企业过程规范的复杂性。此外,整个过程还必须适应每个新增的服务。为了解决上述问题,我们提出服务包装过程的概念。服务包装过程以一致的方式,通过对服务活动进行重新包装来解决服务异构性问题。使用服务包装过程可以对基本的服务活动进行包装并补偿其与目标服务接口的异构性。与基本服务过程一样,服务包装过程也有专用状态和专用活动操作这些特点,即它也实现服务接口。需注意的是,要包装的服务活动接口是包装过程服务接口的特殊化(specialization)。因此,包装过程的活动状态类型是服务活动状态类型的泛化(generalization),并且包装过程提供的活动操作是基本服务活动提供的活动操作的子集。包装过程提供的专用活动操作可以映射为已包装服务活动的专用操作。这样就可以确保包装过程的专用操作及其相应的状态变迁总能执行。而包装过程的内部状态变迁或者直接从已包装的服务活动内部变迁派生,或者从包装过程包含的辅助活动派生。
图5显示了一个服务包装过程示例。假定零件供应商提供一项服务provide_PartX,该服务与其他零件供应商提供的该项服务一致(即具有相同的接口)。但是它们之间也存在以下两点差别:
①某零件供应商一旦接收到服务客户的请求,便立即向该服务客户开具帐单;而其他零件供应商仅在零件供应服务完成后为客户开具帐单。这样,该服务供应商与其他零件供应商在为客户开具帐单的方式方面就很不一致。
②该零件供应商还会在所需信息设置完成前就报告该服务已激活。因此,该零件供应服务的客户必须能对该服务进行检查。
图5显示了对该不规范零件供应服务进行改写的服务包装过程,这样就可以与其他零件供应商提供的零件供应服务的行为保持一致。
包装过程包含三个服务活动:一个需集成的不规范的服务活动(零件供应服务)、一个退款活动和一个状态检查活动。在客户注销零件订单时,退款活动用于将此前开具的帐单金额退还给客户(图5中使用Terminated状态对注销活动进行建模)。我们在零件供应服务与退款活动之间提供一种新型的控制流变迁,这样无论什么时候,只要客户注销零件订单,退款活动都会自动执行。
作者单位:仲恺农业工程学院经济管理学院
参考文献:
[1]范玉顺,王刚,高展.企业建模理论与方法学导论[M].清华大学出版社,2001.
[2]刘敏, 李彪, 张申生.敏捷供应链中基于多代理的Legacy系统封装技术[J].上海交通大学学报,2001, 35(2):197-200.
[3]蹇崇军.供应链管理系统集成建模方法研究及系统实现[J].西北工业大学,2006,(7):68-71.