【07】Camunda7-数据模块(DB)源码分析

Camunda引擎的数据库相关操作均基于db模块实现,该模块的代码结构如下。

Entitymanger

Entitymanger主要包含DbEntityManager、DbEntityManagerFactory两个类,并定义了3个接口。.

DbEntityManager

(一)成员变量

DbEntityManager定义了如下主要成员变量:

// 乐观锁监听器
protected List<OptimisticLockingListener> optimisticLockingListeners;
// ID生成器(详见后续章节)
protected IdGenerator idGenerator;
// 数据库实体缓存(详见后续章节)
  protected DbEntityCache dbEntityCache;
// 数据库操作管理器(详见后续章节)
  protected DbOperationManager dbOperationManager;
// 持久性回话接口,抽象定义了Entity Operations、Schema Operations、listeners
  protected PersistenceSession persistenceSession;

其中,PersistenceSession是一个Session接口,抽象定义了Entity Operations、Schema Operations和listeners。

(二)成员方法

  • 提供多个重载的列表查询、单个查询、按ID查询方法
    • selectById优先查缓存(dbEntityCache),若不存则查数据库
    • 当需要访问数据库查询时,均通过PersistenceSession的实现类DbSqlSession实现具体的数据库查询操作,关于DbSqlSession后文再做详细介绍。
  • 基于dbEntityCache成员变量,提供针对缓存的写入、删除/撤销删除、强制更新、查询、刷新以及合并方法
  • Lock
  • Flush:刷新实体缓存,将操作插入到 DB Operations Manager,并刷新dbOperationManager,其本质最终也是基于DbSqlSession实现具体的数据库操作;
  • handleConcurrentModification,确定是否可以容忍并发修改失败的操作,或者是否应引发OptimisticLockingException
  • canIgnoreHistoryModificationFailure,确定是否可以忽略对Historic实体执行失败的数据库操作(OptimisticLockingException)
  • Query Factory Methods,提供DeploymentQueryImpl、ProcessDefinitionQueryImpl、ProcessInstanceQueryImpl、ExecutionQueryImpl、TaskQueryImpl、JobQueryImpl、HistoricProcessInstanceQueryImpl、HistoricActivityInstanceQueryImpl、HistoricTaskInstanceQueryImpl、HistoricDetailQueryImpl等

DbEntityManagerFactory

DbEntityManagerFactory用于实例化DbEntityManager。

Entitymanger.cache

org.camunda.bpm.engine.impl.db.entitymanager.cache的核心服务是DbEntityCache。

DbEntityCache是一个针对DbEntity Entities的单级缓存,主要包含cachedEntity、cacheKeyMapping以及缓存操作方法,同时该模块还定义了DbEntityState:

  • cachedEntity即缓存本身:其将实体类型(class)按 id(主键)映射到索引。Camunda引起按类型(class)索引的原因是,一方面不同类型的多个实体可以具有相同的值作为主键。在流程引擎中,TaskEntity 和 HistoricTaskEntity 具有相同的id值,另一方面为了性能;
  • cacheKeyMapping在Entitymanger实例化时创建,无特殊配置情况下,使用默认的mapping,具体如下:

DbEntityCacheKeyMapping为DbEntityCache提供用于组织不同DbEntity类型的键。特别是对于多态类型,重要的是它们可以在缓存中的一个公共键下访问,以便使用超类或子类查询缓存时都返回缓存的实体。

DbEntityState定义了DbEntity的几种状态:

State

说明

TRANSIENT

  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值