1 Flowable process engine允许我们创建ProcessEngine 对象和使用 Flowable 的API

ProcessEngine是线程安全的,他是通过 ProcessEngineConfiguration 进行创建的。ProcessEngineConfiguration 可以对 process engine 进行配置和微调。

ProcessEngineConfiguration 是通过 XML 配置文件或者通过编程方式进行创建,最少配置是配置好数据库链接。例子如下

package org.flowable;

import org.flowable.engine.ProcessEngine;
import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration; public class HolidayRequest {
public static void main(String[] args) {
ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
.setJdbcUrl("jdbc:h2:mem:flowable;DB_CLOSE_DELAY=-1")
.setJdbcUsername("sa")
.setJdbcPassword("")
.setJdbcDriver("org.h2.Driver")
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); ProcessEngine processEngine = cfg.buildProcessEngine();
}
}

说明:如果是spring环境,配置文件类 StandaloneProcessEngineConfiguration 可以替换成 SpringProcessEngineConfiguration 。

2 部署流程定义到 flowable engine,此时需要用到 RepositoryServiceRepositoryService 可以通过 processEngine 获得。通过向 RepositoryService 传递流程定义文件来获得部署对象。Deployment

部署流程意味着:

1)流程定义会持久化到数据库中

2)BPMN 2.0 process XML 将会被解析成内存对象模型,该模型可以被 Flowable API 管理。

3 开始一个流程实例

到现在流程引擎中已经有了流程定义,开始流程实例之前需要一些流程变量,通过 RuntimeService 启动一个流程实例。初始变量类型是  java.util.Map,向RuntimeService 对象传递初始数据,而变量的 key 和 流程定义文件 BPMN 2.0 XML 中的 id 相匹配。启动一个流程实例代码示例如下:

RuntimeService runtimeService = processEngine.getRuntimeService();

Map<String, Object> variables = new HashMap<String, Object>();
variables.put("employee", employee);
variables.put("nrOfHolidays", nrOfHolidays);
variables.put("description", description);
ProcessInstance processInstance =
runtimeService.startProcessInstanceByKey("holidayRequest", variables);

RuntimeService  开启一个流程是通过流程定义中的 ID ,在 Flowable 中称作是key。

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");

4 查询和完成任务

当某一任务赋给一组人时,使用常量即可,如下:

<userTask id="approveTask" name="Approve or reject request" flowable:candidateGroups="managers"/>

当要赋给流程变量中的摸一个人时,使用格式如下

<userTask id="holidayApprovedTask" name="Holiday approved" flowable:assignee="${employee}"/>

4.1 当要查询待办任务时,需要使用 TaskService  ,代码示例如下:

TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("managers").list();
System.out.println("You have " + tasks.size() + " tasks:");
for (int i=; i<tasks.size(); i++) {
System.out.println((i+) + ") " + tasks.get(i).getName());
}

4.2 编写java自动化Service,在BPMN 2.0中称之为 Service Task,在流程定义中代码如下

<serviceTask id="externalSystemCall" name="Enter holidays in external system"
flowable:class="org.flowable.CallExternalSystemDelegate"/>

其中代理类 CallExternalSystemDelegate 需要实现 org.flowable.engine.delegate.JavaDelegate 接口,此时,当流程到该任务时,会实例化该类并执行 execute 方法

flowable学习笔记-简单流程概念介绍的更多相关文章

  1. 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍

    第3章. 基础概念介绍 本章将介绍GStreamer的基本概念. 理解这些概念对于你后续的学习非常重要,因为后续深入的讲解我们都假定你已经完全理解了这些概念. 3.1. 元件(Elements) 元件 ...

  2. Python学习笔记_01:基本概念介绍

    目录 1.Python语言简介 2.Python中常用数据结构 2.1什么是列表? 2.2什么是元组? 2.3什么是字典? 2.4索引及分片 3.其它基本概念 3.1数据类型和变量 3.2生成器 3. ...

  3. IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试

    IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试 目的不是为了编写TSC2007驱动,是为了学习IIC驱动的编写,读一下TSC2007的ADC数据进行练习,, Linux主机驱动和外设驱 ...

  4. JavaScript:学习笔记(2)——基本概念与数据类型

    JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...

  5. Java学习笔记之---流程控制语句

    Java学习笔记之---流程控制语句 (一)循环语句 (1)if语句 if(布尔表达式){ //如果布尔表达式为true将执行的语句 } if(i%2!=0){ System.out.println( ...

  6. [原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. Python学习笔记—Python基础1 介绍、发展史、安装、基本语法

    第一周学习笔记: 一.Python介绍      1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

  8. es6学习笔记-class之一概念

    前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...

  9. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

随机推荐

  1. ThreadLocal与Synchronized

    package com.demo; import org.hibernate.HibernateException; import org.hibernate.classic.Session; imp ...

  2. Android——代码中使用颜色值

    android中设置颜色时,可以直接使用颜色值来设置: view.setBackgroundColor(Color.parseColor("#颜色值"));

  3. 将ASP.NET用户控件转化为自定义控件

    将ASP.NET用户控件转化为自定义控件 作者:Kevin Cheng (程建和) 最后修改时间:2006-03-14 概述:如何将ASP.NET用户控件移植为ASP.NET自定义控件 关键字:Asp ...

  4. SpringCloud学习资料

    CSDN博客:http://blog.csdn.net/k21325/article/details/52789829 http://blog.csdn.net/qq_26562641/article ...

  5. 一个进程(Process)最多可以生成多少个线程(Thread)

    1.进程中创建线程的限制 默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际 ...

  6. vmware网络模式仅主机模式linux不能ping通window

    问题描述 vmware在使用仅主机模式,新建的linux虚拟机,不能ping通window本机(宿主主机).....(这不蛋疼吗...) 注意:后面的搞定后的结果 解决方案 开启家庭组的,网络发现功能 ...

  7. PHP哈希表碰撞攻击

    哈希表是一种查找效率极高的数据结构,PHP中的哈希表是一种极为重要的数据结构,不但用于表示数组,关联数组,对象属性,函数表,符号表,还在Zend虚拟机内部用于存储上下文环境信息(执行上下文的变量及函数 ...

  8. Redis-Redi事务注意事项

    当客户端处于非事务状态下时, 所有发送给服务器端的命令都会立即被服务器执行.但是, 当客户端进入事务状态之后, 服务器在收到来自客户端的命令时, 不会立即执行命令, 而是将这些命令全部放进一个事务队列 ...

  9. 持续集成工具hudson

     2008-07-08  一.什么是持续集成 持续集成的核心概念 CI 过程会经常构建软件组件:在许多情况下,每当源代码存储库(比如 Subversion 或 ClearCase)中的代码发生变化时, ...

  10. Comparable 与 Comparator

    Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序 ...