基于C++的流程监控与Web服务集成层的设计与实现.docx
《基于C++的流程监控与Web服务集成层的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于C++的流程监控与Web服务集成层的设计与实现.docx(47页珍藏版)》请在冰豆网上搜索。
基于C++的流程监控与Web服务集成层的设计与实现
基于C++的流程监控与Web服务集成层
的设计与实现
摘要
作为BPEL引擎中集成层IL中Web服务方式的实现—Web服务集成层,它的作用主要是负责BPEL运行时以Web服务方式与外界的通信。
而作为BPM统一管理平台的一个子模块-流程监控模块,它面向用户,能够修改所有流程以及流程实例的各种状态,包括监测实例的状态、实例执行情况的统计等功能。
采用C++作为开发语言,MYSQL作为数据库,visualstudio2005作为开发工具。
本文提出:
用户可以通过流程监控模块获取数据库中流程以及其实例的相关信息,例如流程的id、状态和流程实例的执行时间等等。
还可以根据特定的查询条件,如流程id,来搜索出特定的流程信息。
此外,流程监控模块还可以对流程的所有实例的执行情况进行统计,如计算出实例执行的平均时间和实例执行的成功率,以便进一步了解基于C++实现的BPEL引擎的执行情况。
而另外一个模块-Web服务集成层,它主要是利用Web服务标准C/C++实现ApacheAxis2的开源项目WSO2WSF/C++来实现Web服务的调用,以支持BPEL引擎与Web服务的交互。
利用WSO2WSF提供的接口,我们可以很方便的以C++方式调用Web服务。
此外,Web服务集成层的另外一大功能是流程部署。
用户只需提供流程服务的BPEL文件、WSDL文件和SERVICES.XML文件就可以在WSO2WSF提供的Axis服务器中部署一个流程服务,然后通过类似与外部服务的调用方法就可以调用流程服务。
通过这种方式,解决了BPEL运行时与外界的通信问题。
关键词:
业务流程引擎,流程管理,集成层,网络服务
Abstract
WebServiceILLayer,whichisthewebserviceimplementinBPELengine’sILlayer,themainfunctionisresponsibleforthecommunicationbetweenBPELruntimeandoutside.AndbeingapartofBPMUniteManageplatform-ProcessMonitorModule,themainfunctionofwhichisforusertomodifythestateofallprocessesandtheirinstances,includingmonitoringthechangeofinstancestate,gatheringstatisticsoftherunningsituationofinstancesandsoon.WeuseC++asdeveloplanguage,MYSQLasdatabaseandVisualStudio2005asdeveloptool.
Inthispaper:
UsercangettheinformationofprocessesandtheirinstancesfromdatabasewiththehelpofProcessMonitor,suchasprocessID,stateortheexecutiontimeofprocessinstances.UseralsocangetspecialprocessinformationwithspecialqueryconditionsuchasprocessID.What’smore,ProcessMonitorcangatherstatisticsoftheexecutionoftheprocessinstances,suchastheaveragetimeofexecutionandsucceedrateofoneprocess,tofurtheranalyzetheefficiencyofBPELengineimplementedbyC++.AndWebServiceILmadeuseofanopensourceproject-WSO2WSF/C++tocalltheWebServiceandtosupportthecommunicationbetweenBPELengineandWedService.WiththehelpoftheinterfaceofWSO2WSF,itiseasytocallWebservicesinC++.What’sfurther,anotherbigfunctionofWebserviceILisdeployofprocess.UserdonothingbutprovidetheBPELfile,WSDLfile,SERVICE.XMLfileofprocess,thensystemwillautobuildtheprocessserviceanddeployintheAxisServerofWSO2WSF.Afterdeploying,wecancalltheprocessservicejustliketheWebservices.Inthisway,WebserviceILsolvedthecommunicateproblembetweenBPELruntimeandoutside.
Keywords:
BPELEngine,ProcessManagement,IntegratedLayer,WebServices
第一章绪论
1.1研究背景和意义
随着经济的全球化发展趋势,信息技术在世界范围内得到了广泛的应用。
现代企业为了提供自己的竞争力,进一步加强了企业的信息化建设。
而工作流技术是信息技术应用的一个重要分支,也是企业信息化建设的一个重要组成部分。
对于现代企业,时间和成本是影响企业发展的两大因素。
在工作流技术的帮助下,一些重复性的工作可以由工作流自动或部分自动地执行,这样可以有效的减少了工作时间,并且可以使人力资源得到更好的利用,从而提高了工作效率并降低了成本。
然而,随着时间的推移,信息孤岛[1]的存在严重制约着企业的进一步拓展,遗留系统[2,3]的改造和处理不仅令IT业界头痛,同时也令企业一筹莫展,因为企业IT投资的成本一直居高不下,因此遗留系统和信息孤岛,已成为企业必须面对的当务之急。
面向服务架构(SOA)通过封装标准服务,屏蔽来自信息孤岛和遗留系统的复杂性,一定程度上满足了企业的需求。
但是SOA没有定义服务组合和协同相关协议,也无法满足企业业务敏捷性的需要,而这些恰恰是业务流程管理(BPM)所要解决的问题。
BPM和SOA可以很好的融合,优势互补。
SOA为BPM屏蔽底层应用复杂性,BPM为SOA提供服务编排和业务敏捷性。
只有SOA结合BPM,才能真正实现业务和技术的完美分离,更好的体现SOA的架构优势和商业价值。
WebService[4,5]是用标准的、规范的基于XML的WSDL语言描述的,这一描述囊括了与服务交互所需要的全部细节,隐藏了服务实现的细节,允许通过独立于服务实现、独立于硬件或软件平台、独立于编写服务所用的编程语言的方式使用该服务,这使得基于WebService的应用程序具备松散藕合、面向组件和跨技术实现的特点。
WebService技术的出现,给我们解决上述问题提供了契机。
将WebService技术应用于工作流管理系统,将有助于实现跨企业的、网络化的分布式工作流管理系统。
WebService具有与生俱来的动态特性,它把一切都看作服务,这种服务可以通过在网络上使用消息传递动态地被发现和组织。
工作流和WebService的结合,使得业务系统间的互操作性和敏捷性等方面有很大的改进,使得服务的使用者之间以多种方式进行交互成为可能,使得用户之间,企业之间的交流和资源共享,变得更为简单方便。
随着WebService技术在企业信息系统中逐步得到广泛应用,WebService工作流技术己经成为WebService技术的研究热点和重要应用方向。
1.2国内外动态
早在很多年以前,工作流管理的概念就已经被提出,但是局限于当时的计算机技术,一直未能得到充分发展。
直到上个世纪90年代,工作流管理技术作为一种新兴的企业信息化技术,在企业的业务流程管理领域获得了广泛的应用。
最近几年,随着计算机技术和网络技术的迅猛发展,以及伴随着市场竞争的加剧,企业对提高生产质量、缩短生产周期等的强烈要求,使得工作流管理成为企业界和研究领域的热门,在世界各地,特别是在欧洲和北美,涌现出许多有关工作流研究的公司和组织,而功能各异的工作流管理产品更是多以百计。
成立于1993年8月的工作流管理联盟(WorkflowManagementCoalition),是一个非赢利性的国际性的标准化组织,成员包括工作流产品的供应者、应用者,有关大学和研究机构和个人。
该组织颁布了一系列工作流产品标准,包括工作流参考模型、工作流术语表、工作流管理系统各部分间接口规格、工作流产品的互操作性标准等。
这些举措加速了工作流技术的商品化。
目前已经有相当数量的开发商已经研究和开发了符合上述规范的工作流产品,企业应用的实际效果也比较成功,从而进一步刺激了企业工作流管理的热情,使工作流产品显示出良好的发展趋势。
目前已有的商业工作流程引擎有IBMWebSphereProcessServer、BEAAquaLogic、OracleBPELProcessManager、IONAArtixOrchestration等。
开源流程引擎有ApacheOde、ActiveBPEL、JBossjBPM、IntalioBPMS等。
,由此可见国外公司对工作流研究的投入[6]。
在国内,近年来工作流在国内发展相当迅猛,许多公司、科研单位、开源组织和个人均从事工作流的研究和开发工作。
不过,虽然现在很多公司都推出自己的工作流产品,但专注于工作流的比较少。
目前,国内比较专注于工作流的公司和产品有:
西安协同数码的SynchroFlow;上海东兰的LiveFlow;杭州信雅达的SunFlow等。
但从总体来说国内工作流产品还是处于萌芽阶段,其可靠性、稳定性、开放性及标准化方面都还有待加强。
总之,可供选择的符合中国企业实际需求而又遵循标准化的产品实在太少[7]。
1.3研究内容和方法
BPEL引擎的主要功能是提供BPEL流程的部署和运行环境。
对于部署在BPEL引擎上的业务流程,首先解析流程文件生成数据对象结构,然后将数据对象结构序列化并保存。
执行流程的时候,将已保存的数据对象结构反序列化,并根据流程中的结构和活动执行相应的操作,必要时将变量和流程执行状态持久化。
考虑到目前所有的商业流程引擎或开源流程引擎均使用Java或C#(MicrosoftBizTalkServer)实现。
之所以没有使用C++实现的BPEL引擎,主要有三个原因:
第一,一般的电子商务应用,主要是在较底层的ESB上提高性能,而不是处于上层的BPM;第二,各大厂商为了使他们生产的产品系列配套,根据其原有产品基础来设计实现BPEL引擎;第三,开源项目实际上也是各大厂商主导推动,为其产品的改进提供活跃技术支持的,因此采用与其产品相关的结构。
而C++相对其他语言具有性能上的优势,因此采用C++来实现BPEL引擎,进一步提高BPEL引擎的性能。
本文着眼于Web服务集成层如何实现BPEL运行时与外界的通信问题以及流程监控模块如何对流程服务和流程实例进行监控问题。
针对这两个问题,本文提出:
第一,通过Web服务标准C/C++实现ApacheAxis2[8,9]的开源项目WSO2WSF[10],实现一个Axis2集成层,支持BPEL引擎与Web服务交互。
第二,流程信息库、流程实例库采用常用MYSQL实现,方便使用和更新。
流程信息库保存部署在该引擎上的业务流程的详细信息,主要是BPEL流程基本属性和BPEL流程序列化的数据对象结构,提供创建流程实例的模板。
接收到请求消息时,BPEL引擎查询对应的流程信息,反序列化数据对象结构并创建一个流程实例。
流程实例库保存流程实例运行的相关信息,包括流程实例的变量、执行状态等信息,便于实时监控。
1.4本文章节安排
本文共分八章,具体的内容组织如下:
第一章:
绪论。
介绍了课题的研究背景和国内外动态。
第二章:
需求分析。
介绍了项目各模块,特别是流程引擎监控模块和Web服务集成层的功能需求和目标。
第三章:
BPEL引擎的总体设计。
介绍了BPEL引擎的基础理论知识、设计目标和架构设计分析。
第四章:
BPEL引擎的数据库设计。
介绍了BPEL引擎的数据库设计思想与其选择,也介绍了该数据库的各表以及实体关系图。
第五章:
流程引擎监控模块和Web服务集成层模块的设计。
介绍了流程引擎监控模块和Web服务集成层模块的详细设计与实现。
第六章:
流程引擎监控模块和Web服务集成层模块关键代码分析。
第七章:
BPEL引擎原型示例运行结果分析。
介绍了BPEL引擎原型执行示例流程的过程演示和结果分析。
第八章:
总结。
总结了本论文完成工作的特点和一些不足之处。
本文最后是参考文献和致谢。
1.5本章小结
这一章主要介绍了项目的研究背景、意义、国内外研究的现状以及研究内容和方法,最后是本文的章节安排。
第二章需求分析
2.1项目各模块的功能需求和目标
分布式业务流程管理系统包括CORBA消息总线、适配器管理平台、BPEL引擎、BPM统一管理平台四个大模块。
BPEL引擎是整个BPM架构的核心模块,它主要由BPEL编译器、BPEL运行时、数据持久层DAO、集成层IL四个部分组成。
其中BPEL运行时主要由BPEL活动模块和VPU[11]模块组成。
本文作者是负责集成层IL中的Web服务集成层以及BPM统一管理平台的流程监控模块。
系统各功能模块概述如下表2.1:
表2.1系统各功能实现目的概述表
系统模块名称
模块特性描述
CORBA消息总线
传输BPEL引擎之间、BPEL引擎与ESB之间交互的消息,保证消息传输的高性能和高可靠性。
适配器管理平台
支持BPEL引擎与非引擎内部的平台上其他引擎的流程或ESB的服务以及非平台内部的各类外部服务或普通应用进行交互
BPEL引擎
BPEL引擎主要功能是执行业务流程,是BPM架构的核心,其设计好坏、效率高低直接影响到整个BPM的性能高低。
BPM统一管理平台
统一管理平台用于业务流程建模、部署、监控和优化,并且将各个BPEL引擎上的流程以Web服务的方式发布,方便外部调用。
BPEL编译器
BPEL编译器是在流程部署时使用,负责将BPEL部署时的相关资源(BPEL流程文件、描述文件和部署文件等)编译成适合执行的文件。
BPEL运行时
活动
BPEL活动子模块主要实现各个活动执行的具体业务逻辑。
并通过VPU的调度完成这个流程的业务逻辑。
VPU
VPU即VirtualProcessUnit(虚拟处理单元),是BPEL运行时的核心执行调度子模块。
当执行一个活动时,实际上是把这个活动提交到VPU,由VPU统筹调度,调用该活动的run方法以实现真正的执行。
数据持久层DAO
数据持久层负责BPEL运行时和数据存储的交互,数据存储使用关系数据库。
集成层IL
集成层负责BPEL运行时与外界的通信,并为BPEL运行时提供线程调度机制,管理BPEL运行时的生命周期。
2.2流程引擎监控模块的详细功能需求和目标
BPM统一管理平台非承担系统核心的流程执行功能,而是面向用户,需要提供更友好的图形化界面,方便用户使用。
其核心功能包括建模、部署、监控和优化。
其中监控模块主要包括流程监控。
流程监控工具能够查询和修改所有流程实例以及活动变量的各种状态,包括取消、挂起、重新启动等。
如图2.1。
图2.1流程监控模块用例图
查询流程信息:
查询已经部署的流程服务的详细信息,如流程ID、状态等信息。
用户还可以根据流程ID进行模糊查询,来获得想要的流程信息。
查询流程实例信息:
用户可以根据某一流程id来获取其所有的实例的信息,并且以10秒为周期,实时更新显示流程实例的状态。
更改流程状态:
用户可以更改流程服务的状态为active或disactive。
删除流程:
用户可以在流程列表中选中某一个流程进行删除处理。
实例执行分析:
用户进入单个流程的所有流程实例列表界面后,可以获取该流程的所有实例执行情况的统计信息,如成功率、平均执行时间等统计信息。
2.3Web服务集成层的详细功能需求和目标
如图2.2,集成层负责BPEL运行时与外界的通信,并为BPEL运行时提供线程调度机制,管理BPEL运行时的生命周期。
集成层与BPEL运行时的分层设计,可以提高BPEL引擎的扩展性。
只要实现不同的集成层,就可以在不修改BPEL引擎核心模块的情况下,将BPEL引擎扩展到不同的环境中。
Web服务集成层是属于集成层IL,负责BPEL引擎对外部服务和流程服务的调用,实现两者之间的交互。
图2.2Web服务集成层的用例图
部署流程服务:
用户只需提供流程相关的BPEL文件、WSDL文件和services.xml文件就能自动部署该流程服务到本地。
调用流程服务:
只要设置流程服务的终端地址、名空间、流程服务的操作名就能启动该流程服务的逻辑运行,执行BPEL中定义的工作流。
调用外部服务:
只要设置任意外部服务的终端地址、名空间、流程服务的操作名,并设置好该外部服务相应的参数,就能启动该服务的逻辑运行。
2.4本章小结
这一章介绍了项目各模块的功能需求和目标,详细介绍了Web服务集成层和流程监控模块的需求。
流程监控工具面向用户,提供更友好的图形化界面,方便用户使用。
流程监控工具能够查询和修改所有流程实例以及活动变量的各种状态,以及对流程实例的执行情况进行统计。
Web服务集成层是属于集成层IL,负责BPEL引擎对外部服务和流程服务的调用,实现两者之间的交互。
Web服务集成层的另外一大功能是部署流程服务。
第三章BPEL引擎原型的总体设计
3.1BPEL引擎的概要知识
BPEL[12]是Microsoft、IBM,以及BEA等业内主要厂商合作,将IBM的支持图形化的流程描述语言规范WSFL和Microsoft的结构化流程描述语言规范XLAN结合起来,于2002年8月推出的Web服务的业务流程执行语言(BusinessProcessExecutionLanguageforWebService,BPEL)规范,该规范目前已经成为OASIS标准组织维护的Web服务标准。
3.1.1BPEL基本概念
BPEL支持的业务流程能够指定一组Web服务操作的可能执行顺序,这些Web服务间共享的数据、业务流程涉及哪些伙伴以及这些伙伴在业务流程中扮演什么角色,一组Web服务的共同异常处理以及关于多个服务和组织是怎样参与的其他的问题。
为了实现这些功能,BPEL引入了作用域、活动、服务链接、伙伴和服务引用、容器、相关集、异常处理、和消息属性等关键元素。
(1)活动
在BPEL标准定义的各种元素中,BPEL活动用于表示流程的业务逻辑,可分为基础活动和结构化活动两种类型。
基础活动描述流程业务的单个步骤实现,结构化活动则编码控制流逻辑,能递归的包含其他基础活动或者结构化活动。
业务流程的执行实际上是BPEL活动的执行,其他元素只是提供辅助BPEL活动实际执行过程中所需的资源。
根据BPEL标准提供的各种基础活动和结构化活动的多层次嵌套,可以定义任意复杂的业务逻辑,从而实现所需的业务功能。
BPEL引擎对活动的解析和执行效率决定了BPEL引擎的效率。
表3.1BPEL活动描述表
活动分类
活动描述
基础活动
Invoke
Invoke活动用于调用服务提供者提供的Web服务,典型的应用是调用Web服务上的一个操作。
Receive和Reply
Receive和Reply活动用于业务流程为其合作伙伴提供服务。
Receive等待合作伙伴发送请求消息,并根据createInstance属性决定是否创建流程实例。
Reply用于发送响应消息给之前通过Receive活动接收的请求。
Assign
Assign活动用于从一个变量到另一个变量复制数据,或者使用表达式操作变量、属性和常量来构造和插入新的数据,或者在合作伙伴链接之间复制端点引用。
Throw
Throw活动用于显式抛出内部异常。
Wait
Wait活动用于指定一段特定时间的延迟或者直到某个期限到来,当指定时间已过或者某个期限到来时,Wait活动马上结束。
Empty
Empty活动就是并不做任何事
ExtensionActivity
ExtensionActivity活动用于引入BPEL标准未定义的新的活动。
Exit
Exit活动用于立即终止业务流程实例。
Rethrow
Rethrow活动用于异常处理中重新抛出已捕获的异常。
结构活动
Sequence
Sequence活动包含一个或多个按照出现顺序先后执行的子活动,当最后一个子活动执行结束时Sequence活动结束。
If、Elseif、Else
If活动用于选择执行。
While、RepeatUntil
While和RepeatUntil活动都用于循环执行
ForEach
ForEach活动包含一个作用域Scope,多次循环执行该作用域。
Flow
Flow活动提供并发和同步机制。
Flow的子活动并发执行,当所有子活动都结束时Flow才结束。
Pick
Pick活动等待事件集中某个事件的发生,然后执行该事件对应的活动。
(2)合作伙伴链接
在PARTNERLINK元素中,可以通过“myRole”和“partnerRole”属性来定义流程和伙伴的角色。
如果流程作为服务的提供者,需要使用myRole属性,而当流程作为服务的请求者时,则使用partnerRole属性。
partnerLink通过引用partnerLinkType来定义流程与伙伴服务之间的通信接口(实际上是WSDL文档中的PortType)。
伙伴链接类型声明了两个(也可能是多个)服务之间的关系。
服务链接类型定义了一组角色,其中每个角色指明一组PortType,即明确了该角色所提供的服务接口。
partnerLinkType通常被定义在WSDL文档中,被BPEL流程所引用。
(3)变量
变量提供的方式可用于保存组成业务流程状态的消息,所保存的消息往往是已从伙伴那里接受的消息或将被发送给伙伴的消息。
变量可被指定为Invoke,Receive和Reply等活动的输入容器或输出容器,保存在服务间流动的数据消息。
在流程开始的时候,所有的变量都未被初始化,可以通过赋值Assign活动或Receive活动接受消息来初始化变量。
(4)相关集
BPEL提供了声明性机制,以指定服务实例中相关联的操作组。
一组相关标记可定义为相关联的组中所有消息共享的一组特性。
这样的一组特性称为关联集合。
相关集在其所属的作用域的生存期中只能初始化一次。
在初始化之后,它的值就可被认为是业务流程实例的标识别名。
在多方业务协议中,相关集合非常有用。
初始者流程发送启动会话的第一个消息,从而