事件子流程也可以添加成内嵌子流程.如果添加为内嵌子流程,其实是边界事件的一种替代方案
示例: 下面两个流程图,两种情况内嵌子流程会抛出一个错误事件,两种情况错误都会被捕获并使用一个用户任务处理 相对于 两种场景都会执行相同的任务,但是两种建模的方式是不同的: 内嵌子流程是使用与执行作用域宿主相同的流程执行的: 意思是内嵌子流程可以访问它作用域内的内部变量 当使用边界事件时,执行内嵌子流程的流程会删除, 并生成一个流程根据边界事件的顺序流继续执行,这意味着内嵌子流程创建的变量不再起作用 当使用事件子流程时,事件是完全由它添加的子流程处理的. 当使用边界事件时,事件由父流程处理 这两个不同点可以帮助决定是使用边界事件(内嵌子流程)还是内嵌事件子流程(事件子流程) 来解决特定的流程建模或者实现问题 事务子流程 描述 事务子流程是内嵌子流程, 可以用来把多个流程放到一个事务里 事务是一个逻辑单元, 可以把一些单独的节点放在一起, 这样它们就可以一起成功或一起失败 事务的可能结果有三种: 事务成功,没有取消也没有因为问题终结 如果事务子流程是成功的,就会使用外出顺序流继续执行 如果流程后来抛出了一个补偿事件,成功的事务可能被补偿 和普通内嵌子流程一样,事务可能在成功后,使用中间补偿事件进行补偿 事务取消,流程到达取消结束事件 所有流程都会终结和删除,触发补偿的一个单独的流程,会通过取消边界事件继续执行 在补偿完成之后,事务子流程会使用取消边界事务的外出顺序流向下执行 事务被问题结束,抛出一个错误事件而且没有在事务子流程中捕获(如果错误被事务子流程的边界事件处理了,也会这样应用) 不会执行补偿 事务三种不同的结果: BPMN事务与ACID(技术)事务的关系: BPMN事务子流程与技术(ACID)事务不能互相混淆,BPMN事务子流程不是技术(ACID)事务领域的 BPMN事务和技术事务有以下不同点: ACID事务一般是短期的.BPMN事务可能持续几小时,几天,甚至几个月才能完成: 考虑事务中包含的节点可能有用户任务,一般人员响应的时间比应用时间要长 在其他情况下,bpmn事务可能要等待发生一些事务事件,例如要根据某种次序执行 这种操作通常要相比更新数据库的一条数据,或把一条信息保存到事务性队列中,消耗更长的时间来完成 BPMN事务一般要跨越多个ACID事务,因为不能在整个业务节点的过程中保持一个技术性的事务 BPMN事务会跨越多个ACID事务,所以会丧失ACID的特性: 比如,在上述例子中,假设预订旅店和刷信用卡操作在单独的ACID事务中执行,假设预定旅店节点已经成功了 现在处于一个中间不稳定状态,因为我们预定了酒店,但是还没有刷信用卡 在一个ACID事务中,要依次执行不同的操作,也会有一个中间不稳定状态 不同的是,这个中间状态对事务的外部是可见的.比如,如果通过外部预定服务进行了预定,其他使用相同预定服务的部分就可以看到旅店被预定了.这意味着实现业务事务时,我们完全失去了隔离属性(放弃隔离性,可以为ACID事务获得更高的并发,是可以完全控制,中间不稳定状态也只持续很短的时间) BPMN业务事务也不能使用通常的方式回滚: BPMN事务跨越了多个事务,BPMN事务取消时一些ACID事务可能已经提交了.这时不能被回滚 BPMN事务运行时间很长,缺乏隔离性和回滚机制都需要被区别对待: 使用补偿执行回滚: 如果事务范围抛出了取消事件,会影响已经执行成功的节点,并使用补偿处理器执行补偿 隔离性的缺乏通常使用特定领域的解决方法来解决: 在上面的例子中,一个旅店房间可能会展示给第二个客户,在我们确认第一个客户付费之前.虽然这可能与业务预期不符,预定服务可能选择允许一些过度的预约 事务会因为风险而中断,服务必须处理这种情况: 已经预定了旅店,但是一直没有付款的情况(因为事务被中断了),这时预定服务需要选择一个策略,在旅店房间预定超过最大允许时间后,如果还没有付款,预定就会取消 综上所述,ACID处理的是通常问题:回滚,隔离级别和启发式结果,在实现业务事务时,需要找到特定领域的解决方案来处理这些问题 BPMN事务目前的限制: BPMN规范要求流程引擎能根据底层事务的协议处理事件: 比如如果底层协议触发了取消事件,事务就会取消 ACID事务顶层的一致性和优化并发: BPMN事务保证一致性: 要么所有节点都成功 一些节点成功,对其他成功的节点进行补偿 无论哪种方式,都会有一致性的结果 要讨论一些activiti内部的情况BPMN事务的一致性模型是叠加在流程的一致性模型之上的 Activiti执行流程是事务性的,并发使用了乐观锁.在Activiti中,BPMN错误,取消和补偿事件都建立在同样的ACID事务与乐观锁之上: 取消结束事件只能触发它实际到达的补偿 如果之前服务任务抛出了未嵌入式工作流程开发!工作流 Activiti 框架中子流程的使用指南
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。