初始Activiti

工作流,简单的理解就是工作流程,工作流在我们日常生活中无处不在,例如说:员工请假,首先需要提交请假申请,然后提交的申请转到上级领导手里,领导检查过后并同意,最后通知员工领导同意该请假申请,这一系列的流程就相当于一个工作流程,这一切的工作都会在上级确认并同意后自动运行,这就是工作流技术。Georgakopoulos给出的工作流定义:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完。

常见的oa系统等就经常用到工作流

常见开源工作流引擎框架:OSWorkFlow、jBPM(jboss business process management)、Activity(对jBPM升级)工作流

工作流引擎:ProcessEngine 对象,这是Activity 的核心,负责生成流程运行时的各种实例即数据、监控和管理流程的运行。

各个Service的作用:

RepositoryService

管理流程定义

RuntimeService

执行管理,包括启动、推进、删除流程实例等操作

TaskService

任务管理

HistoryService

历史管理(执行完的数据管理)

IdentityService

组织机构管理

FormService

一个可选服务,任务表单管理

ManagerService

activiti的引擎管理类

简单介绍:

1)RepositoryService

是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工

作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计

算机。除了部署流程定义以外还可以:查询引擎中的发布包和流程定义。

暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操

作了,激活是对应的反向操作。获得多种资源,像是包含在发布包里的文件, 或引

擎自动生成的流程图。获得流程定义的pojo版本,可以用来通过java解析流程,而不必通过xml。

2)RuntimeService

Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息

3)TaskService

Activiti的任务管理类。可以从这个类中获取任务的信息。

4)HistoryService

Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根

据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实

例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。

5)ManagementService

Activiti的引擎管理类,提供了对 Activiti 流程引擎的管理和维护功能,这些功能不

在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。

BPM(Business Process Management),即业务流程管理,是一种规范化的构造端到端的业务流程,以持续的提高组织业务效率。常见商业管理教育如EMBA、MBA等均将BPM包含在内

业务流程建模与标注(Business Process Model and Notation,BPMN),描述流程的基本符号,包括这些图元如何让组合成一个业务流程图(Business Process Diagram),整个BPMN是用一组符号来描述业务流程中发生的各种事件的。BPMN通过在这些符号事件之间连线来描述一个完整的业务流程。

接下来我们来大致了解一下常用符号的含义:

1)事件Event

事件是驱动工作流发展的核心对象,在工作流的流程定制中会经常看到。

2)活动Activity

活动是工作或任务的一个通用术语。一个活动可以是一个任务,也可以是当前流程

的子处理流程。并且,活动会有不同的类型。例如Activiti中定义了

UserTask,ScriptTask,ServiceTask,MailTask等等多种类型。这些活动是构成整个业

务流程的主体

3)网关GateWay

网关是用来处理角色的,他决定了工作流的业务走向。有几种常用的网关需要了解

一下:

3.1)排他网关

只有一条路径会被选择。流程执行到该网关时,会按照输出流的顺序逐个计算,当

条件的结果为true时,继续执行当前网关的输出流。如果有多条线路计算结构都是true,则会执行第一个值为true的路线。如果所有网关计算结果都没有true,引擎会抛出异常。排他网关需要和条件顺序流结合使用,default属性指定默认顺序流,当所有的条件不满足时会执行默认顺序流。

3.2)并行网关

所有路径会被同时选择。并行执行所有输出顺序流,为每一条顺序流创建一个并行执行路线。最终,在所有的执行路线都执行完后才继续向下执行。

3.3)包容网关

可以同时执行多条路线。相当于是排他网关和并行网关的结合。可以在网关上设置条件,计算每条路线上的表达式。当表达式计算结果为true时,创建一个并行线路并继续执行。最终,当所有需要执行的线路都执行完成后才继续向下执行。

3.4)事件网关

专门为中间捕获事件而设置。允许设置多个输出流指向多个不同的中间捕获事件。

当流程执行到事件网关后,流程出于等待状态,需要等待抛出对应的事件才能将等

待状态转换为活动状态。

Activity的后台是有数据库的支持,所有的表都以ACT开头。表名的第二部分是表示表的用途的两个字母标识。用途也和服务的API对应

Activity的工作流数据库有23张表

-act_ge_* :通用数据,用于不同场景下,如存放资源文件

-act_hi_* :HI表示history。这些表包含历史数据,比如历史流程实例,变量,任务等等。

-act_re_* :RE表示repository。这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等)

-act_ru_* :RU表示runtime。这些运行时的表,包含流程实例,任务,变量,异步任务等运行中的数据.Activity只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。这样运行时表就可以一直很小速度很快

-act_id_* :ID表示identity,这些表包含身份信息,比如用户,组等等

1)表结构:

1.1)资源流程规则表

act_re_deployment 部署信息表

act_re_model 流程设计模型部署表

act_re_procdef 流程定义数据表

1.2)运行时数据库表

act_ru_execution 运行时流程执行实例表

act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息

act_ru_task 运行时任务节点表

act_ru_variable 运行时流程变量数据表

1.3)历史数据库表

act_hi_actinst 历史节点表

act_hi_attachment 历史附件表

act_hi_comment 历史意见表

act_hi_identitylink 历史流程人员表

act_hi_detail 历史详情表,提供历史变量的查询

act_hi_procinst 历史流程实例表

act_hi_taskinst 历史任务实例表

act_hi_varinst 历史变量表

1.4)组织机构表

act_id_group 用户组信息表

act_id_info 用户扩展信息表

act_id_membership 用户与用户组对应信息表

act_id_user 用户信息表

1.5)通用数据表

act_ge_bytearray 二进制数据表

act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录

