基于C++的BPEL流程引擎原型的设计与实现.docx
- 文档编号:28956024
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:64
- 大小:345.08KB
基于C++的BPEL流程引擎原型的设计与实现.docx
《基于C++的BPEL流程引擎原型的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于C++的BPEL流程引擎原型的设计与实现.docx(64页珍藏版)》请在冰豆网上搜索。
基于C++的BPEL流程引擎原型的设计与实现
基于C++的BPEL流程引擎原型的设计与实现
本科毕业设计〔论文〕说明书
基于C++的BPEL流程引擎原型的设计与实现
学院软件学院
专业软件工程
学生姓名
指导教师
提交日期2020年6月3日
华南理工大学
毕业设计〔论文〕任务书
兹发给班学生毕业设计〔论文〕任务书,内容如下:
1.毕业设计〔论文〕题目:
基于C++的BPEL流程引擎原型的设计与实现
2.应完成的项目:
〔1〕2020年4月10日前拟定提纲并提交开题报告
〔2〕2020年5月25日前完成论文初稿
〔3〕进行基于C++的BPEL引擎原型的设计与开发
〔4〕参考外文文献资料并提交外文翻译译文
3.参考资料以及说明:
〔1〕杨开诚.数据结构[M].电子工业出版社.2020(9).
〔2〕JamesGosling,BillJoy,GuySteeleandGiladBracha,
TheJavalanguagespecificationthirdedition[M].Addison-Wesley,2005.
〔3〕StanleyB.Lippman,JoséeLajoie,C++Primer,清华大学出版社2003.
〔4〕杨洪波.BPEL4People思想解读[J].软件世界.2020(11).
〔5〕万露.基于SOA和BPEL的业务流程治理研究与应用[J].
运算机与现代化.2020(8).
〔6〕APACHEODE.:
//ode.apache.org/
〔7〕Jacob.:
//ode.apache.org/jacob.html
〔8〕BoostSerialize.:
//boost.org/
4.本毕业设计〔论文〕任务书于年月日发出,应于年月日前完成,然后提交毕业考试委员会进行答辩。
专业教研组〔系〕、研究所负责人审核年月日
指导教师签发年月日
毕业设计〔论文〕评语:
毕业设计〔论文〕总评成绩:
毕业设计〔论文〕答辩负责人签字:
年月日
摘要
本文详细介绍了BPEL流程引擎以及流程治理系统的理论知识与应用。
由于目前几乎所有BPEL流程引擎核心差不多上基于JAVA语言编写的,与操作系统底层交互程度较低,运行效率相对地下,在大规模应用上存在一定的不足。
而C++语言的要紧特质之一确实是高效,与操作系统底层交互良好。
针对C++语言各自的特点,和目前运算机软件界使用C++开发的流程引擎的空白,进一步提升流程引擎效率,本文提出了基于C++语言的BPEL流程引擎原型设计方案,并对其进行了实现。
流程引擎是运行通过编译的可执行的业务流程语言〔通常是BPEL〕定义文件的核心部分,其要紧三大功能分别是解析业务流程语言定义的活动并运行、支持结构性活动、能够持久化地运行。
而其中如何操纵处理并发活动、如何持久化运行是流程引擎的设计难点。
只有解决了上述两个问题,流程引擎才能真正意义上具备有用价值。
本文先对APACHEODE流程引擎核心〔即JACOB〕作了深入详尽的研究分析,对其处理并发活动所采纳的通信渠道机制和如何处理调度操纵的问题进行了详细说明;然后给出了JAVA语言与C++语言的异同,在此基础上指出使用C++语言开发流程引擎时需要注意的重点,并据此提出了基于C++的使用调用堆栈和BOOST序列化库来实现虚拟处理单元以及整个流程引擎的设计方案和实现。
成品测试说明,使用C++开发BPEL流程引擎是完全可行的,整合了其余组件后能够实现完整的流程治理系统,事实上际运行情形令人中意。
C++在Web时代依旧有着专门强的生命力,使用C++开发的流程引擎应当有宽敞的进展前景。
关键词:
业务流程执行语言,业务流程引擎,虚拟处理单元
Abstract
ThispaperbrieflyintroducethetheoriesandapplicationsaboutBPELprocessengineandBusinessProcessManagementSystems.SincealmostallBPELengineisbasedonJAVAlanguage,whichdonothavegoodperformancewiththeunderlyingoperatingsystemandlowefficiency.Andtheymaycostacertainproblemwhilerunninglarge-scaleapplicationsasaresult.Aslongasweknow,C++isalanguagewiththemaincharacteristicsofhighefficiency,anditmakegoodinteractionwiththeunderlyingoperatingsystem.TofurtherimprovetheefficiencyofprocessengineusingthecharacteristicsofC++language,weputforwardaprojectofBPELprocessengineusingC++language.
ProcessengineisthecorecomponentthatcanexecutecompiledrunnableBPELfiles.ItsthreemainfunctionsareexecuteactivitiesdefinedbyBPEL,PersistenceofexecutionstateandConcurrency.Thereinto,howtoimplementtopersistenceofexecutionstateandhowtocontrolconcurrencyaretwobigproblemswhiledesigningprocessengine.Onlysolvethesetwoproblems,canourenginebeworthiness.
ThisarticlefirstanalyzesAPACHEODEenginecore(thatis,JACOB)indetail,interpretthechannelcommunicationmechanismsofJACOBwhichisusingtosolveconcurrencyproblem.Andthen,showstheimportantpointsofdesigningC++processengineandoursolutionswhichusestackandBoostserializationtodesignVPU,bygivingthesimilaritiesanddifferencebetweenJAVAandC++language.
FinaltestshowedthattheBPELprocessenginedevelopedbyC++isentirelyfeasibleandcaneasilycompletelyarchiveamanagementsystemafterintegratedtheremainingcomponents,whichissatisfied.Asfaraswecanconcern,C++stillhasastrongvitalityintheWebarea,andtheprocessenginebasisonitshouldhavebroadprospectsincommerce.
Keyword:
BPEL,Processengine,VPU
名目
绪论
1.1研究背景和意义
什么是业务流程?
业务流程能够被定义为一个由各种不同功能的活动相连的一组有相互关系的任务,它们依照一定的业务逻辑和顺序依次执行。
业务流程有起点和终点,而且它们差不多上可重复的。
业务流程是企业实现商务目标的方法。
关于企业而言,业务流程是企业重要的知识资产,是企业的核心竞争力的表达,一个精心设计和执行的业务流程能够为企业制造价值并节约成本。
在闻名作家佛里德曼对经济全球化有着杰出的论述,它描画了一个由互联网、通信基础设施和新型软件搭建的全球舞台;在那个舞台上,人们能够以多种方式分享知识、劳动、娱乐和发觉,同时制造新的商业机会。
〝现在沃尔马是美国最大的公司,然而它什么也不生产,只是建立了那个专门的供应环节,从世界各地进口专门廉价的商品……并把世界各地的产品送到消费者手里。
它是一个全球组装线。
〞——«世界是平的:
21世纪简史»[1]。
在经济全球化的过程中,企业的边界变得模糊,企业会将任务分解为一系列的子任务,企业只关注于自己的核心竞争力所在,并将其他工作分包给最合适的人来完成。
企业需要通过业务流程将这些片断有机地组织在一起。
在那个地点我们能够深刻地认识到业务流程对企业的重要性[2]。
信息化产业中由此产生了业务流程治理系统,其核心部分确实是流程引擎。
定义业务流程并对其做出文档所花费的时刻和努力是完全值得的。
在一个反映中国传统医学的电视剧中,当配置药剂的时候,掌柜把自己反锁在药房里,只有他会依照〝秘方〞将不同的药材调配成救死扶伤的灵药。
然而只有他一人把握那个过程是专门危险的。
关于现代企业来说这更是不可能的,我们不可能只让配件制造主任了解企业的配件制造知识,然后让他每晚独自装配所有的零件。
只要定义了配件制造业务流程,配件制造工人能够随时来去,而且任何配件制造工人都能够随时取代另一个人的工作,这是因为工厂里的所有配件制造工人都明白得并遵循业务流程。
我们能够学习、改变、评估,然后再次改变配件制造业务流程,因为该流程关于每个人差不多上可见的,而非局限于配件制造主任。
现代业务流程治理系统的历史能够追溯到工作流系统[2]。
业务流程治理系统是自本世纪初以来企业信息技术应用〔信息化〕背景上最重要和活跃的概念之一。
它有两方面的差不多含义或明白得背景。
一方面是企业治理,一方面是企业应用〔软件、系统〕。
综合而言,它是典型的,在企业应用强力推动下产生的跨治理与信息技术领域的流行概念之一。
从治理的角度,它能够看作是业务流程再造(BPR)所带来的以业务流程为中心的治理思想的连续与进展;从企业应用角度,它是在工作流(Workflow)等技术基础上进展起来的,基于业务流程建模,支持业务流程的分析、建模、模拟、优化、协同与监控等功能的新一代企业应用系统核心。
简单地来讲,工作流定义了业务流程中的参与者(Who)、所执行的工作(What)及何时执行(When)。
在企业IT环境中,工作流软件通常与企业应用集成(EnterpriseApplicationIntegration,EAI)系统结合在一起,成为企业应用的〝黏合剂〞,实现业务流程的自动化和流水线化[2]。
传统工作流系统的最大缺陷确实是:
它们大多采纳了专有技术。
这使得业务流程与企业应用的结合变得专门复杂,通常需要专门长时刻进行部署和实施,而与企业外部系统进行集成那么更加困难,无法适应全球化浪潮和互联网时代对企业灵活、无缝集成的需求。
人们开始考虑利用Web服务的开放性和标准化,来解决业务流程与企业应用之间的互操作性问题。
2002年7月,IBM、微软、BEA提交了BusinessProcessExecutionLanguageforWebServices(BPEL4WS)1.0的规范。
业务流程执行语言基于XML和Web服务技术,它融合了早期的IBM的WebServicesFlowLanguage(WSFL)及微软的XLANG规范的专门多特点。
随后许多要紧供货商如SAP和Siebel(已被Oracle并购)等公司连续加入规范的制定,并催生了多项修改和改进,并于2003年3月公布了1.1版。
2003年4月,BPEL被提交结构化信息标准促进组织(OASIS)以实现标准化,并组建了Web服务业务流程执行语言技术委员会(WSBPELTC),该努力使BPEL在业界获得更为广泛的认可。
目前该技术委员会正在致力于下一代规范的制定工作,并将该规范重命名为WS-BPEL2.0。
尽管除BPEL之外还有一些业务流程规范,然而到目前为止,BPEL是最为成熟和被广泛支持的技术[6,13,14]。
〝万维网其共通之标准让网络的应用软件沟通无碍[1]〞随着全球经济一体化,社会分工更加的细致,业务流程治理系统的应用广度与深度将越来越大。
通过研究、探究其核心部分,有助于提高笔者对新世纪运算机软件技术进展和现代企业软件的认识。
1.2国内外研究现状
目前国外流行的流程引擎要紧有以下几种[15]:
OSWworkFlow:
是完全用java语言编写的开放源代码的工作流引擎,具有显著的灵活性及完全面向有技术背景的用户的特点。
用户能够依照自身的需求利用这款开源软件设计简单或是复杂的工作流。
JBPM:
全称是JavaBusinessProcessManagement〔业务流程治理〕,它是覆盖了业务流程治理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。
JBPM是公布源代码项目,它使用要遵循ApacheLicense,其最大的特色确实是它的商务逻辑定义没有采纳目前的一些规范,如WMC、XPDL、BPML、ebXML、BPEL4WS等,而是采纳了它自己定义的JBossjBPMProcessdefinitionlanguage(jPdl)。
jPdl认为一个商务流程能够被看作是一个UML状态图。
jPdl确实是详细定义了那个状态图的每个部分,如起始、终止状态,状态之间的转换,过图型化的流程定义,直观地描述业务流程。
APACHEODE(OrchestrationDirectorEngine〕:
是基于Java的开源WS-BPEL〔简称BPEL〕引擎,它于2007年7月18日从Apache的孵化器中产生成为一个顶级项目。
它的要紧功能确实是执行使用BPEL描述的业务流程,实现业务流程自动化,它支持长期运行和短期运行的过程。
WebSphereProcessServer基于WebSphereApplicationServer和WebSphereEnterpriseServiceBus,它为面向服务的体系结构(SOA)的模块化应用程序提供了基础,并支持应用业务规那么,以驱动支持业务流程的应用程序。
除此之外还有BEAAquaLogic、OracleBPELProcessManager、IONAArtixOrchestration、ActiveBPEL、IntalioBPMS、MicrosoftBizTalkServer等等。
在国内,要紧是使用上述几个引擎做扩展、应用,研究流程引擎核心的团体、组织、个人专门少。
同时,目前所有的商业流程引擎或开源流程引擎均使用Java或C#实现。
之因此没有使用C++实现的BPEL引擎,要紧有三个缘故:
第一,一样的电子商务应用,要紧是在较底层的ESB上提高性能,而不是处于上层的BPM;第二,各大厂商为了使他们生产的产品系列配套,依照其原有产品基础来设计实现BPEL引擎;第三,开源项目实际上也是各大厂商主导推动,为其产品的改进提供活跃技术支持的,因此采纳与其产品相关的结构。
而C++语言相对其他语言具有性能上的优势,因此本设计将采纳C++语言来实现BPEL引擎,进一步提高BPEL引擎的性能。
1.3应解决的要紧问题及应达到的技术要求
BPEL引擎要紧功能是执行业务流程,是BPM架构的核心,其设计好坏、效率高低直截了当阻碍到整个BPM的性能高低。
[2,16]
BPEL引擎的要紧功能是提供BPEL流程的部署和运行环境。
关于部署在BPEL引擎上的业务流程,第一解析流程文件生成数据对象结构,然后将数据对象结构序列化并储存。
执行流程的时候,将已储存的数据对象结构反序列化,并依照流程中的结构和活动执行相应的操作,必要时将变量和流程执行状态持久化。
执行流程时,BPEL引擎在与服务的交互过程中扮演了两种角色:
服务消费者和服务提供者,区别在于BPEL引擎是作为交互消息的发起者或被发起者。
交互的消息类型有In-Only和In-Out两种,区别在因此否需要返回结果。
实现BPEL引擎时应该注意这些区别。
BPEL引擎的核心——BPEL运行时,在执行流程中需要解决两个要紧的问题:
第一,如何表达流程执行状态,方便需要的时候挂起当前状态,等待重新启动。
专门是关于需要长期运行的流程,假如能够随时将流程当前执行状态通过数据持久化机制挂起储存,那么能够幸免进入长等待时由于显现系统故障而丢失流程执行状态,无法复原。
第二,如何解决流程执行并发性治理问题。
一样来说,创建一个流程实例都应该新建一个线程来执行。
流程本身也支持并发操作flow,常规做法是为流程内的并发操作新建线程执行。
由于流程内并发操作数量不可知,有可能显现线程泛滥甚至系统崩溃[12]。
好的做法应该是将并发性治理建立在每个流程实例占用单个线程的基础之上,幸免创建过多的线程而带来的线程调度对系统性能的阻碍。
1.4本文组织结构
本文第一章介绍了选题的背景和意义。
第二章将阐述与本课题相关的运算机软件知识,提出本课题需要解决的关键问题。
第三章与第四章将说明设计原理并进行方案选择。
其中第三章将详细分析讲解ApacheODE流程引擎的核心部分,第四章将通过对JAVA语言和C++语言的对比说明设计原理并提出方案,阐明选择那个设计方案的理由以及所采纳方案的特点。
第五章与第六章将分点详细论述设计,并进行结果分析。
其中第五章将致力于解决如何表达流程执行状态的问题;第六章将结合第四章详细阐述基于C++的BPEL引擎的设计与实现,致力于解决如何流程执行并发性治理问题。
第七章将对整个研究工作进行归纳和综合,阐述本课题研究中尚存在的问题及进一步开展研究的见解和建议。
第二章BPEL理论概述
2.1BPEL语言理论知识
BPEL全称是业务流程可执行语言,用于描述业务流程。
流程由一系列活动组成;通过作用域定义变量、合作伙伴链接、相关集和事件响应处理逻辑等;通过合作伙伴链接定义与流程交互的其他服务;流程能够是有状态的长时刻运行过程,同时一个流程能够同时存在多个实例,流程引擎通过相关集将一条消息关联到特定的流程实例。
以上是BPEL描述业务流程的差不多情形,下面详细介绍OASIS制定的WS-BPEL2.0标准中定义的各个元素,以便加深大伙儿对BPEL的明白得。
[6,14]
2.1.1BPEL语言的作用域
作用域Scope提供阻碍其内部活动执行结果的上下文环境,包括变量Variable,合作伙伴链接PartnerLink,消息交互MessageExchange,相关集CorrelationSet,事件处理EventHandler,专门处理FaultHandler,补偿处理CompensationHandler和终止处理TerminationHandler。
作用域上下文环境能够多层次嵌套,父作用域中定义的环境在子作用域中可见。
每个流程的根节点Process实际上确实是一个顶层作用域。
Process和Scope语法上是一致的,然而他们有以下三点区别:
Scope是一个活动而Process不是,活动的标准属性和成员在Process中不适用;Scope中包含补偿处理和终止处理而Process中不承诺包含;Scope中特有的isolated隔离属性在Process中不适用。
尽管Process和Scope有所区别,但BPEL引擎中对他们的处理差不多上是一致的,能够认为Process是一个专门的Scope。
每个Scope都包含一个主活动,定义该作用域的业务逻辑,那个活动能够是一个复杂的拥有任意层次嵌套的结构化活动。
其他上下文环境相关成员是可选的。
BPEL对Scope的处理效率由主活动的处理效率决定。
2.1.2BPEL活动的标准属性和成员
在BPEL标准定义的各种元素中,BPEL活动用于表示流程的业务逻辑,可分为基础活动和结构化活动两种类型。
基础活动描述流程业务的单个步骤实现,结构化活动那么编码操纵流逻辑,能递归的包含其他基础活动或者结构化活动。
业务流程的执行实际上是BPEL活动的执行,其他元素只是提供辅助BPEL活动实际执行过程中所需的资源。
依照BPEL标准提供的各种基础活动和结构化活动的多层次嵌套,能够定义任意复杂的业务逻辑,从而实现所需的业务功能。
BPEL引擎对活动的解析和执行效率决定了BPEL引擎的效率。
每个活动都包含两个标准的可选属性,name和suppressJoinFailure。
name属性指定流程中各个活动的机器可读的命名,用于区分不同的活动。
suppressJoinFailure是在并发处理的Flow活动执行中定义是否屏蔽接合活动专门,具体详见Flow活动。
每个活动都包含两个可选容器,sources和targets,分别储备标准成员source和target。
source和target用于通过Flow活动中的Link元素确定并发处理的活动的同步关系,每个Link对应一个source活动和一个target活动,规定了在source活动执行终止之后,才承诺target活动开始执行,保证了并发执行的活动中部分活动的同步关系。
具体详见Flow活动中的Link元素。
2.1.3BPEL基础活动
(1)Invoke——调用Web服务操作
Invoke活动用于调用服务提供者提供的Web服务,典型的应用是调用Web服务上的一个操作。
Invoke能够在其补偿处理和专门处理中内联其他的活动。
依照WSDL文件的定义,操作能够是要求响应或者单向调用。
BPEL标准对两种方式的调用使用相同的语法,单向调用方式只需提供输入变量或者输入输出变量都不提供,而要求响应方式需要同时提供输入变量和输出变量。
(2)Receive和Reply——提供Web服务操作
Receive和Reply活动用于业务流程为其合作伙伴提供服务。
Receive等待合作伙伴发送要求消息,并依照createInstance属性决定是否创建流程实例。
流程启动活动包括Receive和Pick两种,流程必须以启动活动开始,其他活动操纵依靠于启动活动,否那么流程将无法执行。
Receive是一个堵塞活动,只有流程实例接收到一个匹配的消息该活动才会终止。
Reply用于发送响应消息给之前通过Receive活动等接收的要求。
这种响应只对要求响应交互方式有意义。
(3)Assign——更新变量和合作伙伴链接
Assign活动用于从一个变量到另一个变量复制数据,或者使用表达式操作变量、属性和常量来构造和插入新的数据,或者在合作伙伴链接之间复制端点引用。
(4)Throw——抛出内部专门
Throw活动用于显式抛出内部专门。
Throw必须提供专门的名称,可选的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 C+ BPEL 流程 引擎 原型 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)