JPBM是JBOSS旗下的一个开源的基于hibernate的工作流引擎。
工作流就是在日常生活中,我们一些常见的如请假流程、采购流程、入职流程,通俗的来讲就是一些在现实生活中的流程以信息化以程序的方式实现。
一个工作流首先需要进行流程定义,流程定义是由节点和跳转组成的,节点又可以称为环节、活动节点、活动环节,并且节点也可以分为两大类型:人工节点和自动节点,人工节点有start开始节点、end结束节点、task任务节点,自动节点有decision判断节点、fork分支节点、join聚合节点和state状态节点,并且一个流程有且只有一个开始节点,但可以有多个结束节点。
流程定义是静止的,它在运行状态时会转换成流程实例,一个流程定义可以对应多个流程实例。流程运行后,会产生两个文件,*.jdpl.xml文件和*.png图片文件,也会生成18张数据库表,常用且核心的表有JBPM4_LOB 存储表,主要存储xml文件和png图片、JBPM4_TASK 任务表、JBPM4_EXECUTION 流程实例表、JBPM4_VARIABLE变量表。
1. 获取流程引擎ProcessEngine processEngine = Configuration.getProcessEngine();
2. 获取流程库Service: RepositoryServicve repositoryService = processEngine.getRepositoryService();
3. 发布流程:repositoryService.createDeployment().addResourceFromClassPath("xxxx").deploy();
4. 查询流程定义:repositoryService.createProcessDefinitionQuery().list();
5. 删除流程定义:repositoryService.deleteDeploymentCascade(deploymentId);
6. 获取执行Service:processEngine.getExecutionService();
7. 启动一个新流程:ProcessInstance processInstance = processEngine.startProcessInstanceByKey("processKey");
8. 执行流程:processInstance = processEngine.signalExecutionById(instanceId);
9. 查询流程是否执行完毕:processInstance.isEnded();
10. 强行终止流程:executionService.endProcessInstance(processInstanceId, cause);
11. 删除流程:executionService.deleteProcessInstance(processInstanceId);
12. 查询流程:executionService.createProcessInstanceQuery().list();
JBPM
有五大核心类:
ProcessEngine
:主要获取各种的
Service
RepositoryService
:主要发布流程定义
ExecutionService
:主要操作流程实例
TaskService
:主要操作人工服务
HistoryService
:主要操作历史服务。
核心方法:
读取
jbpm
定义的文件生成
zip
包存到
lob
表中:
createDeployment()
获取流程定义列表:
createProcessDefinitionQuery
根据定义的
key
或
id
来启动流程实例:
startProcessInstanceByKey(id)
获取待办任务列表:
findPersonalTasks(userName)
完成指定任务列表:
completeTask(*.getActivityId())
获取历史任务列表:
createHistoryTaskQuery()
获取流程实例的
ID
:
task.getExecutionId()
(
了解的表
)
JBPM4_HIST_ACTINST
流程活动
(
节点
)
实例表
JBPM4_HIST_DETAIL
流程历史详细表
JBPM4_HIST_PROCINST
流程实例历史表
JBPM4_HIST_TASK
流程任务实例历史表
JBPM4_HIST_VAR
流程变量
(
上下文
)
历史表