,比如用户任务或接收到一个消息,也可能来自Activiti本身(定时器事件)
流程包含用户任务,服务任务和定时器事件
完成用户任务和校验地址是在同一个工作单元中,两者的成功和失败是原子性的....意味着如果服务任务抛出异常,要回滚当前事务,这样流程会退回到用户任务,用户任务就依然在数据库里
这就是activiti默认的行为.在(1)中应用或客户端线程完成任务.这会执行服务,流程推进,直到遇到一个等待状态...,生成一个发票,把发票发送给客户
生成发票不在同一个工作单元内了.如果生成发票出错不需要对用户任务进行回滚
Activiti实现的是完成用户任务(1),提交事务,返回给调用者应用.然后在后台的线程中...会保证无论什么时候获取一个流程实例的排他任务,都会把同一个流程实例的其他任务都取出来,放在同一个工作线程中执行.保证job是顺序执行的
从activiti 5.9开始,排他任务已经是默认配置.所以异步执行和定时器事件默认都是排他任务...:
在高负载的情况下性能是个问题,高负载意味着JobExecutor的所有工作线程都一直在忙碌着
使用排他任务,Activiti可以简单的分布不同的负载.排他任务意味着同一个流程实例的异步执行会由相同的线程顺序执行