Flowable用了mybatis组件,又实现了自己的command和interceptor机制。具体是怎么实现的呢?

我们以Deployment操作为例,来看看它的调用链
flowable工作流的DB访问实现
调用端是Service接口, 它委托自己的commandExecutor去执行具体的Command. Command最终会调用到EntityManager,然后委托给ibatis的sqlsession来完成操作。

其中CommandExcutor调用command的地方有些复杂,我们展开看:
flowable工作流的DB访问实现
CommandExecutor会维护一系列的interceptor, 这些interceptor会包含着最终的command对象,在其前后做一些操作:比如日志,事务,flush等。command对象会调用DbSqlSession将insert,update,delete操作保存到列表里,最终的入库时点是在CommandContextInterceptor执行完毕时,会去flush。

EntityManager也是db模块中比较复杂的部分,其类图如下:

flowable工作流的DB访问实现
我们可以看出最终的操作是落脚到了ibatis的SqlSession类。

相关文章: