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 ...
随机推荐
- 编译安装 Python3.6.1
操作系统 centos7.2 系统自带python版本 2.7.5 说明:编译python3的过程是简单的但比较慢,可以用连字符 && ,这样可以先去(忙其他的|喝茶|听音乐|聊妹), ...
- 零碎的JS基础
一.js的三种弹窗: 警告框 弹出警告alert() 确认框 有确认内容的框confirm()有两个值,true和false 当用户按下确认键后,打印tru ...
- composer安装报错Composer throws [ReflectionException] Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
解决方法:删除C:\Users\Administrator\AppData\Roaming\Composer\vendor\fxp下的文件
- angular中封装fancyBox(图片预览)
首先在官网下载最新版的fancyBox(一定要去最新网站,以前依赖的jquery版本偏低),附上链接:http://fancyapps.com/fancybox/3/ 然后在项目中引用jquery,然 ...
- SoapUI进行接口测试,怎么应对接口地址总是变化!
如果是没有代码能力的小白,要利用工具进行接口测试的时候,经常会遇到接口地址或者接口参数变化的问题,然后不得不在他们改了接口之后,就手动去改所有的请求链接地址和接口参数!1-5个请求,我们手动改还应付的 ...
- [2016-07-15]nuget包管理器控制台下的powershell脚本介绍
博客有阵子没打理了,今天刚恢复样式,但是标题还是不太正常,总算能凑合看看. 回到正题,最近为了能在VS的程序包管理器控制台上能方便的自定义ps脚本去调整project的package,就开始看powe ...
- Markdown最佳实践
Markdown 最佳实践 结合目前看到的信息,总结使用Markdown的最方便的方式. 我的需求是: 能够配合各种笔记软件使用,目前主要使用的是为知笔记和有道笔记.笔记的内容需要记录代码及数学公式, ...
- 【详细资料】ICN6211:MIPI DSI转RGB芯片简介
ICN6211功能MIPI DSI转RGB,分辨率1920*1200,封装QFN48
- 前端开发【第一篇:HTML】
HTML初识 1.什么是HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都 ...
- java中的抛出异常throws与throw
throws与throw throws是方法可能抛出异常的声明.(用在声明方法时,表示该方法可能要抛出异常)语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{.. ...