Jbpm4

来源:互联网 发布:mysql pdf 编辑:程序博客网 时间:2024/05/19 20:19
JBPM4_DEPLOYMENT   流程定义表 
JBPM4_DEPLOYPROP 流程定义属性表
 
JBPM4_EXECUTION  流程实例表 
JBPM4_HIST_ACTINST 流程活动(节点)实例表 
JBPM4_HIST_DETAIL  流程历史详细表 
JBPM4_HIST_PROCINST 流程实例历史表 
JBPM4_HIST_TASK  流程任务实例历史表 
JBPM4_HIST_VAR  流程变量(上下文)历史表 

JBPM4_JOB  定时表 
JBPM4_LOB  存储表
 
JBPM4_PARTICIPATION 参与者表 
JBPM4_SWIMLANE  泳道表 
JBPM4_TASK 任务表
 

JBPM4_VARIABLE 上下文表 


发布一个流程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 分别存放的是Process Instance、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。通过Swim Lane,多个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的定义。


一个processInstance只有一个jbpm4_hist_procinst,jbpm4_task中只有一个processInstance当前任务或多个并发任务
(activityName),jbpm4_hist_task中会有所有历史任务(outcome)和下个任务(outcome为null)


ProcessInstance inst = executionService.startProcessInstanceById(POSTING_PROCESS_DEFINITION_ID, var);

当前任务:Task task = taskService.createTaskQuery().processInstanceId(pid).uniqueResult();

jbpm中from: path = task.getFormResourceName() + "?taskId="+task.getId();

taskService.takeTask(taskId, userId);    taking this task will prevent all other candidates from taking and working on this task.

taskService.completeTask(taskId);


for(Map.Entry<String, Object> entity : var.entrySet())

{
String prop = entity.getKey();
Object val = entity.getValue();

String methodName = "set" + prop.substring(0, 1).toUpperCase() + prop.substring(1);

Method m = c.getMethod(methodName, val.getClass());
m.invoke(p, val);

getHibernateTemplate().update(p);

}