Activity核心配置文件,配置流程引擎创建工具的基本参数和数据库连接参数

通常使用Activiti时包含以下几个步骤:

.部署Activiti:Activiti包含一堆jar包,因此需要把业务系统和Activiti的环境集成在一起进行部署。

.定义流程:使用Activiti的建模工具定义业务流程.bpmn文件。

.部署流程定义:使用Activiti提供的API把流程定义内容存储起来,在Activiti执行过程汇总可以查询定义的内容。Activiti是通过数据库来存储业务流程的。

.启动流程实例:流程实例也叫ProcessInstance。启动一个流程实例表示开始一次业务流程的运作。例如员工提交请假申请后,就可以开启一个流程实例,从而推动后续的审批等操作。

.用户查询代办任务(task):因为现在系统的业务流程都交给activiti管理,通过activiti就可以查询当前流程执行到哪个步骤了。当前用户需要办理哪些任务也就同样可以由activiti帮我们管理,开发人员不需要自己编写sql语句进行查询了

.流程结束:当任务办理完成没有下一个任务节点的时候,这个流程实例就执行完成了。

Original: https://www.cnblogs.com/sakela/p/16611757.html
Author: 萨科拉
Title: 初始Activiti

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621942/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Flutter 发布 pub 命令

    1.发布之前,不规范检测,类似lint. 2.发布 如果发布失败,遇见code 1,用下面命令: 注意:FQ,否则超时失败 Original: https://www.cnblog…

    Java 2023年5月29日
    084
  • Java动态脚本Groovy,高级啊!

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 简介: Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编…

    Java 2023年6月5日
    0101
  • Java-Security(三):加密的用法、PasswordEncoder类源码分析

    在第一篇文章,我们展示了一个demo,其中讲到了对用户的密码进行了明文展示的用法,其实那么做是不安全的,在实际项目中往往会采用各种加密方法(比如:bcrypt,md5,sha1,s…

    Java 2023年5月29日
    068
  • Dos基本命令

    打开CMD的方式 开始 >> Windows系统 >> 命令提示符 Win键+R键 >> 输入cmd打开控制台(推荐使用) 在任意文件夹下面,按…

    Java 2023年6月6日
    093
  • 用栈模拟计算器以及中缀转后缀表达式(逆波兰表达式)

    后缀表达式(逆波兰表达式)运算方法 从左向右读取表达式 遇到数字就压入栈中 遇到运算符就弹出栈顶和次顶元素。用 次顶元素 运算符 栈顶元素,并将运算结果压入栈中,直到栈为空,最终结…

    Java 2023年6月16日
    092
  • Java源码赏析(二)Java常见接口

    一、Comparable接口 该接口主要用于排序 二、Serializable 与 Externalizable 接口 Serializable接口的实现类主要配合 SerialV…

    Java 2023年6月8日
    066
  • java.lang.NoClassDefFoundError 解决方案

    http://stackoverflow.com/questions/9870995/android-java-lang-noclassdeffounderror 像网络了上说的一…

    Java 2023年5月29日
    072
  • MyBatis学习大全(狂神秦疆版)

    一、 MyBatis 1.什么是Mybaits 概念:MyBatis 是一款优秀的 持久层框架 它支持自定义 SQL、存储过程以及高级映射。 MyBatis 免除了几乎所有的 JD…

    Java 2023年6月8日
    090
  • Refresh Java

    Thinking in Java 总结 当你的知识来源于实践, 你可能会忽略很多细节. 当你的知识来源于阅读, 你可能会很快的忘掉. 那么, 不如在空闲之余, 浏览一遍, 把觉得有…

    Java 2023年5月29日
    074
  • Spring Boot 入门(十四)使用dubbo(用redis作为注册中心)

    结尾附源码 redis安装教程参考:Spring Boot 入门(三)部署Redis服务 新建一个maven项目,划分三层 common-公共:存放服务声明 comsuer-客户端…

    Java 2023年6月5日
    099
  • 客观的聊一聊,裁员这件糟心事

    时间在走,环境在变,互联网有点卷不动了; 捋一捋最近互联网上关于职场的热点:裁员,优化,毕业,向社会输送人才,求职;你方唱罢他方登场,持续横跳热搜; 年初到现在五月底,身边已经有好…

    Java 2023年6月15日
    095
  • 双亲委派机制

    双亲委派机制 原理 1、一个类加载器接收到类加载请求,它自己并不会先去加载,而是把这个请求委托给父类的加载器去执行 2、如果父类的加载器还有其父类加载器,则进一步向上委托,一次递归…

    Java 2023年6月14日
    079
  • 项目十大管理(四)成本管理

    成本管理也就是 尽量让项目实际进行中的成本控制在预算范围之内,确保在预算之内完成项目。 主要有这样四个主要子过程: 规划成本管理、 估算成本、 制定预算和 控制成本。 关于成本的类…

    Java 2023年6月6日
    089
  • 【SpringCloud-Alibaba系列教程】8.一文学会使用sentinel

    Sentinel 介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统…

    Java 2023年6月5日
    0102
  • VS Code常用插件

    VS Code常用插件 一、插件的下载 打开VScode之后点击右侧带有小方块的图标在上方的输入框中输入想要下载的插件的名称即可 二、插件的种类 Chinese (Simplifi…

    Java 2023年6月13日
    098
  • 对多线程原子性的理解

    多线程原子性的理解:一个操作要么全部执行完毕,不会受到干扰而被中断;要么全都不执行 对于多线程中操作共享变量的操作,要保证它的原子性。 以下是对一个非原子性操作的分析: 在一个类中…

    Java 2023年6月15日
    096
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球