activiti总结2
根据流程号查询失败原因。
activiti重试机制。齿轮节点、邮件节点、任务节点。ACT_HI_ACTINST历史表。ACT_RU_EXECUTION运行表。看图。
在Eclipse里面自己写个测试方法(main方法,或者junit Test方法)。可以暂时不用管activiti页面上操作的丰富的内容。通过这种方式,在每个结点加上Sleep(60)方法。这样就可以在mysql数据库的act_ru_execution表跟踪到内容。
下面是不使用spring容器的测试activiti的方法。(activitiGuide_NoSpringEnvironment)
/**
*
*/
package main; import java.util.List; import org.apache.ibatis.type.TypeHandler;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.task.Task; /**
* @author Administrator
*
*/
public class TenMinuteTutorial { public static void main(String[] args) { // Create Activiti process engine
ProcessEngine processEngine = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration()
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
.setJdbcDriver("com.mysql.jdbc.Driver")
.setJdbcUrl("jdbc:mysql://localhost:3306/activiti")
.setJdbcUsername("root")
.setJdbcPassword("")
.setJobExecutorActivate(false)//ture和false有什么区别
.buildProcessEngine();
/*ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration()
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
.setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000")
.setJobExecutorActivate(true)
.buildProcessEngine();*/
//ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// Get Activiti services
RepositoryService repositoryService = processEngine.getRepositoryService();
RuntimeService runtimeService = processEngine.getRuntimeService(); // Deploy the process definition
repositoryService.createDeployment()
.addClasspathResource("resource/FinancialReportProcess.bpmn20.xml")
.deploy(); // Start a process instance
String procId = runtimeService.startProcessInstanceByKey("financialReport").getId(); // Get the first task
TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("accountancy").list();
for (Task task : tasks) {
System.out.println("Following task is available for accountancy group: " + task.getName()); // claim it
taskService.claim(task.getId(), "fozzie");
} // Verify Fozzie can now retrieve the task
tasks = taskService.createTaskQuery().taskAssignee("fozzie").list();
for (Task task : tasks) {
System.out.println("Task for fozzie: " + task.getName()); // Complete the task
taskService.complete(task.getId());
} System.out.println("Number of tasks for fozzie: "
+ taskService.createTaskQuery().taskAssignee("fozzie").count()); // Retrieve and claim the second task
tasks = taskService.createTaskQuery().taskCandidateGroup("management").list();
for (Task task : tasks) {
System.out.println("Following task is available for accountancy group: " + task.getName());
taskService.claim(task.getId(), "kermit");
} // Completing the second task ends the process
for (Task task : tasks) {
taskService.complete(task.getId());
} // verify that the process is actually finished
HistoryService historyService = processEngine.getHistoryService();
HistoricProcessInstance historicProcessInstance =
historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).singleResult();
System.out.println("Process instance end time: " + historicProcessInstance.getEndTime());
} }
.setJobExecutorActivate(false)//ture和false有什么区别
采用spring容器的方式。ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();这行代码会自动寻找activiti.cfg.xml
。
activiti.cfg.xml
里面配置的bean的id为<beanid="processEngineConfiguration",有许多类可以用来定义这个processEngineConfiguration
。那么spring容器用哪个类?
org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration
org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration
org.activiti.spring.SpringProcessEngineConfiguration 这个专用于spring环境,其他的类不知道能不能用于spring环境。需要验证。
org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration
如果activiti执行出现异常,会导致以下情况:
act_ru_task表出现多条数据,如下:
1007 1 1004 1004 simpleProcess:3:1003 Write monthly financial report Write monthly financial report for publication to shareholders. writeReportTask 50 2013-10-05 11:49:28
1107 1 1104 1104 simpleProcess:4:1103 Write monthly financial report Write monthly financial report for publication to shareholders. writeReportTask 50 2013-10-05 11:50:03
807 1 804 804 simpleProcess:1:803 Write monthly financial report Write monthly financial report for publication to shareholders. writeReportTask 50 2013-10-05 11:47:53
907 1 904 904 simpleProcess:2:903 Write monthly financial report Write monthly financial report for publication to shareholders. writeReportTask 50 2013-10-05 11:48:43
导致Task task = taskService.createTaskQuery().singleResult();出错,因为查询出来不是一条记录。
正常情况如果执行完成,这张表产生的数据会被清空。出现异常时,数据没有清空。activiti的异常处理机制没有清空数据,不知道是不是activiti的缺陷(不足),是做不到还是没有做到。
深刻理解This will look for an activiti.cfg.xml
file on the classpath中的classpath,这个路径对应Eclipse的Build path =》Source=》Default output folder(比如activiti_SpringEnvironment/bin目录),将activiti-context.xml
和activiti.cfg.xml文件。
activiti总结2的更多相关文章
- 流程开发Activiti 与SpringMVC整合实例
流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...
- activiti工作流的web流程设计器整合视频教程 SSM和独立部署
本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...
- activiti工作流的web流程设计器整合视频教程 SSM 和 独立部署
本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activiti-Modeler 5.21.0 官方流程设计器) 本视频共讲了两种整合方式 1. 流 ...
- 文档分享-Activiti 5.16 用户手册
今天在翻看工作流相关的网页的时候,在开源中国上http://www.oschina.net/question/915507_149175发现activiti的中文文档:http://www.mossl ...
- 1. Activiti 运行时表信息总结
Activiti的后台是有数据库的支持,所有的表都以ACT_开头. 第二部分是表示表的用途的两个字母标识. 用途也和服务的API对应. ACT_RE_*: 'RE'表示repository. 这个前缀 ...
- Activiti学习(二)数据表结构
Activiti工作流引擎数据库表结构 数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识.此用例大体与服务API是匹配的. l ...
- Activiti学习(一) 环境搭建
原料:Activiti5.4 MyEclipse 10 1.先将activiti文件夹放置myeclipse的安装目录dropins文件夹下2.将activiti文件夹里activiti.link中 ...
- Activiti工作流学习(三)Activiti工作流与spring集成
一.前言 前面Activiti工作流的学习,说明了Activiti的基本应用,在我们开发中可以根据实际的业务参考Activiti的API去更好的理解以及巩固.我们实际的开发中我们基本上都使用sprin ...
- activiti当前任务高亮(解决乱码问题)
package com.xinwei; import java.io.File; import java.io.InputStream; import java.util.ArrayList; imp ...
- activiti 中文文档
http://www.mossle.com http://www.mossle.com/docs/activiti/index.html
随机推荐
- 136 Single Number(找唯一数Medium)
题目意思:一个int数组,有一个数只出现一次,其他数均出现两次,找到这个唯一数 知识普及:~:非运算,单目运算符1为0,0为1; &:与运算,都为1则为1,否则为0 |:或运算,全为0则为 ...
- mybatis中association的column传入多个参数值
顾名思义,association是联合查询. 在使用association中一定要注意几个问题.文笔不好,白话文描述一下. 1: <association property="fncg ...
- Thinkphp 零散知识点(caa/js路径,引入第三方类,ajax返回,session/cookie)
一.关于JS和CSS路径问题 1.找路径是从入口文件index.php来找的,而不是从文件本身所在位置来找, 因为我们访问时是访问的入口文件 2.在存放JS和CSS的时候可以放到public文件夹下 ...
- centos git 升级应用
在阿里云服务器上部署Git 升级centos 自带的Git yum库自带版本为git1.7.1-3.el6_4.1. -------------------升级-------------------- ...
- python运维开发之第十天
一.多进程 1.进程模块 multiprocessing 简单的创建一个进程 #!/usr/bin/env python # -*- coding: utf- -*- # @Author : Will ...
- Android 开发中使用 SQLite 数据库
SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能. 此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP ...
- Erget 显示对象
核心显示类: 类 描述 DisplayObject 显示对象基类,所有显示对象均继承自此类 Bitmap 位图,用来显示图片 Shape 用来显示矢量图,可以使用其中的方法绘制矢量图形 TextFie ...
- "类名.this"与"this"的区别
"this"是指(或者说:所代表的是)当前这段代码所在的类的对象.而"类名.this"是指"类名"的对象(一般在匿名类或内部类中使用来调用外 ...
- 转:OWASP发布Web应用程序的十大安全风险
Open Web Application Security Project(OWASP)是世界范围内的非盈利组织,关注于提高软件的安全性.它们的使命是使应用软件更加安全,使企业和组织能够对应用安全风险 ...
- mybatis insertUseGeneratedKeys
mybatis中的一个坑:预期:传入的Record中会生动填入在db中生成的id值. 使用 insertUseGeneratedKeys插入数据时,如果id字段不是AUTO_INCREMENT,则不 ...