activiti 并行分支并行网关如何召回任务

热销排行榜
1.2.3.4.5.6.7.8.9.10.
最近浏览的其他商品
浏览更多同类商品
【 】??????????
Activiti项目负责人Tijs Rademakers高度认可并推荐,根据Activiti新版本系统、深度讲解了BPMN2.0规范,以及Activiti功能、用法、技巧、实践和源代码分析。
Activiti实战
978-7-111-48595-7
机械工业出版社
出版日期:
读者对象:
¥65.00&&&
立刻节省:¥24.00
现在有货,10本以上
所属分类:
Visual C++ 2013入门..
  这是目前唯一得到Activiti官方认可的著。
  作,由国内Activiti领域第一人撰写,Activiti项目负责人Tijs Rademakers强烈推荐。
  本书立足于实践,不仅让读者知其然,全面掌握Activiti架构、功能、用法、技巧和最佳实践,广度足够;而且让读者知其所以然,深入理解Activiti的源代码实现、设计模式和PVM,深度也足够。
  全书分四部分:准备篇(第1-2章)介绍了Activiti的概念、特点、应用、体系结构,以及开发环境的搭建和配置;基础篇(第3.4章)首先讲解了Activiti Modele r、Activiti Designe r两种流程设计工具的详细使用,然后详细讲解了BPMN 2.0规范:实战篇(第5~14章)系统讲解了Activiti的用法、技巧和最佳实践,包含流程定义、流程实例、任务、子流程、多实例、事件以及监听器等;高级篇(第15-21章)通过集成WebSe rvice、规则引擎、JPA、ESB等各种服务和中间件来阐述了Activiti不仅仅是引擎,实际上是一个BPM平台,最后还通过源代码对它的设计模式及PVM进行了分析。
