zoukankan      html  css  js  c++  java
  • activiti源码分析学习

    activiti源码分析学习导语

    目前项目中用activiti来做工作流的相关工作,最近遇到一些情况下,公司二次开发的流程图渲染出现了问题,会造成流程图出不来的情况。初步分析数据库中记录以及简单的代码跟踪,发现绘制流程路线图时,是按to_number(id_)来进行排序,预期是先发生的行为它的id_字段一定小。

    select * from act_hi_actinst order by to_number(id_);

    但是跟踪时候,发现明明后发生的行为,但是id_字段值却还更小:

    image

    于是觉得是IdGenerator那边生成记录主键的时候出问题了,但是还不确定,于是决定去看看源码。没想到,一看源码才知道,人家根本就不是实施入库,而是对每个command,进行session缓存,之后flush()一起入库。由此,有了更进一步探知它的内部实现的欲望。

    源码分析

    首先推荐网上文章:activiti-engine源码分析

    作者的水平很好,在讲解内容的时候加入了对于面向对象编程、对于设计模式、对于团队工作等的理解,内容解说图文结合,感觉比较到位。

    后续的内容只是一些细节的补充。

    CommandIntercepter命令拦截器链

    命令拦截器,它实际上扮演的是“命令模式”中的Invoker-即请求者角色。

    对使用StandaloneProcessEngineConfiguration配置实现的情况,默认生成以下的拦截器链:

    LogInterceptor >> CommandContextInterceptor >> CommandInvoker

    其中:

    • LogInterceptor就是简单的记录日志;
    • CommandContextInterceptor事前添加命令上下文,事后控制关闭session;
    • CommandInvoker负责执行具体命令;

    对使用JtaProcessEngineConfiguration配置实现的情况,默认会添加事物拦截器:

    LogInterceptor >> CommandContextInterceptor >> JtaTransactionInterceptor >> CommandInvoker

    其中,JtaTransactionInterceptor用于实现JTA事物,依赖于JTA的具体实现。

    持久层mybatis的statement规则

    1.持久层的实体必须以Entity结尾,它的命名在后续会有使用到;

    2.mybatis中对statement命名遵循以下命名约束(假定对Property对象):

    • insertModelName 插入一条记录
    • updateModelName 更新一条记录
    • selectModelName 选择一条记录
    • selectModelNameCountsByCriteria 对单表进行过滤查询,返回记录数
    • selectModelNamesByCriteria对单边进行过滤查询,返回详细记录

    在持久层构造SQL过程中,用到一些内容的说明:

    • ModelNameEntity 模型对象;
    • ModelNameEntityManager 封装对模型的数据库操作;
    • ModelNameQueryImpl不一定存在,如果存在,则是对查询的条件过滤;它的设计上类似JQuery的连续命名模式,目前crateria基本上都是这种实现。
    • DbSqlSessionFactory用于获取DbSqlSession,维护所有statement并提供获取statement的实现;
    • DbSqlSession执行具体的操作。
  • 相关阅读:
    Linux设备驱动第六篇:高级字符驱动操作之iotcl
    Stack的三种含义
    用vs2013+velt-0.1.4进行嵌入式开发 进行海思平台 UBOOT 开发
    学会思考技术背后的那些思想和本质
    Rails 4.0.0 开发环境一切正常,到生成环境发现 无法找到 css 和 js
    一加手机,迟到的惊喜
    附近的人计算方法-----使用mysql脚本计算方法
    如何将Superset嵌入后台系统之实践
    这里是纯干货!2018年深度学习的10个发展预测
    这里是纯干货!2018年深度学习的10个发展预测
  • 原文地址:https://www.cnblogs.com/huntdream/p/6008002.html
Copyright © 2011-2022 走看看