zoukankan      html  css  js  c++  java
  • JBPM之长事务设计解析

    JBPM之长事务设计解析

     

           在企业开发中,很多时候我们需要把一些业务数据持久化到数据库中;在数据要求不是很高的场景下,我们可以不用考虑事务的提交和回滚;但是很多时候,我们面临的很多的数据库脚本需要保证要成功就都执行成功,否则就要回滚;特别是在流程运行中提交时,我们需要处理上一个节点的相关数据,同时也要处理提交到得节点的相关数据,我们需要保证这些数据的正确性和一致性,特别是在发生异常时,我们需要回滚所有的操作。今天我们来分析一下JBPM的事务设计。

           JBPM数据库长事务处理是通过拦截器和具体的承载数据库脚本的命令完成的,下面分别进行简单的分析(以下分析是针对hibernate事务进行分析,spingjta事务的原理都是一样的)

    拦截器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等任何一个服务,就会根据拦

    截器配置策略进行初始化拦截器;但是初始化后会进行全局缓存,以后不会每次进行

    新建初始化;

    具体命令执行

     

  • 相关阅读:
    VS2013折叠代码、打开代码的快捷键
    用if做了一个简单的猜拳游戏(做的不好还请指点,谢谢!)
    一维数组的应用
    do while 与while的区别!
    作业.把c语言输出的基础差不多都概括了!
    C语言基础
    c语言:蜗牛的爬行。
    QQ群成员提取
    入门教程2
    VMware WorkStations最小化安装&配置&卸载CentOS 7
  • 原文地址:https://www.cnblogs.com/wufengtinghai/p/2090312.html
Copyright © 2011-2022 走看看