????? 工作流系统的每个流程实例,从创建到结束,都有一个较长的过程。流程实例的执行过程可能立即执行,也可能较长时间的等候处理。当处理过程中出现异常或者故障时候,流程需要回滚,并保持流程和业务的同步回滚,不至于业务和流程不同步,或流程本身的轨迹发生紊乱。因此需要在工作流系统中引入事务处理机制。
?
事务的属性有四种Atomicity, Consistency, Isolation, Durability,简称ACID。
-
Atomicity 原子 要么是所有的事务操作都成功完成,要么是所有的事务操作都没完成。
Consistency 一致 当事务开始和结束的时候,涉及事务的资源都必须处于合法的状态。事务不能违返完整性约束或业务规则。
Isolation 独立 事务内的操作独立于其他所有操作。事务外的操作都看不到处于中间状态的数据。
Durability 持久 事务一旦成功完成,影响就是持久的,且无法撤消。
工作流引擎在执行每个流程实例时,通常是将流程分成一个环节一个环节的执行,各环节通过提交动作来完成本环节,并使流程流转到下一环节,每个环节的一次执行动作的过程就是一个流程的短事务处理过程。一个工作流实例运行的生命周期由多个这样的短事务组成。多个流程的短事务保证了流程的长事务一致性。
?
无论是流程的短事务还是流程的长事务,都应该具有事务的那4种属性。
?
在eworkflow工作流系统中,一个流程实例的生命周期中会包含多个短事务,由多个短事务保证流程的长事务。
?
短事务采用了数据库的事务处理,在每个动作的提交之初,启动流程的事务,执行流程的动作提交,同时提交涉及的业务数据,待都提交完成后,提交数据库的事务,将数据持久化入数据库。在动作执行的过程中,一旦有异常抛出,即回滚数据库事务,流程数据和业务数据均回滚到动作提交之初,达到事务的原子性一致性。
?
当流程的短事务人为的回滚时,即执行自由流,回退流的时候,流程的长事务通常需要辅助“业务补偿类”来达到数据的一致性。
?
?
?
?
?
?
相关链接:
?
?
?