JBPM流程部署之流程版本升级

JBPM流程部署之流程版本升级

 

      流程定义是根据流程定义描述语言(JPDL)对现实业务需求的抽象,是对现实业务需求的高度抽象化;现实中对于同一个流程定义,很少会一成不变,很多时候随着时间的流逝,我们的业务流程有少许的变化,那么我们就需要对流程进行一些改变,这个时候就会涉及到流程的版本升级的问题。今天我们来了解一下jbpm的版本升级的相关执行,最后我们会对JBPM的现有版本升级进行扩展思考。
      以下是我对JBPM流程版本升级的相关知识的思考,结合下图我们展开今天的学习
 
      流程的基本属性
       Name,流程的名称,在与用户交互时,用于标示不同的流程,主要用于界面展示
       Key,流程的键,用于标示同一类流程,如果没有显式的指定,那么就会使用name,但是name中的非字母和数字字符会被下划线替换掉
       Langid,标示当前的流程定义使用的流程描述语言jpdl的版本,如果没有显式的指定,就会使用当前版本
       Pdversion,标示同类流程的不同版本,如果显式的指定版本,那么首次部署流程版本号为一,以后每次部署版本号逐次递增一
       Pdid,流程的唯一标示,每个流程都会对应一个唯一的流程id,流程id由系统默认生成,格式 key=version

       JBPM默认升级模式
       默认情况下,jbpm要求具有相同name的流程都具有相同的key,同具有相同key的流程也必须都具有相同的name;所以key和name从编程实现来说代表的意义是相同的,都代表同一种类型的流程,但是两者的业务职责不同,前者用于ui展现,后者用于代码使用;
       对于升级模式,如果没有显式的指定流程版本,jbpm会通过流程的key查找现有的最新的流程,如果存在就在现有最新版本的流程的基础上,版本号自增一,否则直接将版本赋值为一;不过流程是否更改都会是这样的一种方式。
      扩展JBPM的流程升级模式
      在现实的情况下,Jbpm默认的流程版本升级模式往往很那满足我们的业务需求,我们往往需要根据我们自己的业务需求,来定制我们的升级策略。
      影响流程版本升级的元素
      流程定义属性:这里是指jpdl中process元素承载的一些配置信息
      节点相关: 节点的属性
                     节点的出弧和入弧
                     新增节点
                     删除节点
      弧线相关: 弧的属性
                     弧的源节点、目的节点
                     新增弧
                     删除弧
      扩展后的升级模式
      每次部署都进行版本升级(jbpm现有的策略)
      每次部署都不进行版本升级
      每次部署只有新增和删除节点的情况下版本升级(默认策略)
      用户自定义升级策略,用户实现我们定义的接口,运行时进行代码注入,我们将最新的流程和待部署的流程相关信息传给接口,用户最后返回是否进行升级即可
      扩展后升级模式的配置
      我们需要新引入一个配置流程版本升级策略的xml(后续也会用于流程实例迁移策略的配置),同时我们也需要一流程版本升级的管理类,对于这个类的实例化,我们既可以采用jbpm现有的IOC方式,在流程引擎初始化的时候读取配置文件,也可以在流程部署的时候动态的读取配置文件;
前者的好处是,配置文件只需要读取一次,后者需要每次部署流程都读取,而且管理类是延迟实例化,并且实例化后会进行全局缓存,相对来说效率还好点吧,但是实现起来比较繁琐.,同时修改了流程版本升级策略不能即时生效,需要重启流程引擎

原文地址:https://www.cnblogs.com/wufengtinghai/p/2160242.html