深入Activiti流程引擎:核心原理与高阶实战
上QQ阅读APP看书,第一时间看更新

前言

随着社会的发展与进步,企业规模的发展壮大,同行业、跨行业之间相互渗透,竞争日益激烈。在残酷的市场竞争中,为了赢得市场、获取利润,企业必须建立一种快速响应市场变化、降低生产成本、提高生产效率的方法和机制。

在社会化大生产的背景下,人们对工作的分工日益细化,很难有人能掌握所有生产流程和生产工艺。人与人之间必须互相合作,以便高效地组织生产。在生产过程中,信息在人与人之间流转,并分发给需要这些信息的人,人们协同工作,一起完成一项工作或任务。

近年来,随着计算机技术的进步、软件技术的发展,信息化技术在企业的生产、经营和管理过程中发挥着日益重要的作用。在这种背景下,工作流和BPM技术应运而生,实现“业务过程的部分或整体在计算机应用环境下的自动化”,从而“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行”,进而“实现某个预期的业务目标,或者促使此目标实现”。企业采用工作流或BPM技术来组织业务流程、辨别业务逻辑、管理组织结构,很大程度上解决了企业信息化过程中出现的各种问题。

BPM是企业流程建模和流程管理的核心技术之一,是根据企业业务环境的变化,推进人与人之间、人与系统之间、系统与系统之间的整合及调整的经营方法与解决方案的IT工具。BPM通过对企业内部及外部的业务流程整个生命周期进行建模、自动化、管理监控和优化,简化了企业信息化系统的开发流程,实现了企业业务管理的自动化,以快速响应市场变化,提高企业或组织的生产和运行效率,优化业务流程模型,实现企业流程再造。BPM在企业中应用十分广泛,凡是存在业务流程的地方都可以使用BPM进行管理。BPM早期主要应用于OA、CRM等流程审批场景,提高了企业的生产效率;当下主要在电商、金融等领域用于处理复杂的业务形态变化问题,在很多公司的大项目中扮演重要角色。

Activiti是Alfresco发布的BPM框架,覆盖了业务流程管理、工作流、服务协作等领域,是一款开源的、灵活的、易扩展的可执行流程语言框架。Activiti是一款基于Apache许可的开源BPM平台,从基础开始构建,旨在提供对BPMN 2.0标准的支持,包括对OMG的支持,以应对新技术的挑战,提供技术实现,目前已得到广泛应用。借助Activiti,可以将业务系统中复杂的业务流程抽取出来,然后使用建模语言BPMN 2.0对其进行定义。业务流程将按照预先定义的流程执行,这就实现了对系统流程的管理。这可以减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,降低系统开发维护成本。

本书依据BPMN 2.0规范,贯彻基于业务流程开发的思想和方法,重点讲解Activiti的基础知识、开发技能,以及使用技巧,以使读者能够快速、高效、全面地掌握Activiti从入门到高级应用的相关知识。

本书主要内容

本书共包含4篇:基础理论篇(包括第1~3章),主要介绍BPM的发展历程、行业规范、管理和技术体系等,让读者建立对BPM的基本认识;常规应用篇(包括第4~20章),主要介绍Activiti各种功能和特性的配置和使用,让读者掌握Activiti的基础用法;高级实战篇(包括第21~27章),立足实战,主要介绍如何基于Activiti的扩展特性实现对多种复杂流程场景和能力的支持;架构扩展篇(包括第28~30章),主要介绍提高Activiti性能和增大其容量的措施,并提出一套多引擎架构方案来支撑大容量、高并发和高稳定流程场景。

全书共分为30章,概要如下。

第1章主要介绍流程的基本概念,包括流程和流程管理的由来与定义、流程的构成要素与特征、流程分类与分层方法等,还简要介绍了流程管理的现状,帮助读者建立对流程及流程管理的基本认识。

第2章主要介绍BPM技术的发展历程。该章先详细介绍了BPM核心组件工作流技术,包括工作流技术的发展历程、参考模型、管理系统及常见的开源框架;然后详细介绍了工作流领域的BPMN 2.0规范,让读者更深入地了解BPM技术的发展历程及现状。

第3章主要介绍BPM管理体系构建方法论、BPM产品构成,以及流程全生命周期管理各个阶段相应的方法、策略、原则等理论知识。这些知识都是BPM管理体系发展历程中总结的宝贵经验,可为现代企业实施BPM提供一些参考和指引。

第4章主要介绍Activiti开发前的基础准备工作,包括JDK的安装与配置、MySQL的下载与安装、Tomcat的安装与配置,以及Activiti的安装与配置,最后通过一个简单流程的配置和运行向读者初步展示Activiti工作流引擎的使用方法。

第5章主要介绍在IDEA和Eclipse中集成安装Activiti流程设计插件的过程,并讲解了用流程设计插件绘制流程图的方法。

第6章主要介绍Activiti的核心架构。该章先详细介绍了Activiti架构、数据库设计及其设计模式,然后讲解了流程部署、流程启动、节点流转、网关控制等核心代码,以期帮助读者初步了解Activiti的工作机制和原理。

第7章主要介绍Activiti工作流引擎的配置方法,包含数据库配置、事务配置、历史级别配置和Activiti内置服务配置等,并通过一个项目示例,引领读者掌握Acitiviti的配置和使用。

第8章主要介绍Activiti核心接口的功能及用法。Activiti中的流程部署、流程发起、任务创建与办理等重要操作都是通过这些核心接口提供的服务来实现的。熟练掌握Activiti各个核心接口的用法,能够帮助读者更好地学习和应用Activiti框架。