闫洪磊 资深软件开发工程师和架构师,为Activiti贡献了大量代码,为Activiti在中国的推广与普及做了大量的工作,在社群中有很高的威望和知名度,被称为中国Activiti领域的第一人。多年来一直从事OA、ERP等系统的开发与架构设计工作,持续关注并深入研究工作流引擎,目前就职于小马购车,担任架构师一职,并负责公司内部工作流平台的建设工作。
本书推荐前言第一部分 准备篇 第1章 认识Activiti  1.1 什么是Activiti  1.2 工作流基础   1.2.1 什么是BPM   1.2.2 工作流生命周期   1.2.3 什么是BPMN  1.3 Activiti的特点  1.4 Activiti的应用  1.5 Activiti架构与组件  1.6 Activiti与jBPM5比较  1.7 本章小结 第2章 搭建Activiti开发环境  2.1 下载Activiti   2.1.1 目录结构   2.1.2 Javadocs  2.2 环境配置检查   2.2.1 检查并安装JDK   2.2.2 检查并安装Ant   2.2.3 检查并安装Maven  2.3 配置文件介绍   2.3.1 Activiti配置文件   2.3.2 Maven配置文件  2.4 Hello World   2.4.1 最简单的流程定义   2.4.2 创建单元测试类   2.4.3 运行Hello World   2.4.4 添加业务节点  2.5 Activiti Explorer   2.5.1 配置并运行Activiti Explorer   2.5.2 使用Activiti Explorer  2.6 本章小结第二部分 基 础 篇 第3章 流程设计工具  3.1 基于B/S架构的流程设计器Activiti Modeler   3.1.1 Activiti Modeler特点   3.1.2 下载signavio-core-components   3.1.3 配置打包与运行   3.1.4 Windows用户打包   3.1.5 设计请假流程   3.1.6 导出bpmn2.0.xml  3.2 在Activiti Explorer中使用Activiti Modeler  3.3 基于Eclipse插件的流程设计器Activiti Designer   3.3.1 Activiti Designer特点   3.3.2 安装Activiti Designer   3.3.3 设计流程   3.3.4 自动化   3.3.5 升级历史遗留的流程设计   3.3.6 导入Activiti Modeler设计   3.3.7 泳池与泳道   3.3.8 在Activiti Designer中使用泳道与泳池  3.4 本章小结 第4章 Activiti与BPMN 2.0规范  4.1 启动事件与结束事件   4.1.1 启动事件   4.1.2 结束事件  4.2 顺序流   4.2.1 标准顺序流   4.2.2 条件顺序流  4.3 任务   4.3.1 用户任务   4.3.2 脚本任务   4.3.3 Java Service任务   4.3.4Web Service任务   4.3.5业务规则任务   4.3.6邮件任务   4.3.7Camel任务   4.3.8Mule任务   4.3.9手动任务   4.3.10接收任务   4.3.11Shell任务   4.3.12多实例  4.4网关   4.4.1排他网关   4.4.2并行网关   4.4.3包容网关   4.4.4事件网关  4.5子流程与调用活动   4.5.1子流程   4.5.2 调用活动   4.5.3 事件子流程   4.5.4事务子流程  4.6边界与中间事件   4.6.1边界事件   4.6.2中间捕获事件   4.6.3中间抛出事件  4.7监听器   4.7.1执行监听器   4.7.2任务监听器  4.8本章小结第三部分 实战篇 第5章用户与组及部署管理  5.1用户与组   5.1.1用户   5.1.2组   5.1.3用户与组的关系   5.1.4用户任务中的用户与组  5.2部署流程资源   5.2.1classpath方式   5.2.2InputStream方式   5.2.3字符串方式   5.2.4zip/bar格式压缩包方式  5.3流程部署及资源读取   5.3.1读取已部署流程定义   5.3.2从客户端部署流程   5.3.3读取流程定义的XML   5.3.4读取流程定义的图片及图片中的中文乱码   5.3.5删除部署  5.4本章小结 第6章 任务表单  6.1动态表单   6.1.1流程定义   6.1.2单元测试   6.1.3在Activiti Explorer中运行流程  6.2实现自己的Activiti Explorer   6.2.1完善身份验证功能   6.2.2流程启动表单   6.2.3任务签收与办理   6.2.4自定义表单的字段类型  6.3 外置表单   6.3.1流程定义   6.3.2单元测试   6.3.3自定义表单引擎   6.3.4 读取流程启动表单   6.3.5任务签收与办理  6.4本章小结 第7章 Activiti与容器集成  7.1 流程引擎工厂   7.1.1 创建引擎的方式   7.1.2 配置 ProcessEngineFactory-Bean  7.2 自动部署流程定义  7.3 表达式   7.3.1 表达式基础   7.3.2 表达式示例   7.3.3 使用Spring管理变量  7.4 监听器  7.5 Spring容器集成应用实例   7.5.1 业务建模   7.5.2 启动流程   7.5.3 任务读取   7.5.4 任务办理  7.6 使用Spring注解初始化引擎   7.6.1 使用@EnableActiviti注解   7.6.2 使用Spring Boot初始化引擎  7.7 CDI模块   7.7.1 启动示例   7.7.2 引擎配置与流程定义   7.7.3 流程定义与启动   7.7.4 任务办理与完成   7.7.5 事件监听  7.8 本章小结 第8章 邮件服务  8.1 配置与测试   8.1.1 搭建邮件系统   8.1.2 通过Activiti的邮件任务发送邮件   8.1.3 使用Gmail发送邮件  8.2 与业务集成   8.2.1 即时发送邮件   8.2.2 定时发送邮件  8.3 本章小结 第9章 多实例  9.1 非用户任务  9.2 用户任务多实例   9.2.1 顺序方式办理   9.2.2 并行方式办理   9.2.3 设置结束条件  9.3 应用实例-请假会签   9.3.1 流程定义   9.3.2 任务办理  9.4 审批意见  9.5 本章小结 第10章 子流程与调用活动  10.1 子流程   10.1.1 流程定义   10.1.2 流程办理   10.1.3 分析流程数据  10.2 调用活动   10.2.1 流程定义   10.2.2 单元测试   10.2.3 流程办理   10.2.4 分析流程数据  10.3 事件子流程   10.3.1 流程定义   10.3.2 单元测试  10.4 多实例支持  10.5 本章小结 第11章 事件  11.1 启动事件   11.1.1 定时启动事件   11.1.2 消息启动事件  11.2 结束事件  11.3 边界事件   11.3.1 异常边界事件   11.3.2 消息边界事件   11.3.3 信号边界事件  11.4 中间事件  11.5 本章小结 第12章 用户任务与附件  12.1 用户任务   12.1.1 改进任务列表   12.1.2 改进任务表单   12.1.3 任务相关人员   12.1.4 反签收任务   12.1.5 候选人与候选组   12.1.6 改进任务查询  12.2 子任务  12.3 手动任务  12.4 附件  12.5 改进意见列表  12.6 任务委派   12.6.1 单元测试   12.6.2 任务表单中的委派  12.7 本章小结 第13章 流程数据查询与跟踪  13.1 Query API简介  13.2 运行时数据查询   13.2.1 任务查询   13.2.2 查询参与的流程  13.3 流程图跟踪  13.4 历史数据查询   13.4.1 查询历史活动及表单   13.4.2 查询已归档流程  13.5 基于MyBatis的CustomSql查询   13.5.1 定义Mapper接口   13.5.2 展示数据  13.6 本章小结 第14章 管理员特性  14.1 流程状态   14.1.1 流程定义状态   14.1.2 作业查询   14.1.3 流程实例状态  14.2 作业管理   14.2.1 作业执行原理   14.2.2 作业执行异常   14.2.3 独占与异步  14.3 删除流程实例  14.4 流程定义权限控制   14.4.1 权限拦截   14.4.2 设置候选启动人和候选启动组   14.4.3 读取候选启动数据  14.5 读取引擎属性  14.6 数据库查询  14.7 用户与组  14.8 本章小结第四部分 高级篇 第15章 集成WebService  15.1发布WebService服务  15.2在流程中定义WebService任务  15.3 在流程中调用WebService  15.4本章小结 第16章 集成规则引擎  16.1 定义流程与规则   16.1.1部署规则文件   16.1.2单元测试  16.2本章小结 第17章 集成JPA  17.1配置JPA   17.1.1Standalone模式   17.1.2Spring模式  17.2JPA版本的请假流程   17.2.1启动流程时持久化JPA实体   17.2.2更改JPA实体属性   17.2.3清理历史表单数据  17.3本章小结 第18章 集成ESB  18.1Camel简介与快速入门  18.2在流程中调用Camel   18.2.1Camel依赖及配置   18.2.2定义Camel路由   18.2.3执行单元测试   18.2.4URI输入参数   18.2.5URI输出参数  18.3异步Camel任务  18.4在Camel中启动流程  18.5集成Mule   18.5.1Mule快速入门   18.5.2Mule、Spring与Activiti集成   18.5.3在流程中调用Mule  18.6本章小结 第19章 统一身份管理  19.1一套典型的身份系统  19.2引擎身份接口方式  19.3用视图代替物理表  19.4集成LDAP  19.5本章小结 第20章 REST服务  20.1通信协议简介  20.2REST API概述  20.3发布REST API   20.3.1通过浏览器访问   20.3.2通过HttpClient访问   20.3.3通过Restlet访问   20.3.4通过Apache CXF访问  20.4集成REST API   20.4.1依赖及配置文件   20.4.2通过Ajax访问  20.5完整示例   20.5.1部署流程   20.5.2查询Deployment   20.5.3查询流程定义   20.5.4启动流程   20.5.5读取流程变量   20.5.6查询任务   20.5.7签收任务   20.5.8完成任务   20.5.9查询历史数据  20.6集成流程图跟踪组件Diagram Viewer   20.6.1准备资源文件   20.6.2准备配置文件   20.6.3访问Diagram Viewer跟踪流程  20.7基于REST服务搭建流程中心   20.7.1基础架构   20.7.2表单模式选型   20.7.3统一的组件   20.7.4事务管理  20.8集成流程设计器Activiti Modeler   20.8.1准备资源文件   20.8.2准备配置文件   20.8.3更改默认配置   20.8.4创建模型   20.8.5导出模型的流程XML   20.8.6把模型转换为流程定义   20.8.7把流程定义转换为模型   20.8.8删除模型  20.9本章小结 第21章 入侵Activiti  21.1解析BPMN文件   21.1.1BpmnModel对象与XML之间的转换   21.1.2动态创建流程   21.1.3BPMN解析处理器  21.2全局事件处理器   21.2.1定义事件处理器   21.2.2处理捕获的事件   21.2.3事件处理器的异常处理   21.2.4动态注册事件处理器   21.2.5任务自动转办   21.2.6事件日志  21.3命令与拦截器   21.3.1命令与拦截器运行机制   21.3.2自定义命令   21.3.3命令拦截器   21.4流程虚拟机-PVM   21.4.1简述PVM   21.4.2Hello PVM  21.4.3PVM进阶  21.5本章小结
客服专线:010- 客服邮箱:
Copyright & 北发图书网 2007,
All Rights Reserved
北京北发电子商务股份有限公司 版权所有activiti撤回操作怎么实现_百度知道
activiti撤回操作怎么实现
我有更好的答案
、zip.0规范的xml定义、form等、bar文件.,其中后面的zip和bar类型一样都是压缩文件格式、png:bpmn20.xml,bpmn20.xml是符合bpmn2。 今天要解决的问题就是帮助大家打包流程资源文件,其中肯能包括Activiti的流程定义文件可以直接部署bpmn20.xml
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁This work is licensed under a .
让您不再错过每一篇文章!
随笔分类(180)
随笔档案(86)
文章分类(9)
文章档案(28)
新闻档案(2)
Blog @ Other Site
Virtualization
积分与排名
阅读排行榜
评论排行榜activiti入门3排他网关,并行网管,包含网关,事件网关 - 推酷
activiti入门3排他网关,并行网管,包含网关,事件网关
网关用来控制流程的流向&网关可以 消费 也可以 生成 token。
网关显示成菱形图形,内部有有一个小图标。 图标表示网关的类型。
首先 利用 流程变量 &写个带有分支的一个基本流程
部署流程文件:
//获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
public void deployFlow(){
//获取仓库服务对象
RepositoryService repositoryService = processEngine.getRepositoryService();
InputStream in = this.getClass().getResourceAsStream(&/MyProcess11.zip&);
ZipInputStream zipInputStream = new ZipInputStream(in);
Deployment dm = repositoryService.createDeployment()
.name(&学生请假&)
.addZipInputStream(zipInputStream)
.deploy();
System.out.println(&id:&+dm.getId()+&,name:&+dm.getName());
启动流程 并 设置请假天数为 3天的 流程变量 提交&
* 启动流程 并完成 提交
public void startProcessAndComp(){
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance pi = runtimeService.startProcessInstanceByKey(&leave&);
System.out.println(&id:&+pi.getId()+&,流程实例ID:&+pi.getProcessInstanceId()+&,流程定义ID:&+pi.getProcessDefinitionId());
TaskService taskService = processEngine.getTaskService();
//通过流程实例ID获取任务对象
Task task = taskService.createTaskQuery()
.processInstanceId(pi.getProcessInstanceId())
.singleResult();
System.out.println(&taskID:&+task.getId()+&,name:&+task.getName());
Map&String, Object& paramMap = new HashMap&String, Object&();
//设置流程变量day=3
paramMap.put(&day&, 3);
//提交任务的时候传入流程变量
plete(task.getId(), paramMap);
//查询任务
task = taskService.createTaskQuery()
.processInstanceId(pi.getProcessInstanceId())
.singleResult();
//如果任务对象为空,则流程执行结束
if (task != null) {
System.out.println(&taskID:&+task.getId()+&,name:&+task.getName());
System.out.println(&任务执行完毕&);
最后的运行结果:
id:1501,流程实例ID:1501,流程定义ID:leave:2:1404
taskID:1504,name:班主任
任务执行完毕
我们可以再数据库中查看:
我们 再 部署一个 流程文件 , 并且在提交 任务的时候 设置流程变量 请假天数为 10天
最后的运行结果
id:1701,流程实例ID:1701,流程定义ID:leave:3:1604
taskID:1704,name:班主任
taskID:1707,name:年级主任
现在 流程就到了另外 一条线
年纪主任审批通过:
* 提交任务
public void completeTask(){
TaskService taskService = processEngine.getTaskService();
plete(&1707&);
流程执行结束
排他网关描述
排他网关(也叫
异或(XOR)网关
,或更技术性的叫法&
基于数据的排他网关
), 用来在流程中实现
。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个
) 会被选中,让流程继续运行。
注意这里的外出顺序流 与BPMN 2.0通常的概念是不同的。通常情况下,所有条件结果为true的顺序流 都会被选中,以并行方式执行,但排他网关只会选择一条顺序流执行。 就是说,虽然多个顺序流的条件结果为true, 那么XML中的第一个顺序流(也只有这一条)会被选中,并用来继续运行流程。 如果没有选中任何顺序流,会抛出一个异常。
排他网关图形
排他网关显示成一个普通网关(比如,菱形图形), 内部是一个“X”图标,表示
异或(XOR)
语义。 注意,没有内部图标的网关,默认为排他网关。 BPMN 2.0规范不允许在同一个流程定义中同时使用没有X和有X的菱形图形。
排他网关有个默认的选项 &default flow , &当 default flow 设定后 &就不用设置表达式了, &如果所有的条件都不通过 就会执行默认的流程
年级主任审批和校长审批
首先 还是 先把文件部署
//获取流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
public void deployFlow2(){
//获取仓库服务对象
RepositoryService repositoryService = processEngine.getRepositoryService();
InputStream in = this.getClass().getResourceAsStream(&/exclusiveGateway.zip&);
ZipInputStream zipInputStream = new ZipInputStream(in);
Deployment dm = repositoryService.createDeployment()
.name(&学生请假&)
.addZipInputStream(zipInputStream)
.deploy();
System.out.println(&id:&+dm.getId()+&,name:&+dm.getName());
启动流程, 并提交 设置 请假天数 为 10天 & 结果
id:2001,流程实例ID:2001,流程定义ID:exclusiveGateWay:1:1904
taskID:2004,name:学生请假
taskID:2008,name:年级主任审批
再 重新部署一个流程文件 然后启动 提交 &设置请假天数为 30天 执行结果
id:2201,name:学生请假
id:2301,流程实例ID:2301,流程定义ID:exclusiveGateWay:2:2204
taskID:2304,name:学生请假
taskID:2308,name:校长审批
最后在 部署一遍, 这次设置请假天数为 3天 &结果
id:2501,name:学生请假
id:2601,流程实例ID:2601,流程定义ID:exclusiveGateWay:3:2504
taskID:2604,name:学生请假
taskID:2608,name:班主任审批
这里 流程走到了 当初 默认的设置 &班主任审批
当我们设置了 默认 的 配置 &,即使没有 设置表达式 &流程 条件都 不满足的时候 &都会执行默认的
并行网关描述
网关也可以表示流程中的并行情况。最简单的并行网关是
,它允许将流程& 分 成多条分支,也可以把多条分支& 汇 聚 到一起。 of execution.
并行网关的功能是基于进入和外出的顺序流的:
并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。
注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有
分支和汇聚功能
。 这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。
与其他网关的主要区别是,并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。
并行网关图形
并行网关显示成一个普通网关(菱形)内部是一个“加号”图标, 表示“与(AND)”语义。
首先 画一个简单的并行流程
注意 &并行 网关 要有2个 &一个是用于
public void deployFlow3() {
// 获取仓库服务对象
RepositoryService repositoryService = processEngine
.getRepositoryService();
InputStream in = this.getClass().getResourceAsStream(&/Parallel.zip&);
ZipInputStream zipInputStream = new ZipInputStream(in);
Deployment dm = repositoryService.createDeployment().name(&并行网关&)
.addZipInputStream(zipInputStream).deploy();
System.out.println(&id:& + dm.getId() + &,name:& + dm.getName());
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance pi = runtimeService
.startProcessInstanceByKey(&parallel&);
System.out.println(&id:& + pi.getId() + &,流程实例ID:&
+ pi.getProcessInstanceId() + &,流程定义ID:&
+ pi.getProcessDefinitionId());
id:2801,name:并行网关
id:2901,流程实例ID:2901,流程定义ID:parallel:1:2804
此时流程进入 &启动项目环节 & 通过流程实例ID 查看当前流程 进度
* 启动流程 并完成 提交
public void startProcessAndComp3() {
TaskService taskService = processEngine.getTaskService();
// 查询任务
Task task = taskService.createTaskQuery().processInstanceId(&2901&).singleResult();
// 如果任务对象为空,则流程执行结束
if (task != null) {
System.out.println(&taskID:& + task.getId() + &,name:&
+ task.getName());
System.out.println(&任务执行完毕&);
// 通过流程实例ID获取任务对象
task = taskService.createTaskQuery().processInstanceId(&2901&).singleResult();
System.out.println(&taskID:& + task.getId() + &,name:& + task.getName());
// 提交任务
plete(task.getId());
taskID:2904,name:项目启动
taskID:2904,name:项目启动
提交任务后,流程进入并行环节,同时执行 功能模块1 和 功能模块2
这是我们可以看到 &流程实例ID 和 执行对象ID 已经是不同了
这个是&act_ru_execution 表的数据
我们先 提交一个 &功能模块1的任务
在看 任务表 &act_ru_task
此时 任务表 只有 功能模块2&
我们在看 &act_ru_execution &这个表 &依旧是3条数据 &功能模块1 的执行流程 被阻塞在 & 并行网关这里 &没有进入 测试发布这个 环节
在提交功能模块2 &任务
查看 这 &2个表
流程 已经 进入 下一个环节
提交最后一个人 &整个流程结束, &我们在查看 &历史活动表 &act_hi_actinst
整个流程 分成了 2 块
包含网关描述
可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。
包含网关的功能是基于进入和外出顺序流的:
所有外出顺序流的条件都会被解析,结果为true的顺序流会以并行方式继续执行, 会为每个顺序流创建一个分支。
所有并行分支到达包含网关,会进入等待章台, 直到每个包含流程token的进入顺序流的分支都到达。 这是与并行网关的最大不同。换句话说,包含网关只会等待被选中执行了的进入顺序流。 在汇聚之后,流程会穿过包含网关继续执行。
注意,如果同一个包含节点拥有多个进入和外出顺序流, 它就会同时
含有分支和汇聚功能
。 这时,网关会先汇聚所有拥有流程token的进入顺序流, 再根据条件判断结果为true的外出顺序流,为它们生成多条并行分支。
包含网关图形
并行网关显示为一个普通网关(菱形),内部包含一个圆圈图标。
当 main config 中的 表达式 条件返回的结果为真时 &执行 并行网关
结果为假时 执行 排他任务
具体的 流程 这里就不介绍了
事件网关描述
基于事件网关允许根据事件判断流向。网关的每个外出顺序流都要连接到一个中间捕获事件。 当流程到达一个基于事件网关,网关会进入等待状态:会暂停执行。 与此同时,会为每个外出顺序流创建相对的事件订阅。
注意基于事件网关的外出顺序流和普通顺序流不同。这些顺序流不会真的&执行&。 相反,它们让流程引擎去决定执行到基于事件网关的流程需要订阅哪些事件。 要考虑以下条件:
基于事件网关必须有两条或以上外出顺序流。
基于事件网关后,只能使用 intermediateCatchEvent 类型。 (activiti不支持基于事件网关后连接ReceiveTask。)
连接到基于事件网关的 intermediateCatchEvent 只能有一条进入顺序流。
事件网关图形
事件网关和其他BPMN网关一样显示成一个菱形, 内部包含指定图标。
这里 事件 太多了 &就 先到这里&&0.0
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
排版有问题
没有分页内容
视频无法显示
图片无法显示

我要回帖

更多关于 activiti 并行任务 的文章

 

随机推荐