您好,欢迎访问三七文档
第3章BPMN2.03.1.BPMN2.0是什么呢?业务流程模型注解(BusinessProcessModelingNotation-BPMN)是业务流程模型的一种标准图形注解。这个标准是由对象管理组(ObjectManagementGroup-OMG)维护的。基本上,BPMN规范定义了任务看起来怎样的,哪些结构可以与其他进行连接,等等。这就意味着意思不会被误解。标准的早期版本(1.2版以及之前)仅仅限制在模型上,目标是在所有的利益相关者之间形成通用的理解,在文档,讨论和实现业务流程之上。BPMN标准证明了它自己,现在市场上许多建模工具都使用了BPMN标准中的元素和结构。实际上,现在的jPDL设计器也使用了BPMN元素。BPMN规范的2.0版本,当前已经处于最终阶段了,已经计划不就就会完成,允许添加精确的技术细节在BPMN的图形和元素中,同时制定BPMN元素的执行语法。通过使用XML语言来指定业务流程的可执行语法,BPMN规范已经演变为业务流程的语言,可以执行在任何兼容BPMN2的流程引擎中,同时依然可以使用强大的图形注解。3.2.历史和目标jBPMBPMN2的实现是在jBPM4.0发布之后在2009年8月,在与社区进行了紧密协作之后启动的。而后,我们决定了第一个发布版(比如,文档/QA)涉及一部分BPMN2规范,将在jBPM4.3发布。我们的目标是建立一个原生BPMN2运行引擎(或者说实现'可执行的BPMN2')基于流程虚拟机(ProcessVirtualMachine-PVM)。注意,这个版本的主要目标是原生可执行,不是图形注解-但是我们清楚对于未来的版本是很重要的。如果用户已经了解了jBPM,就会发现l配置结构保持不变lAPI与已经存在的完全一样或者很类似l测试BPMN2流程也可以使用常用的java测试框架l数据库表结构保持不变所以,总体来说,我们的主要目标是保持所有在jBPM上好的事情,加强它们,使用一个标准的流程语言。3.3.JPDLvsBPMN2.0第一个问题可能是,很正当的,映入脑海的是,为什么已经有了jPDL还要实现BPMN2。它们两个语言的目标都是定义可执行的业务流程。从高层次来看,两个语言是等效的。主要的区别是BPMN2是“厂商中立”的,你可以使用标准,而jPDL是绑定在jBPM上的(虽然会有一些争论绑定在开源语言厂商比如jPDL和绑定在闭源产品)。在jBPM中,两个语言实现都是建立在jBPM流程虚拟机上的(PVM)。这意味着两个语言共享通用功能(持久化,事务,配置,也有基本流程结构,等等)。结果就是,对jBPM核心的优化会对两个语言有益。依靠PVM,BPMN2实现建立在基础上,已经在过去证明了它自己,并拥有了很大的最终用户社区。当执行语言,把它们相互比较的时候,下面几点必须纳入考虑:lBPMN2是基于被BPM工业接受的一个标准。lBPMN2是与实现无关的。这一点的缺点是集成java技术jPDL总会更早。所以,从java开发者的角度,jPDL更简单,感觉更自然(一些BPEL/WSDL的“层次”也在BPMN中)。ljPDL的一个目标是XML可读,BPMN2流程在一定程度上也是可读的,但是工具和更多规范的细节会要求实现同等级的生产力。ljava开发者可以很快学会jPDL,因为他们很了解jPDL语言,会发现实用工具有时候很麻烦,语言本身也过于复杂了。lBPMN2包含一个很大的描述结构的集合,在规范中。然而,对接口代码的绑定在规范中是开放的(与XPDL相比),即使WSDL通常会被默认使用。这意味着流程的可移植性丧失了,当我们把流程移植到一个引擎上,而这个引擎不支持同样的绑定机制。比如,调用java类通常是jBPM的默认实现的绑定方式。很自然的,因为政治原因,BPMN2规范发展的会比较慢。jPDL就可以快速变化,和新技术进行集成,当他们发布的时候,与BPMN2相比可以加快步伐进行演化。当然,因为两个都建立在同一个PVM上,jPDL中的逻辑也可以一直到BPMN2上,作为一个扩展,不会出现很多麻烦。3.4.Bpmn2.0执行BPMN2规范定义了非常丰富的语言,为建模和执行业务流程。然而,也意味着它非常困难总览BPMN2可能是怎样为了简化这种情况,我们决定把BPMN2结构分为三个等级。区分的方式主要基于BruceSilver写的'BPMNmethodandStyle'这本书(http://www.bpmnstyle.com/),Dr.Jim第3章BPMN2.0上一页下一页页码,1/16第3章BPMN2.02010-2-3http://learn.family168.com/tutorial/jbpm4devguide/html/bpmn2.htmlArlow的培训资料(http://www.slideshare.net/jimarlow/introductiontobpmn005),'HowmuchBPMNdoyouneed'(http://www.bpm-research.com/2008/03/03/how-much-bpmn-do-you-need/),和我们自己的经验。我们定义了三种BPMN2结构分类:l基本:这个分类的结构很直接并且容易了解。这个分类的结构可以用来为简单的业务流程建模。l高级:包含更强大或更复杂的结构,这些都提高了建模和执行语法的学习曲线。业务流程的主要目标是使用这个和之前的分类来实现结构。l复杂:这个分类的结构用来实现罕见的情况,或者它们的语法难以理解。3.5.配置在你的应用中使用BPMN2.0是很简单的:只要把下面一行加入jbpm.cfg.xml文件。importresource=jbpm.bpmn.cfg.xml/这里的引用会启用BPMN2.0的流程发布,通过把BPMN2.0发布器安装到流程引擎中。注意流程引擎可以同时使用jPDL和BPMN2.0流程。这意味着在你的应用里,一些流程可能是jPDL,其他的可能是BPMN2.0。流程引擎是根据定义文件的后缀来区分流程定义的。对于BPMN2.0,使用*.bpmn.xml后缀(jPDL使用*.jpdl.xml后缀)。3.6.实例发布中包含的例子也包含了下面章节中讨论的每个结构的实例。查看BPMN2.0的流程实例和测试用例,在org.jbpm.examples.bpmn.*包下。参考用户指南,第二章(安装),研究一下如何导入实例。查看章节'导入实例'。3.7.流程根元素一个BPMN2.0XML流程的根是definitions元素。在命名状态,子元素会包含真正的业务流程定义。每个process子元素可以拥有一个id和name。一个空的BPMN2.0业务流程看起来像下面这样。也要注意把BPMN2.xsd放在classpath下,来启用XML自动补全。definitionsid=myProcessesxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexsi:schemaLocation=http://schema.omg.org/spec/BPMN/2.0BPMN20.xsdxmlns=http://schema.omg.org/spec/BPMN/2.0typeLanguage=http://www.w3.org/2001/XMLSchemaexpressionLanguage=http://www.w3.org/1999/XPathtargetNamespace=http://jbpm.org/example/bpmn2processid=myBusinessProcessname=Mybusinessprocesss.../processdefinitions如果一个process元素定义了id,它会作为业务流程的key使用(比如,启动流程可以通过调用executionService.startProcessInstanceByKey(myBusinessProcess),否则jBPM引擎会创建一个唯一流程key(与jPDL相同)。3.8.基本结构3.8.1.事件与活动和网关一起,事件用来在实际的每个业务流程中。事件让业务建模工具用很自然的方式描述业务流程,比如'当我接收到客户的订单,这个流程就启动','如果两天内任务没结束,就终止流程'或者'当我收到一封取消邮件,当流程在运行时,使用子流程处理邮件'。注意典型的业务通常使用这种事件驱动的方式。人们不会硬编码顺序创建,但是他们倾向于使用在他们的环境中发生的事情(比如,事件)。在BPMN规范中,描述了很多事件类型,为了覆盖可能的事情,在业务环境中可能出现的情况。3.8.2.事件:空启动事件一个启动事件说明了流程的开始(或子流程)。图形形式,它看起来是一个圆(可能)内部有一个小图标。图标指定了事件的实际类型会在流程实例创建时被触发。页码,2/16第3章BPMN2.02010-2-3http://learn.family168.com/tutorial/jbpm4devguide/html/bpmn2.html空启动事件画出来是一个圆,内部没有图标,意思是这个触发器是未知或者未指定的。jPDL的开始活动基本是一样的语法。流程实例的流程定义包含一个空启动事件,可以使用executionService的API调用创建。一个空开始事件像下面这样定义。id是必填的,name是可选的。startEventid=startname=myStart/3.8.3.事件:空结束事件结束事件指定了流程实例中一个流程路径的结束。图形上,它看起来就是一个圆拥有厚边框(可能)内部有小图标。图标指定了结束的时候会执行哪种操作。空结束事件画出来是一个圆,拥有厚边框,内部没有图标,这意味着当流程到达事件时,不会抛出任何信号。jPDL中的结束事件与空结束事件语义相同。空结束事件可以像下面一样定义,id是必填的,name是可选的。endEventid=endname=myEnd/下面的例子显示了只使用空开始和结束事件的流程:这个流程对应的可执行XML像这样(忽略声明用的definitions根元素)processid=noneStartEndEventname=BPMN2ExamplenonestartandendeventstartEventid=start/sequenceFlowid=flow1name=fromStartToEndsourceRef=starttargetRef=end/endEventid=endname=End//process现在可以通过调用startProcessInstanceXXX操作,创建一个流程实例。ProcessInstanceprocessInstance=executionService.startProcessInstanceByKey(noneStartEndEvent);3.8.4.事件:终止结束事件终止和空结束事件的区别是实际中流程的路径是如何处理的(或者使用BPMN2.0的术语叫做token)。终止结束事件会结束整个流程实例,而空结束事件只会结束当前流程路径。他们都不会抛出任何事情当到达结束事件的时候。一个终止结束事件可以像下面定义。id是必填的,name是可选的。endEventid=terminateEndname=myTerminateEndterminateEventDefinition//endEvent终止结束事件被描绘成结束事件一样(圆,厚边框),内部图标时一个完整的圆。在下面的例子中,完成task1会结束流程实例,当完成task2时只会结束到达结束事件的流程路径,只剩下task1打开。页码,3/16第3章BPMN2.02010-2-3http://learn.family168.com/tutorial/jbpm4devguide/html/bpmn2.html参考jBPM发布包中的实例,单元测试和业务流程对应XML。3.8.5.顺序流顺序流是事
本文标题:3BPMN 20
链接地址:https://www.777doc.com/doc-1864 .html