第9章主要介绍Activiti内置的用户、组及其关系,以及使用IdentityService服务接口对用户和组进行操作的方法和技巧。

第10章主要介绍Activiti加载资源文件进行流程部署的过程,以及流程定义信息的各类操作,并通过具体示例详细介绍了它们的用法。

第11章主要介绍Activiti支持的开始事件和结束事件。该章详细介绍了各种事件的基本信息、应用场景和使用过程中的注意事项,并通过项目示例演示了其用法。

第12章主要介绍Activiti支持的BPMN 2.0规范中定义的边界事件和中间事件,以及它们的特点和适用场景。边界事件是依附在流程活动上的“捕获型”事件,中间事件用来处理流程执行过程中抛出、捕获的事件。

第13章主要介绍Activiti的3种任务节点——用户任务、手动任务、接收任务,并展示相关应用场景。用户任务用于表示需要人工参与完成的工作,手动任务是会自动执行的一种任务,接收任务是会使流程处于等待状态并需要触发的任务,3种任务可以用于实现不同场景的流程建模。

第14章主要介绍Activiti的另3种任务节点——服务任务、脚本任务、业务规则任务,并展示相关应用场景。服务任务、脚本任务和业务规则任务都是无须人工参与的自动化任务,其中服务任务可自动执行一段Java程序,脚本任务可用于执行一段脚本代码,而业务规则任务可用于执行一条或多条规则。

第15章主要介绍Activiti扩展任务,如邮件任务、Web Service任务、Camel任务、Mule任务和Shell任务,以及它们的特性和应用场景。

第16章主要介绍顺序流和网关这两种BPMN元素。顺序流是连接两个流程节点的连线,流程执行完一个节点后,会沿着节点的所有外出顺序流继续执行;网关(gateway)是工作流引擎中重要的一个路径决策,用来控制流程中的流向,常用于拆分或合并复杂的流程流场景。

第17章主要介绍流程拆解和布局的3种方式:子流程、调用活动和泳池泳道。可以通过子流程或者调用活动将不同的阶段规划为一个子流程作为主流程的一部分,或通过泳池泳道对流程节点进行区域划分。

第18章主要介绍Activiti监听器及其适用场景。执行监听器、任务监听器允许在流程、任务执行的过程中,在发生对应的流程、任务相关事件时执行特定的Java程序或者表达式,而全局事件监听器是引擎范围的事件监听器,可以监听到所有Activiti的操作事件,并且可以判断事件类型,进而执行不同的业务逻辑。

第19章主要介绍内置表单和外置表单。这两种表单只是在表单定义方式上有所差别,流程的运转机制完全相同。它们各有优缺点,可根据具体场景灵活选用。

第20章主要介绍多实例的概念和配置,以及其应用场景,并结合具体案例介绍了多实例的使用方法。

第21章主要介绍Spring Boot的优点,并对Spring Boot的配置解析和starter做了详细讲解,实现了Spring Boot与Activiti的集成。

第22章主要介绍Activiti Modeler集成到已有Web应用系统中的详细过程,从而能够支持技术或业务人员基于浏览器在线进行流程设计。

第23章主要介绍自定义ProcessEngineConfiguration扩展、自定义流程元素属性、自定义流程活动行为、自定义事件和自定义流程校验等多种自定义扩展Activiti引擎的方式。

第24章主要介绍替换Activiti身份认证服务、适配国产数据库和自定义查询等多种扩展Activiti引擎的方式。

第25章主要介绍自定义流程活动、更换默认Activiti流程定义缓存和手动创建定时任务等多种扩展Activiti引擎的方式。

第26章主要介绍通过对Activiti进行扩展封装,从而使其支持动态跳转、任务撤回和流程撤销等各类本土化业务流程场景的方法。这种方法在实际应用中很有代表性。

第27章主要介绍通过对Activiti进行扩展封装,从而使其支持通过代码创建流程模型、为流程实例动态增加临时节点、流程节点自动跳过、会签加签和会签减签等各类本土化业务流程场景的方法。

第28章主要介绍Activiti的性能和容量瓶颈及其解决方案。该章从历史数据异步化、自定义ID生成器和基于MQ的定时器这3个方面,对Activiti底层逻辑进行了调整和优化,以提高Activiti的性能和增大其容量。

第29章主要介绍Activiti在大数据、高并发场景下的问题,以及传统分库分表方式在流程领域的局限性,并创造性地提出基于Activiti的多引擎架构方案,通过流程建模服务、路由表和网关服务,完成一个初阶多引擎架构的实现。

第30章主要介绍初阶版多引擎架构问题和解决方案。

本书约定

本书有如下约定。

本书的示例代码均在JDK1.8中运行,使用的数据库均为H2或MySQL数据库。

本书的示例代码基于IntelliJ IDEA构建,使用Maven管理JAR包依赖,使用Junit管理测试用例,通过Lombok注解简化Java类样板代码(如Getter&Setter、构造函数和日志配置等)。

本书中列举的Java源码省略了通过import导入指定包下的类或接口的部分,完整内容参见本书配套资源。

本书中列举的XML源码(包括但不限于Maven配置文件、Activiti配置文件、Spring配置文件和流程模型文件等)如非特殊需要,均省略了命名空间配置,完整内容参见本书配套资源。

本书示例程序源代码

本书所有示例程序的源代码均以配套资源的方式提供,可通过异步社区下载(参见“资源与支持”页)。每章的示例代码均对应一个独立的IDEA项目,导入IDEA后即可使用。

贺 波  

2022年5月于北京