JBPM之长事务设计解析
来源:互联网 发布:加拿大研究型硕士知乎 编辑:程序博客网 时间:2024/04/29 06:12
JBPM之长事务设计解析
在企业开发中,很多时候我们需要把一些业务数据持久化到数据库中;在数据要求不是很高的场景下,我们可以不用考虑事务的提交和回滚;但是很多时候,我们面临的很多的数据库脚本需要保证要成功就都执行成功,否则就要回滚;特别是在流程运行中提交时,我们需要处理上一个节点的相关数据,同时也要处理提交到得节点的相关数据,我们需要保证这些数据的正确性和一致性,特别是在发生异常时,我们需要回滚所有的操作。今天我们来分析一下JBPM的事务设计。
JBPM数据库长事务处理是通过拦截器和具体的承载数据库脚本的命令完成的,下面分别进行简单的分析(以下分析是针对hibernate事务进行分析,sping和jta事务的原理都是一样的)
拦截器Interceptor
SkipInterceptor:在相应的资源已经初始化后,则直接跳过后边的拦截器直接执行命令脚本;
RetryInterceptor:防止hibernate的乐观并发策略导致命令执行中断,按照设置的时间间隔和
重试最大次数进行重试执行。
EnvironmentInterceptor:根据设置重新构建环境资源或者直接获取已经最在的当前环境资源;
StandardTransactionInterceptor:负责事务的管理;
DefaultCommandService:最终负责调用具体的数据库脚本命令;
脚本命令Command
脚本命令封装完成某个业务功能需要的数据库脚本。
运行机制
配置拦截器使用策略
我们可以在jbpm.tx.hibernate.cfg.xml配置文件中进行设置
<command-service name="txRequiredCommandService">
<skip-interceptor />
<retry-interceptor />
<environment-interceptor />
<standard-transaction-interceptor />
</command-service>
<command-service name="newTxRequiredCommandService">
<retry-interceptor />
<environment-interceptor policy="requiresNew" />
<standard-transaction-interceptor />
</command-service>
解析拦截器配置策略
由CommandServiceBinding解析配置文件中的command-service元素,并生成
对应的CommandServiceDescriptor进行缓存;
初始化拦截器
当我们首次使用或者获取流程引擎中的TaskService等任何一个服务,就会根据拦
截器配置策略进行初始化拦截器;但是初始化后会进行全局缓存,以后不会每次进行
新建初始化;
具体命令执行
- JBPM之长事务设计解析
- JBPM深入解析之变量设计
- JBPM深入解析之变量设计
- jbpm设计活动之state
- jbpm中的设计活动之decision
- jbpm流程设计之fork、join
- JBPM流程部署之部署解析器相关对象扩展
- JBPM流程部署之流程实例迁移解析与扩展
- jBPM开发企业流程应用之安装流程设计器
- JBPM与设计模式之职责链模式
- JBPM与软件架构模式设计之命令模式
- 跟JBPM学习设计模式之简单工厂模式
- 跟JBPM学习设计模式之简单工厂模式
- 跟JBPM学设计模式之工厂方法模式
- 跟JBPM学设计模式之抽象工厂模式
- 跟JBPM学设计模式之建造者模式
- 跟JBPM学设计模式之原型模式
- 跟JBPM学设计模式之适配器模式
- 多媒体工程师职位要求
- WORD损坏打不开修复方法
- 备份集、备份片、映像副本
- FILD和FSTP转换成C语言
- c#解决窗口背景贴图刷新,放大后图像闪烁问题
- JBPM之长事务设计解析
- 通过t4模板结合XML定义文件生成MVVM中的Model Entity Class 代码
- 【Android】ListView与Button的共存问题解决
- STL内容简介(详细内容稍后再补)
- Linux ubuntu lamp安装配置
- Linux 压缩 解压命令 tar, gzip, zcat,bzip2, bzcat,compres
- 《那些年啊,那些事——一个程序员的奋斗史》——07
- Android Location and Maps
- Flex:Flex背景的渐变(二)