Activiti7.0进阶学习(五):Activiti在执行complete操作时发生了什么?

背景

  1. 在activiti中,每个节点(user task)都可以理解为activity。 那这个activity是怎么执行的?也可以理解为程序代码在执行complete时,发生了什么?
  2. 什么又是 Asynchronous Continuations?
  3. 为什么需要Asynchronous Continuations?

过程

  • complete
    Activiti7.0进阶学习(五):Activiti在执行complete操作时发生了什么?
  1. 流程进入到activity时,"TAKE"监听器就会被调用。
  2. activity自己调用"START"监听器。
  3. activity的行为将会被执行。
  4. 当activiy的行为执行完成后。"END"监听器将会被activity调用。
  5. 流程离开activity时,"TAKE"监听器会被调用。
  • Asynchronous Continuations 理解
  1. 一个activity执行过程中,上述的5个步骤,都是丢给job executor线程池执行的。但是都是连续的,都是上个监听器执行完成后,下一个监听器又开始执行,他们虽然是异步执行的,但是都是连续的,理解起来,就是针对同一个activity的同步操作。

  2. 还有一种情况就是如下图所示这样。流程定义图上有多个节点。当taskService.complete(id)执行完成后,相关数据其实已经持久化到数据中了。后续的Generate invoice 和 Send invoice to customer都是在taskService.complete(id)执行之后,必须要执行的,而且这个异步操作一定是上一个事务的延续。因为上一个事务已经提交了,数据库持久化了数据,因此能够保证后续的事务一定是没有任何问题的。

  • 为什么需要Asynchronous Continuations?
    Activiti7.0进阶学习(五):Activiti在执行complete操作时发生了什么?
    就是上一个异步中的事务一定是发生在下一个事务之前的。并且,上一个事务是提交了的,数据库持久化了数据。把业务逻辑丢到异步中执行,但是前后保证了异步的延续性。
  • 异步延续性,一定是Job executor执行的。

小结

  1. 理解activity的工作过程。

  2. 理解设计Asynchronous Continuations意义。

  3. 知道Asynchronous Continuations的相关逻辑都是在job executor中执行的。