activiti 学习笔记
配置(activiti配置实际上就是用spring加载的)
? 数据库或数据源的配置?
? ? ? ?采用mybatis处理
? 作业执行的配置
? 邮件服务的配置
? 历史配置
? ? ?历史保存的粒度控制
? 表达式、脚本中beans的配置
??
?
单元测试
? rule ?ActivitiRule
工作流虚拟机
? ?流程的扭转都在这里处理,它里面也有一套模型
表达式
? ? 采用juel ?java ?unified expression language,jee6规范
? ? 它可以在Java服务任务、执行监听器、任务监听器、带条件的顺序流中使用
? ? 上下文
? ? ? ? ?流程中的变量 +beans+内部变量execution(DelegateExecution)
? ? 表达式大体分两类:
? ? ? ? 值表达式
? ? ? ? ? ?${pass} ${user.name}
? ? ? ? 方法表达式
? ? ? ? ? ?${user.getName()}
? ? ? ? ? ?${user.getName(var,execution)}
?
? 部署
? ? ?部署一般流程中用的class不会被部署,这就要求运行流程的classpath中有对应的class
? ? ?所以在流程中不要直接使用class,否则流程发布后,class就不能修改类名、包名,尽可能采用表达式的形式进行关联
? ? ?如果没有对应的class,不影响部署流程,但在运行时会抛异常
?
?流程定义版本
? ? ?流程定义文件本身并没有版本的概念,在部署的时候程序动态添加的版本,在数据库中正在的id为:
? ? ?流程ID+版本号+动态生成的ID
? ? ?程序中默认获取最新版本的流程
?
?
?BPMN2.0
? ? 它是业界对工作流的一种规范一种标准,Activiti 也是在遵循标准的前提下对它进行了扩展
? ? 这样你的功能流可以很容易的切换不同的供应商
? ? Activiti 的BPMN2.0的扩展
? ? ? ?1:同不同的命名空间进行区分
? ? ? ?2:它仅对规范的实现方式进行扩展,并没有对规范新增内容,保证兼容性
? ? ? ? ? ? ?这样activiti的所有实现都可以在bpmn2.0规范中得到等价的实现方式
?事件分2类
? ? ?捕获事件
? ? ? ? ? ? 流程执行的该事件时,会等待事件触发,图标中间是空的
? ? ?抛出事件 ? ? ? ? ? ? ??
? ? ? ? ? ?流程执行的该事件时,事件就会被触发,图标中间有黑色填充物
? ? ? ? ? ?
?定时器事件的定义
? ? ?使用范围:start事件 等..
? ? ?元素:
? ? ? ? ? timeDate 在确切的时间触发
? ? ? ? ? timeDuration 触发前持续时间
? ? ? ? ? timeCycle 周期性的触发
?开始事件
? ? ?带定时的开始事件
? ? ? ? ?触发器(定时器)自动触发
? ? ?一般的开始事件
? ? ? ? ?需要手动调用runtimeService.startProcessInstanceByKey来触发
?结束事件
? ? ?none end
? ? ? ?事件结束无结果抛出,直接结束当前的执行路径
? ? ?error end
?顺序流
? ? ?连接一个节点到另个节点,流上可以添加条件,如果有多条分支采用并行的形式处理
? ? ?连接线中的表达式 结果必须是false或true,否则会抛异常
?gateway
? ? ?excluslve gateway 单一分支
? ? ? ?多条分支默认只有一条可以走,如果有多条为true,仅跑第一个为true的通道
? ? ? ?如果全部为false,则抛出异常
? ? ?parallel gateway ?并行分支
? ? ? ? ?fork 并行执行所有输出的顺序流
? ? ? ? ?join ?所有到达parallet gateway的并发性的执行路径都等待与此,确保所有的输入流全部到达,才继续往下走
? ? ? ? ?注:连线上的条件会被忽略 ?
?
? 任务
? ? ? 用户任务
? ? ? ? ? 由人来参与处理
? ? ? ? ? 基本属性的指定
? ? ? ? ? ? ?过期时间
? ? ? ? ? ? ?用户分配
? ? ? ? ? ? ? ? 可以使用表达式
? ? ? ? ? ? ? ? 也可以有监听器代码动态的设置
? ? ? ?脚本任务
? ? ? ? ? ?脚本支持groovy、javascript
? ? ? ? ? ?脚本中可以直接从上下文中使用变量,bean、内置变量,也可以操作
? ? ? ?Java服务
? ? ? ? ? 直接调用外部的java类(实现:JavaDelegate)
? ? ? ? ? 部署是不会被实例化,第一次使用会加载,后期以单实例的方式处理
? ? ? ? ? 该类可以通过流程动态注入自动,从而与流程中的数据进行交互
? ? ? ? ? 高级: 实现ActivityBehavior 在内部可以直接操作流程虚拟机API,通过代码来控制流程的走向
? ? ? ?WebService
? ? ? ? ? 调用一个WebService
? ? ? ?业务规则任务
? ? ? ? ? activiti这块采用drools作为规则引擎,流程中如果使用该节点要求在部署流程时,把规则文件.drl也一同部署
? ? ? ?Email 任务
? ? ? ?手动任务
? ? ? ? ? ?跟Java服务的效果一样,使用场景应该都一样
? ? ? ?Java接收任务
? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?
? 监听器
? ? ?执行监听 (ExecutionListener)
? ? ? ? ? 执行外部代码或计算表达式,几乎任何流程中的环境都可以绑定到监听,还是非常灵活的并且还可以注入字段,
? ? ? ? ? 将流程中的数据塞到对象中
? ? ? 任务监听 ?TaskListener
? ? ? ? ? 任务监听不是BPMN规范,它是activiti专门针对用户任务进行的扩展
? ? ? ? ? 在流程部署的时候创建,单利的
? ? ? ? ? ? ?
? ?多实例
? ? ? ?说白了就是对某个任务多次执行,对它进行循环处理
?
? ?子流程
? ? ? ?直接在主流程中嵌套子流程或直接调用外部流程
? ? ? ?内嵌中的流程,变量都是可见的
? ? ? ?调用外部流程,变量需要做映射,将主流程中的变量映射到子流程,反过来也都可以
? ?表单
? ? ?内部表达、外部表单