JBPM4中常用概念总结

2023-12-22 21:58
文章标签 总结 概念 常用 jbpm4

本文主要是介绍JBPM4中常用概念总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



1. 流程定义(Process Definition)
  流程定义是记录在xml文件中的对流程的描述,它包含唯一的流程开始节点和多个流程功能节点,每个节点之间使用transition进行连接。
    ProcessDefinition使用id, key和version进行标识,jBPM中可能包含多个key值相同的ProcessDefinition,key值相同的ProcessDefinition会拥有不同的version值,而id是使用key-version的形式用来表示唯一的ProcessDefinition的。
  jBPM中使用RepositoryService来控制流程定义的发布,浏览,删除等操作。

2. 流程实例(Process Instance)
  以流程定义为蓝本生成的流程实例,在jBPM属于Execution的一种。
  当我们执行start时,会根据流程定义启动一个新的流程实例,然后它会根据流程定义里的节点运行,在遇到state或task时停顿,等待外部用户调用signal,最后会执行到end节点,结束整个流程。
  jBPM中只允许有一个start节点,所以每个流程都是单一入口的,jBPM4中可以允许有多个end节点,所以我们可以在任意位置结束流程。
  jBPM中使用ExecutionService来控制流程实例的启动,浏览,执行,删除等操作

3. state节点
  状态结点是一个典型的等待状态。同任务结点不同的是,状态结点不会向任务列表添加任务实例。当业务进程需要等待外部系统的干预时,这种结点是很有用的。(需要外部系统干预,但又不是让人去干预)假设如下情况:在进入该结点时,通过node-enter事件向外部系统发送一个消息,然后结点进入等待状态;当外部系统完成处理,并回送一个消息,这将导致触发一个signal()方法的运行,该方法重新激活正在等待的流程继续下行
  jBPM中使用ExecutionService来控制对state的signal操作。

4. task节点
  任务结点(task-node)任务结点是代表由人介入的一个或多个任务。因此当流程运行到一个任务结点时,会生成“任务实例对象(taskinstances)”,并添加到参与人的任务列表中,之后结点会处于等待状态,直到参与人完成他们的任务,并激活流程继续向下执行。
   task节点可以使用assignee,swimelane等方式为任务定义分配到某个人或者某个组,对应的用户可以执行completeTask()结束任务,并控制任务结束后流程实例向哪个方向前进。
  jBPM中使用TaskService控制task的各项操作。

5. Identity身份验证
   jBPM中的身份验证分为User,Group和Membership三部分,用户表示登陆用户,Group表示用户组,用户和用户组之间的关联关系保存在Membership中。User和Group与Task中的assignee和swimelane是息息相关的。
6.事件
   Event反映的是流程执行中的各个时刻。在流程执行中JBPM引擎会在计算下一个状态的时候触发各种事件。一个事件通常和流程定义中的一个元素相关联,比如流程定义本身,节点或者转移。大部分的元素能够触发不同类型的事件,比如一个节点可以触发节点进入事件,节点离开事件。事件其实是和动作连接在一起的。每个事件维护一个动作列表。当JBPM引擎触发一个事件的时候,该事件维护的动作列表中的动作将被执行。

JBPM中事件类型是写死在事件类中的,共有16种:
EVENTTYPE_TRANSITION ="transition"; // 转移
EVENTTYPE_BEFORE_SIGNAL ="before-signal"; // 发信号前
EVENTTYPE_AFTER_SIGNAL ="after-signal"; // 发信号后
EVENTTYPE_PROCESS_START ="process-start"; // 处理开始状态
EVENTTYPE_PROCESS_END ="process-end"; // 处理结束状态
EVENTTYPE_NODE_ENTER ="node-enter"; // 进入节点
EVENTTYPE_NODE_LEAVE ="node-leave"; // 离开节点
EVENTTYPE_SUPERSTATE_ENTER ="superstate-enter"; //进入超级状态
EVENTTYPE_SUPERSTATE_LEAVE ="superstate-leave"; //离开超级状态
EVENTTYPE_SUBPROCESS_CREATED ="subprocess-created"; //子流程创建
EVENTTYPE_SUBPROCESS_END ="subprocess-end"; // 子流程结束
EVENTTYPE_TASK_CREATE ="task-create"; // 任务创建
EVENTTYPE_TASK_ASSIGN ="task-assign"; // 任务分派
EVENTTYPE_TASK_START ="task-start"; // 任务启动
EVENTTYPE_TASK_END = "task-end";// 任务结束
EVENTTYPE_TIMER = "timer"; //定时器

