从前面的JPDL流程定义语言里我们知道了很多节点都有async属性,当该属性设置为true时表示是异步执行,否则表示同步执行,其默认值为false。通常在同步状态下,在JBPM流程中节点总是在令牌(Token)进入之后被执行,因此,节点在客户端线程中被执行。同步执行要把所有的业务代码执行完成,和流程离开当前节点后进入下面的节点后代码全部执行完成后才能完成整个一个操作过程,所以如果流程中的逻辑比较复杂的话,给我们的感觉就是时间较久,如果是异步则恰恰相反。
在jBPM中,异步执行通过使用一个异步通知系统来实现。当流程执行到达需要异步执行的节点时,jBPM将挂起执行,产生一个命令消息并发送该命令消息到命令执行器,命令执行器是一个单独的组件,在收到的消息之上它将在流程挂起的地方恢复流程执行。事务因此也将由一个被分裂为两个独立的事务,每个事务对应于一部分。这样对于一些在流程中在节点里或Action里需要花费较长时间执行的逻辑代码可以把节点或Action的async的属性打开,设置成异步执行。
在jBPM中,异步执行通过使用一个异步通知系统来实现。当流程执行到达需要异步执行的节点时,jBPM将挂起执行,产生一个命令消息并发送该命令消息到命令执行器,命令执行器是一个单独的组件,在收到的消息之上它将在流程挂起的地方恢复流程执行。事务因此也将由一个被分裂为两个独立的事务,每个事务对应于一部分。这样对于一些在流程中在节点里或Action里需要花费较长时间执行的逻辑代码可以把节点或Action的async的属性打开,设置成异步执行。