Activiti-02-activiti api
流程引擎API和服务
通过ProcessEngine你可以获取各种服务,它和所有的服务对象都是线程安全的,因此整个整个应用中可以只有一份。
ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService();RepositoryService repositoryService = processEngine.getRepositoryService();TaskService taskService = processEngine.getTaskService();ManagementService managementService = processEngine.getManagementService();IdentityService identityService = processEngine.getIdentityService();HistoryService historyService = processEngine.getHistoryService();FormService formService = processEngine.getFormService(); ProcessEngines 类会扫描 所有的activiti.cfg.xml和activiti-context.xml。对于所有activiti.cfg.xml文件流程引擎将创建典型的Activiti方式:ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream).buildProcessEngine().
对于所有的 activiti-context.xml 文件, 流程引擎将以spring方式创建: 首先创建Spring应用程序上下文,然后流程引擎获得应用程序上下文。
.
所有的服务都是无状态的
•RepositoryService: Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等 ),这些文件都存储在 Activiti 内建的 Repository 中。Repository Service 提供了对 repository 的存取服务。
Exception机制
在Activiti中,最基础的异常类org.activiti.engine.ActivitiException,子类有ActivitiWrongDbException ActivitiOptimisticLockingException
ActivitiClassLoadingException ActivitiObjectNotFoundException ActivitiIllegalArgumentException ActivitiTaskAlreadyClaimedException
部署过程
假如有下面这样的流程定义文件 <?xml version="1.0" encoding="UTF-8"?> <definitionsid="definitions" targetNamespace="http://activiti.org/bpmn20" xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:activiti="http://activiti.org/bpmn"><processid="vacationRequest"name="Vacation request"> .... </process> </definitions> 部署的Java代码如下:
ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment().addClasspathResource("org/activiti/test/VacationRequest.bpmn20.xml").deploy();
Log.info("Number of process definitions: "+ repositoryService.createProcessDefinitionQuery().count());
启动流程实例
//map中的变量是用来替换流程定义.xml文件中的表达式
Map<String,Object> variables =newHashMap<String,Object>();
variables.put("employeeName","Kermit");
variables.put("numberOfDays",newInteger(4));
variables.put("vacationMotivation","I'm really tired!");
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("vacationRequest", variables);
// Verify that we started a new process instanceLog.info("Number of process instances: "+ runtimeService.createProcessInstanceQuery().count());
完成任务
当流程开始时,第一步便是用户任务.这一步必须由一个系统用户完成. 事实上,一个任务箱中列出了该用户需要处理的所有任务.
// Fetch all tasks for the management group
TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("management").list();
for(Task task : tasks){
Log.info("Task available: "+ task.getName());
}
//任务的完成
Task task = tasks.get(0);
Map<String,Object> taskVariables =newHashMap<String,Object>();
taskVariables.put("vacationApproved","false");
taskVariables.put("managerMotivation","We have a tight deadline!");
taskService.complete(task.getId(), taskVariables);
过程继续往下走,
挂起和激活一个过程(Suspending and activating a process)
当一个流程被挂起时,新的流程不能被创建,因为一个异常将被抛出
repositoryService.suspendProcessDefinitionByKey("vacationRequest"); //挂起流程定义try{ runtimeService.startProcessInstanceByKey("vacationRequest");}catch(ActivitiException e){ e.printStackTrace();}重新激活一个流程定义 repositoryService.activateProcessDefinitionXXX ()
挂起一个流程实例也是可能的,例如完成任务时抛出一个异常
runtimeService.suspendProcessInstance ()
激活流程实例 runtimeService.activateProcessInstanceXXX
Activiti-02-activiti api的更多相关文章
- Activiti学习——Activiti与Spring集成
转: Activiti学习——Activiti与Spring集成 与Spring集成 基础准备 目录结构 相关jar包 Activiti的相关jar包 Activiti依赖的相关jar包 Spring ...
- Activiti(1) - TaskRuntime API 入门
目录 TaskRuntime API pom.xml 注册TaskRuntime实例 角色与分组 任务事件监听器 DemoApplication 源码 Activiti 是一个自动化工作流框架.它能帮 ...
- activiti 6 查询api
1 activiti 查询多字段排序 每个字段都要有 sortBy -> desc/asc [sortBy -> desc/asc] [sortBy -> desc/asc] 2 使 ...
- Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作
可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal error war ...
- (二)Activiti之——activiti数据库表介绍
1. 数据库表的命名 Activiti的表都以ACT_开头. 第二部分是表示表的用途的两个字母标识. 用途也和服务的API对应. ACT_RE_*: 'RE'表示repository. 这个前缀的表包 ...
- idea 2019 集成activiti, idea activiti 新建bpmn文件, 解决idea activiti中文乱码
idea 在线安装activiti插件 1. File-->Settings 2. 点击Plugins, 右侧界面点击Marketplace后在搜索框搜索 actiBPM 注: 网络原因没有加载 ...
- 引入Activiti配置文件activiti.cfg.xml
前面我们用代码实现了生成25张activiti表,今天我们用Activiti提供的activiti.cfg.xml配置文件来简化实现前面的功能: 官方文档参考地址:http://activiti.or ...
- 【Activiti学习之四】Activiti API(三)
环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.启动流程 多种方式启动 package com.wjy.pro; import or ...
- 【Activiti学习之三】Activiti API(二)
环境 JDK 1.8 MySQL 5.6 Tomcat 7 Eclipse-Luna activiti 6.0 一.流程定义1.中止与激活流程定义 package com.wjy.pd; import ...
- 工作流引擎Activiti 专题
https://github.com/Activiti/Activiti Quick Start Guide This quick start assumes: Familiarity with Ma ...
随机推荐
- 安装配置 flannel - 每天5分钟玩转 Docker 容器技术(59)
上一节我们部署了 etcd,本节安装和配置 flannel. build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 buil ...
- 【Linux】文件存储结构
大部分的Linux文件系统(如ext2.ext3)规定,一个文件由目录项.inode和数据块组成: 目录项:包括文件名和inode节点号. Inode:又称文件索引节点,包含文件的基础信息以及数据块 ...
- ssh环境的搭建,基于注解和配置文件使用
搭建spring.Struts2.hibernate三大框架的环境 这里分两部分来讲:一.用myeclipse 2014 快速搭建环境,非常快捷, 大部分配置文件信息系统都帮我们写好,建议老手使用 二 ...
- struts2-Action处理请求参数
struts2 和 MVC 定义关系 StrutsPrepareAndExecuteFilter : 控制器 JSP : 视图 Action : 可以作为模型,也可以是控制器 struts2 Acti ...
- python基础学习(十二)
模块 前面有简单介绍如何使用import从外部模块获取函数并且为自己的程序所用: >>> import math >>> math.sin(0) #sin为正弦函数 ...
- Tornado-数据库(torndb包)
1.torndb数据库简介 在Tornado3.0版本以前提供tornado.database模块用来操作MySQL数据库,而从3.0版本开始,此模块就被独立出来,作为torndb包单独提供. ...
- MySQL(三)之SQL语句分类、基本操作、三大范式
一.SQL语句的分类 DML(Data Manipulation Langauge,数据操纵/管理语言) (insert,delete,update,select) DDL(Data ...
- Angular中Constructor 和 ngOnInit 的本质区别
在Medium看到一篇Angular的文章,深入对比了 Constructor 和 ngOnInit 的不同,受益匪浅,于是搬过来让更多的前端小伙伴看到,翻译不得当之处还请斧正. 本文出处:The e ...
- 面向对象五大原则(SRP、OCP、LSP、DIP、ISP)
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt173 OO的五大原则是指 1. SRP(Single Responsibil ...
- MySQL的JOIN(四):JOIN优化实践之快速匹配
这篇博文讲述如何优化扫描速度.我们通过MySQL的JOIN(二):JOIN原理得知了两张表的JOIN操作就是不断从驱动表中取出记录,然后查找出被驱动表中与之匹配的记录并连接.这个过程的实质就是查询操作 ...