7.transition
   关联两个节点,用于表示节点的走向

8.常用类说明
  ProcessEngine:它是整个jBPM4的入口,并且是单例模式。通过它可以获取processEngine,并藉此获得工作流引擎所提供的各种服务
  RepositoryService:控制流程定义的发布,浏览,删除等操作
  ExecutionService:控制流程实例的启动,浏览,执行,删除等操作

  IdentityService:控制身份的各项操作

*********************************************************************************************

对jBPM4.3数据库的几张表简单介绍

JBPM4_DEPLOYMENT   流程定义表
JBPM4_DEPLOYPROP 流程定义属性表

JBPM4_EXECUTION  流程实例表
JBPM4_HIST_ACTINST 流程活动(节点)实例表

JBPM4_HIST_DETAIL  流程历史详细表

JBPM4_HIST_PROCINST 流程实例历史表

JBPM4_HIST_TASK  流程任务实例历史表
JBPM4_HIST_VAR  流程变量(上下文)历史表

JBPM4_ID_GROUP 角色表
JBPM4_ID_MEMBERSHIP 用户角色表
JBPM4_ID_USER  用户表
JBPM4_JOB  定时表
JBPM4_LOB  存储表
JBPM4_PARTICIPATION 参与者表
JBPM4_SWIMLANE  泳道表
JBPM4_TASK 任务表
JBPM4_VARIABLE 上下文表

红色的表为经常使用的表.这里不使用JBPM自己的权限角色定义.

发布一个流程deploy后
jbpm4_deployment新增一条记录
jbpm4_deployprop新增三条记录
jbpm4_lob新增一条记录

开始一个流程startProcessInstanceByKey后
jbpm4_execution新增一条记录
jbpm4_hist_actinst新增一条记录
jbpm4_hist_procinst新增一条记录
jbpm4_hist_task新增一条记录
jbpm4_task新增一条记录

流程定义相关的布署信息就存储在(1) JBPM4_DEPLOYMENT、(2) JBPM4_DEPLOYPROP 及(3)JBPM4_LOB 中。上传一个包含png和jpdl.xml的zip包后,JBPM4_DEPLOYMENT多一条记录JBPM4_DEPLOYPROP多三条, JBPM4_LOB多两条。
(4)J B PM4_HIST_PROCINST 与(5) JBPM4_HIST_ACTINST 分别存放的是ProcessInstance、Activity Instance的历史记录。
(6)JBPM4_EXECUTION主要是存放JBPM4的执行信息,Execution机制代替了JBPM3的Token机制(详细参阅JBPM4的PVM机制,过段时间我也会进一步分析)。
(7)JBPM4_TASK 存放需要人来完成的Activities,需要人来参与完成的Activity 被称为Task。
(8)JBPM4_PARTICIPATION存放Participation的信息,Participation的种类有Candidate、Client、Owner、Replaced Assignee和Viewer。而具体的Participation既可以是单一用户,也可以是用户组。
(9)JBPM4_SWIMLANE。 Swim Lane是一种Runtime Process Role。通过SwimLane,多个Task可以一次分配到同一Actor身上。
(10) JBPM4 _VARIABLE 存的是进行时的临时变量。
(11) JBPM4_HIST_DETAIL 保存Variable的变更记录。
(12)JBPM4_HIST_VAR 保存历史的变量 。
(13) JBPM4_HIST_TASK Task的历史信息。
(14)JBPM4_ID_GROUP (15)JBPM_ID_MEMBERSHIP (16)JBPM4_ID_USER这三张表很常见了,基本的权限控制,关于用户认证方面建议还是自己开发一套,JBPM4的功能太简单了,使用中有很多需要难以满足。
(17) JBPM4_JOB 存放的是Timer的定义。

这篇关于JBPM4中常用概念总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/525613

相关文章

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Python中操作Redis的常用方法小结

《Python中操作Redis的常用方法小结》这篇文章主要为大家详细介绍了Python中操作Redis的常用方法,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解一下... 目录安装Redis开启、关闭Redisredis数据结构redis-cli操作安装redis-py数据库连接和释放增

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情