zoukankan      html  css  js  c++  java
  • 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到最后一个任务做好就会结束部署流程)
  • 相关阅读:
    Java-- 异常之使用finally进行清理
    请几天假
    Java-- 重新抛出异常
    Java-- 异常与记录日志
    Java-- 异常(2)
    Java基础——多线程(4)
    Java基础——多线程(3)
    Java基础——面向对象练习题
    Java基础——多线程(2)
    Java基础——多线程(1)
  • 原文地址:https://www.cnblogs.com/procedureMonkey/p/9921161.html
Copyright © 2011-2022 走看看