java activiti 教程_最近学习工作流 推荐一个activiti 的教程文档「建议收藏」

java activiti 教程_最近学习工作流 推荐一个activiti 的教程文档「建议收藏」异步操作activiti通过事务方式执行流程,可以根据你的需求定制。现在开始看一下activiti通常是如何处理事务的。如果触发了activiti的操作(比如,开始流程,完成任务,触发流程继续执行),activiti会推进流程,直到每个分支都进入等待状态。更抽象的说,它会流程图执行深度优先搜索,如果每个分支都遇到等待状态,就会返回。等待状态是”稍后”需要执行任务,就是说activiti会把…

大家好,又见面了,我是你们的朋友全栈君。

异步操作

activiti通过事务方式执行流程,可以根据你的需求定制。现在开始看一下activiti通常是如何处理事务的。 如果触发了activiti的操作(比如,开始流程,完成任务,触发流程继续执行), activiti会推进流程,直到每个分支都进入等待状态。更抽象的说,它会流程图执行深度优先搜索, 如果每个分支都遇到等待状态,就会返回。等待状态是”稍后”需要执行任务, 就是说activiti会把当前状态保存到数据库中,然后等待下一次触发。 触发可能来自外部,比如用户任务或接收到一个消息,也可能来自activiti本身,比如我们设置了定时器事件。 下面图片展示了这种操作:

5d7bca4cf0c63fc4960725d65a54cbb3.png

我们可以看到包含用户任务,服务任务和定时器事件的流程。完成用户任务,和校验地址是在同一个工作单元中, 所以它们的成功和失败是原子性的。意味着如果服务任务抛出异常,我们要回滚当前事务, 这样流程会退回到用户任务,用户任务就依然在数据库里。 这就是activiti默认的行为。在(1)中应用或客户端线程完成任务。这会执行服务,流程推进,直到遇到一个等待状态, 这里就是定时器(2)。然后它会返回给调用者(3),并提交事务(如果事务是由activiti开启的)。

有的时候,这不是我们想要的。有时我们需要自己控制流程中事务的边界,这样就能把业务逻辑包裹在一起。 这就需要使用异步执行了。参考下面的流程(判断):

ef749718caf4a0999ce3a477a9593ea1.png

这次我们完成了用户任务,生成一个发票,把发票发送给客户。 这次生成发票不在同一个工作单元内了,所以我们不想对用户任务进行回滚,如果生成发票出错了。 所以,我们想让activiti实现的是完成用户任务(1),提交事务,返回给调用者应用。然后在后台的线程中,异步执行生成发票。 后台线程就是activiti的job执行器(其实是一个线程池)周期对数据库的job进行扫描。 所以后面的场景,当我们到达”generate invoice”任务,我们为activiti创建一个稍后执行的job”消息”, 并把它保存到数据库。 job会被job执行器获取并执行。我们也会给本地job执行器一个提醒,告诉它有一个新job,来增加性能。

要想使用这个特性,我们要使用activiti:async=”true”扩展。例子中,服务任务看起来就是这样:

activiti:async可以使用到如下bpmn任务类型中:         task, serviceTask, scriptTask, businessRuleTask, sendTask, receiveTask, userTask, subProcess, callActivity

对于userTask,receiveTask和其他等待装填,异步执行的作用是让开始流程监听器运行在一个单独的线程/事务中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162654.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • axios实现跨域三种方法_cors跨域axios

    axios实现跨域三种方法_cors跨域axios跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。所谓同源是指,域名,协议,端口均相同,浏览器执行js脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。以下举例:(1)http://www.123.com/index.html调用http://www.123.com/server.php(非跨域)(2)…

  • mysql排序字段为空的排在最后面「建议收藏」

    mysql排序字段为空的排在最后面

  • ExtJS学习———–Ext.String,ExtJS对javascript中的String的扩展[通俗易懂]

    ExtJS学习———–Ext.String,ExtJS对javascript中的String的扩展

  • keypad(键盘矩阵)指南

    keypad(键盘矩阵)指南目录keyPad简介API说明示例常见问题相关资料以及开发板购买链接keyPad简介Air724UG支持6X6键盘矩阵,可以在luat二次开发的方式应用,但注意AT版本不支持键盘功能。API说明API接口描述powerKey.setup(longPrd,longCb,shortCb)开机键功能配置常用api_1介绍常用api_2介绍示例1.创建一个tKeypad表,储存所有按键值(16个键盘元素+1个开关机键元素)–每个元素的索引为行列值拼接而成的字符

  • anaconda安装opencv(whl文件)

    anaconda安装opencv(whl文件)我用pipinstall和condainstall的方法都安装不上去,都失败了,找了很多原因都没办法解决。没办法,只能尝试一下用第三方包whl文件安装下,因为原来没有用过这个方法,也不知道难不难,小心的去试了一下,没想到非常的容易!而且清华大学opencvpython库里的whl文件下载速度非常快(几十秒),比我之前在别的地方找的whl文件快多了。没安装上opencv或其他库的小伙伴,…

  • 产品口碑的最重要指标:净推荐值

    产品口碑的最重要指标:净推荐值(梵高)产品和用户需求真正匹配了,才能达成良好的自增长和高留存。很多人对于如何衡量产品是否是好产品方面比较感性,有没有一个比较理性的指标来衡量产品的用户忠诚度?产品净推…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号