activiti工作流心得

多线程和工作流配合比较坑的地方
多线程时查询有可能空指针异常,流程已结束,查询不到流程
我们没有把异常抛出和捕获,控制台就不报错,
多线程不能用busilutil.getuser,因为线程不一样,所以bus为空,报错。(因为每个请求为单线程,多线程所以会获取到空的值)

工作流和事务遇到的坑
在同一个service里,事务还没提交,里面所执行的sql在当前service里是可以查询的到的;但是在不同的进程里,对同一条数据进行操作时,提交失败,体现了事物的隔离性。
解决方法:提交表单和回写

事务并发,对同一条数据进行事务操作,当一个进程事务执行失败时两个进程都会失败,可以在第一个实务执行完之后再进行第二个事务操作。

事务隔离级别:有四个
事务锁:四个,主要用到行级别的排他锁和共享锁



工作流总结,重点主要掌握:


1.ProcessDefinition(流程定义)就是一个流程的步骤说明,比如我 这个流程,申请人王三发起提交申请,李四作为部门经理进行审批,审批完成后,此申请到达下一级总经理王五,进行审批。就这么整个流程说明 就是流程定义,不过在Activiti中整个流程定义是以helloworld.bpmn与helloworld.png格式存在的。

掌握重点:流程查询,模型生成流程图片时的编码转换,查看流程图,查看流程xml文件,流程与审批事项的关联,传输过程中编码的转换,还有接收编码转换,
注:linux系统没有宋体文字,需要在本地把宋体包传输到linux系统下jre的font目录下,生成图片时才不会中文乱码。(二进制流要进行编码设为utf-8)



2.流程部署processinstall
部署流程定义
     将流程定义进行部署,部署流程定义的方式有两种:
01.部署流程定义的helloworld.bpmn与helloworld.png两个文件
02.将helloworld.bpmn与helloworld.png压缩成zip进行部署
注:最好一个流程关联一个业务的一条单据,保证流程的唯一性,所以部署
(startprocessinstall)前加上判断当前单据是否存在正在执行的流程(根据单据id查询流程,判断流程(processinstall)是否还在,如果还存在,就是还有任务,不执行start方法)


3.任务:
任务重点:
查询任务,驳回任务,提交任务,驳回上一级,保存变量,查询变量,会签任务,任务提交时变量的插入,执行任务之前变量的查询,能够查出所有的任务节点,根据节点设置任务执行人。
注:1会签任务会生成多个,查询要用list,否则会数组越界(最好查询时都用list)。


4查询部署流程任务历史



整个流程:
编写流程定义文件model 

部署流程定义processdefinal

启动流程实例processinstall

查询领取完成任务taskservice.comple

任务完成,流程实例结束(一直comple到最后一个任务做好就会结束部署流程)

 

posted @ 2018-11-07 10:40  进击小螺号  阅读(739)  评论(0编辑  收藏  举报