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 ...
随机推荐
- css的定位和浮动
定位 浮动 float代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- spring boot 登录注册 demo (四) -- 体验小结
之前没有折腾过Spring,直接上来怼Spring Boot异常痛苦,参考着官网的guide(https://spring.io/guides)写了几个demo: spring boot 跑起来确是方 ...
- Words used when reading Redis documents
Redis-----------------First pageevolution n.演变,进化,发展 closely adv.紧密地trade off 交换物品,权衡achieved adj.高度 ...
- 一起来学linux:用户与用户组
linux的文件属性以及管理方法和windows是完全不同的,所以学习linux首先来了解下用户以及文件权限是怎么回事 p { margin-bottom: 0.25cm; line-height: ...
- Centos 6.5 安装 python3.6.2、pip9.0.1、ipython6.1
说明:由于Cenots 6.5 默认是安装的 python 2.6.6 要想同一台主机使用多个python版本,不能影响原来的版本,因为系统很多还依赖于python,比如 yum python ...
- 一文看懂web服务器、应用服务器、web容器、反向代理服务器区别与联系
我们知道,不同肤色的人外貌差别很大,而双胞胎的辨识很难.有意思的是Web服务器/Web容器/Web应用程序服务器/反向代理有点像四胞胎,在网络上经常一起出现.本文将带读者对这四个相似概念如何区分. 1 ...
- Python练习2
[之前发布到本人的51cto博客,现转过来] 无意看到老男孩的博文:合格linux运维人员必会的30道shell编程面试题及讲解 http://oldboy.blog.51cto.com/256141 ...
- 第一行代码_activity生命周期
这类文章基本上已经是烂大街了,不过我今天仍然要给自己做一遍梳理,因为通过昨天的项目我发现自己还是不太懂activity的各个生命周期;各位看官勿喷; 七个生命周期及其作用 oncreat 完成初始化操 ...
- C++内存布局详解
一个由C/C++编译的程序除了存放函数二进制代码的程序代码段(code段)外,数据占用的内存大致分为以下几个部分: 1.栈区(stack) 存放局部变量.函数参数.返回数据.返回地址等.系统自动分配释 ...
- python利用urllib实现的爬取京东网站商品图片的爬虫
本例程使用urlib实现的,基于python2.7版本,采用beautifulsoup进行网页分析,没有第三方库的应该安装上之后才能运行,我用的IDE是pycharm,闲话少说,直接上代码! # -* ...