activiti act ru task怎么删除act

Activiti集成之:权限
Activiti提供了ACT_ID_*的表有四个,一般情况下,自己的平台或框架都有一套类似的模型。一种最简单的集成方式是:
1、把这4个表改为视图,比如create or replace view act_id_group as ……;
2、覆盖org.activiti.engine.impl.db.DbSqlSession中的isIdentityTablePresent方法,直接返回true:
public boolean isIdentityTablePresent(){
&&&&&&&&&&&&
// return isTablePresent("ACT_ID_USER");
3、在bpmn的assignee或candidateUsers或candidateGroups中,使用自己的平台或框架提供的API。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。activiti 实例流程图的显示方法 - 文艺IT女青年 - ITeye技术网站
博客分类:
所谓实例流程图的显示,就是显示流程图的同时,高亮显示正在执行的节点。有两种方法
直接生成带老亮节点的图片:
ProcessDefinitionEntity pde = (ProcessDefinitionEntity) RepositoryService
.getDeployedProcessDefinition(procDefId);
InputStream imageStream =
ProcessDiagramGenerator.generateDiagram(
def, "png",
runtimeService.getActiveActivityIds(executionId));
List&Task& list = taskService.createTaskQuery().processInstanceId(executionId).orderByTaskId().desc().list();
int size = list.size();
getRequest().setAttribute("inputStream", imageStream);
}catch(RasterFormatException e){
e.printStackTrace();
&%@page import="java.io.InputStream"%&
&%@page import="org.activiti.engine.impl.*"%&
&%@page import="org.activiti.engine.impl.pvm.*"%&
&%@page import="org.activiti.engine.impl.pvm.process.*"%&
&%@page import="org.activiti.engine.repository.*"%&
&%@page import="org.activiti.engine.*"%&
&%@ page language="java" contentType="text/ charset=UTF-8"
pageEncoding="UTF-8"%&
InputStream is = (InputStream)request.getAttribute("inputStream");
byte[] b = new byte[1024];
int len = -1;
while((len = is.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
// 防止异常:getOutputStream() has already been called for this response
out.clear();
out = pageContext.pushBody();
方法2: 图片和高亮节点圈分别产生
* 显示流程图
* @throws Exception
public String getProcessPic() throws Exception {
// String taskId =
// "2901";//getRequest().getParameter("taskId");0
String procDefId = getRequest().getParameter("procDefId");
ProcessDefinition procDef = repositoryService.createProcessDefinitionQuery().processDefinitionId(procDefId).singleResult();
String diagramResourceName = procDef.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(
procDef.getDeploymentId(), diagramResourceName);
getRequest().setAttribute("inputStream", imageStream);
return SUCCESS;
* 获取跟踪信息
* @throws Exception
public String getProcessMap() throws Exception {
String procDefId = getRequest().getParameter("procDefId");
String executionId = getRequest().getParameter("executionId");
ProcessDefinition processDefinition = repositoryService
.createProcessDefinitionQuery().processDefinitionId(procDefId).singleResult();
ProcessDefinitionImpl pdImpl = (ProcessDefinitionImpl) processD
String processDefinitionId = pdImpl.getId();// 流程标识
ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
.getDeployedProcessDefinition(processDefinitionId);
ActivityImpl actImpl =
ExecutionEntity execution = (ExecutionEntity) runtimeService
.createExecutionQuery().executionId(executionId).singleResult();// 执行实例
String activitiId = execution.getActivityId();// 当前实例的执行到哪个节点
List&String&activitiIds = runtimeService.getActiveActivityIds(executionId);
List&ActivityImpl& activitiList = def.getActivities();// 获得当前任务的所有节点
for(String activitiId : activitiIds){
for (ActivityImpl activityImpl : activitiList) {
String id = activityImpl.getId();
if (id.equals(activitiId)) {// 获得执行到那个节点
actImpl = activityI
getRequest().setAttribute("coordinateObj", actImpl);
getRequest().setAttribute("procDefId",procDefId );
return SUCCESS;
&%@page import="java.io.InputStream"%&
&%@page import="org.activiti.engine.impl.*"%&
&%@page import="org.activiti.engine.impl.pvm.*"%&
&%@page import="org.activiti.engine.impl.pvm.process.*"%&
&%@page import="org.activiti.engine.repository.*"%&
&%@page import="org.activiti.engine.*"%&
&%@ page language="java" contentType="text/ charset=UTF-8"
pageEncoding="UTF-8"%&
InputStream is = (InputStream)request.getAttribute("inputStream");
byte[] b = new byte[1024];
int len = -1;
while((len = is.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
// 防止异常:getOutputStream() has already been called for this response
out.clear();
out = pageContext.pushBody();
showImg.jsp
&%@page import="java.io.InputStream"%&
&%@page import="org.activiti.engine.impl.*"%&
&%@page import="org.activiti.engine.impl.pvm.*"%&
&%@page import="org.activiti.engine.impl.pvm.process.*"%&
&%@page import="org.activiti.engine.repository.*"%&
&%@page import="org.activiti.engine.*"%&
&%@ page language="java" pageEncoding="UTF-8"%&
&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&
&title&&/title&
&img src="getProcessPic.action?procDefId=${procDefId}" style="position: left:0 top:0"&
&!-- 给执行的节点加框 --&
&div style="position: border:2left:${coordinateObj.x-1 }top:${coordinateObj.y-1 }width:${coordinateObj.width }height:${coordinateObj.height }"&&/div&
struts.xml
&action name="getProcessPic" class="processInstanceAction" method="getProcessPic"&
&result name = "success" &/incident/pic.jsp&/result&
&action name="getProcessMap" class="processInstanceAction" method="getProcessMap"&
&result name = "success" &/incident/showImg.jsp&/result&
需要注意的是,当你的流程图中存在并发节点时需要用到runtimeService.getActiveActivityIds(proInstId)得到多个活动节点。
这个方法可以在activiti的帮助文档中找到,但它的原文中是getActiveActivityIds(String executionId)(执行ID)这是错的,因为在数据库的_ru_task表(运行任务表)中,执行ID与任务记录一一对应,但可以存在多个流程实例Id相同的任务记录。
鉴于第一种方法形成的流程图太丑,采用第二种方法最好!
*********************格叽格叽*******************************
孔雀东南飞…有情人还是共饮一江水的吧!
浏览 15570
浏览: 96572 次
来自: 天津
嗯,写的不错,每篇文章的后记写的也不错,哈哈
我想问问,怎么把mxgraph生成xml格式的流程生成图片文件 ...
楼主的内容很有帮助
[b][i][u]引用[list]
[*][img][url] ...
小伟小伟 写道你好4921人阅读
技术(36)
相信每个涉及到用户的系统都有一套用户权限管理平台或者模块,用来维护用户以及在系统内的功能、数据权限,我们使用的Activiti工作流引擎配套设计了包括User、Group的Identify模块,怎么和业务数据同步呢,这个问题是每个新人必问的问题之一,下面介绍几种同步方案,最后总结比较。
方案一:调用IdentifyService接口完成同步
参考IdentifyService接口Javadoc:
接口定义:
importjava.util.L&importcom.foo.arch.entity.id.U&&importcom.foo.arch.service.ServiceE &&&&&public interface&AccountService&{&&&&&&&&&&&&&&&&&&&&&&&&&&&public void&save(User&user,&Long&orgId,&List&long&&roleIds,&booleansynToActiviti)&&&&&&&&&&&&&&throws&OrganizationNotFoundException,&ServiceException,&E&&&&&&&&&&&&&&&&&&&&&&&&public void&delete(Long&userId,&booleansynToActiviti)&throwsServiceException,&E&&&&&&&&&&&&&&&&&&public void&synAllUserAndRoleToActiviti()&throwsE&&&&&&&&&&&&&&&&&&public void&deleteAllActivitiIdentifyData()&throwsE&&} &
同步单个接口实现片段:
@Service&&@Transactional&&public class&AccountServiceImpl&implements AccountService&{&&&&&&&&&&&&&&&&&&&public void&saveUser(User&user,&List&long&&roleIds,&booleansynToActiviti)&{&&&&&&&&&&String&userId&=&ObjectUtils.toString(user.getId());&&&&&&&&&&&&&&&&&&&&&&&accountManager.saveEntity(user);&&&&&&&&&&&&&&&&&&&&&&&if(synToActiviti)&{&&&&&&&&&&&&&&UserQuery&userQuery&=&identityService.createUserQuery();&&&&&&&&&&&&&&List&org.activiti.engine.identity.user&&activitiUsers&=&userQuery.userId(userId).list();&&&&&&&&&&&&&&&&&if(activitiUsers.size()&==&1)&{&&&&&&&&&&&&&&&&&&updateActivitiData(user,&roleIds,&activitiUsers.get(0));&&&&&&&&&&&&&&}elseif&(activitiUsers.size()&&&1)&{&&&&&&&&&&&&&&&&&&String&errorMsg&=&&发现重复用户:id=&+&userId;&&&&&&&&&&&&&&&&&&logger.error(errorMsg);&&&&&&&&&&&&&&&&&&thrownew&RuntimeException(errorMsg);&&&&&&&&&&&&&&}else{&&&&&&&&&&&&&&&&&&newActivitiUser(user,&roleIds);&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&&&&}&&&&&&&&&&&&&&&&&&&private void&newActivitiUser(User&user,&List&long&&roleIds)&{&&&&&&&&&&String&userId&=&user.getId().toString();&&&&&&&&&&&&&&&&&&&&&&&saveActivitiUser(user);&&&&&&&&&&&&&&&&&&&&&&&addMembershipToIdentify(roleIds,&userId);&&&&&&}&&&&&&&&&&&&&&&&&&private void&saveActivitiUser(User&user)&{&&&&&&&&&&String&userId&=&user.getId().toString();&&&&&&&&&&org.activiti.engine.identity.User&activitiUser&=&identityService.newUser(userId);&&&&&&&&&&cloneAndSaveActivitiUser(user,&activitiUser);&&&&&&&&&&logger.debug(&add&activiti&user:&{}&,&ToStringBuilder.reflectionToString(activitiUser));&&&&&&}&&&&&&&&&&&&&&&&&&&private void&addMembershipToIdentify(List&long&&roleIds,&String&userId)&{&&&&&&&&&&for(Long&roleId&:&roleIds)&{&&&&&&&&&&&&&&Role&role&=&roleManager.getEntity(roleId);&&&&&&&&&&&&&&logger.debug(&add&role&to&activit:&{}&,&role);&&&&&&&&&&&&&&identityService.createMembership(userId,&role.getEnName());&&&&&&&&&&}&&&&&&}&&&&&&&&&&&&&&&&&&&&private void&updateActivitiData(User&user,&List&long&&roleIds,&org.activiti.engine.identity.User&activitiUser)&{&&&&&&&&&&&&&String&userId&=&user.getId().toString();&&&&&&&&&&&&&&&&&&&&&&&cloneAndSaveActivitiUser(user,&activitiUser);&&&&&&&&&&&&&&&&&&&&&&&List&group&&activitiGroups&=&identityService.createGroupQuery().groupMember(userId).list();&&&&&&&&&&for(Group&group&:&activitiGroups)&{&&&&&&&&&&&&&&logger.debug(&delete&group&from&activit:&{}&,&ToStringBuilder.reflectionToString(group));&&&&&&&&&&&&&&identityService.deleteMembership(userId,&group.getId());&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&addMembershipToIdentify(roleIds,&userId);&&&&&&}&&&&&&&&&&&&&&&&&&&private void&cloneAndSaveActivitiUser(User&user,&org.activiti.engine.identity.User&activitiUser)&{&&&&&&&&&&activitiUser.setFirstName(user.getName());&&&&&&&&&&activitiUser.setLastName(StringUtils.EMPTY);&&&&&&&&&&activitiUser.setPassword(StringUtils.EMPTY);&&&&&&&&&&activitiUser.setEmail(user.getEmail());&&&&&&&&&&identityService.saveUser(activitiUser);&&&&&&}&&&&&&&&&@Override&&&&&&public void&delete(Long&userId,&booleansynToActiviti,&booleansynToChecking)&throwsServiceException,&Exception&{&&&&&&&&&&&&&&&&&&&&User&user&=&accountManager.getEntity(userId);&&&&&&&&&&if(user&==&null)&{&&&&&&&&&&&&&&thrownew&ServiceException(&删除用户时,找不到ID为&+&userId&+&&的用户&);&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&if(synToActiviti)&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&List&role&&roleList&=&user.getRoleList();&&&&&&&&&&&&&&for(Role&role&:&roleList)&{&&&&&&&&&&&&&&&&&&identityService.deleteMembership(userId.toString(),&role.getEnName());&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&identityService.deleteUser(userId.toString());&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&accountManager.deleteUser(userId);&&&&&&&&&&&&&&&&&&&&&&&if(synToChecking)&{&&&&&&&&&&&&&&checkingAccountManager.deleteEntity(userId);&&&&&&&&&&}&&&&&&}&&}&
同步全部数据接口实现片段:
同步全部数据步骤:
删除Activiti的User、Group、Membership数据
复制Role对象数据到Group
复制用户数据以及Membership数据
ActivitiIdentifyCommonDao.java
public class&ActivitiIdentifyCommonDao&{ &&&&&protectedLogger&logger&=&LoggerFactory.getLogger(getClass()); &&&&&@Autowired&&&&&&private JdbcTemplate&jdbcT &&&&&&&&&&&&&public void&deleteAllUser()&{&&&&&&&&&&String&sql&=&&delete&from&ACT_ID_USER&;&&&&&&&&&&jdbcTemplate.execute(sql);&&&&&&&&&&logger.debug(&deleted&from&activiti&user.&);&&&&&&}&&&&&&&&&&&&&&&&&public void&deleteAllRole()&{&&&&&&&&&&String&sql&=&&delete&from&ACT_ID_GROUP&;&&&&&&&&&&jdbcTemplate.execute(sql);&&&&&&&&&&logger.debug(&deleted&from&activiti&group.&);&&&&&&}&&&&&&&&&&&&&&&&&public void&deleteAllMemerShip()&{&&&&&&&&&&String&sql&=&&delete&from&ACT_ID_MEMBERSHIP&;&&&&&&&&&&jdbcTemplate.execute(sql);&&&&&&&&&&logger.debug(&deleted&from&activiti&membership.&);&&&&&&} &} &
ActivitiIdentifyService.java(下面两段代码重复)
public class&ActivitiIdentifyService&extends AbstractBaseService&{ &
&&&&@Autowired&&&&&&protected ActivitiIdentifyCommonDao&activitiIdentifyCommonD &
&&&&&&&&&&&&public void&deleteAllUser()&{&&&&&&&&&&activitiIdentifyCommonDao.deleteAllUser();&&&&&&}&&&&&&&&&&&&&&&&&&&&&public void&deleteAllRole()&{&&&&&&&&&&activitiIdentifyCommonDao.deleteAllRole();&&&&&&}&&&&&&&&&&&&&&&&&&&&&public void&deleteAllMemerShip()&{&&&&&&&&&&activitiIdentifyCommonDao.deleteAllMemerShip();&&&&&&}&&}&&
publicclass ActivitiIdentifyService extendsAbstractBaseService {
@Autowired
protectedActivitiIdentifyCommonDao activitiIdentifyCommonD
* 删除用户和组的关系
publicvoid deleteAllUser() {
activitiIdentifyCommonDao.deleteAllUser();
* 删除用户和组的关系
publicvoid deleteAllRole() {
activitiIdentifyCommonDao.deleteAllRole();
* 删除用户和组的关系
publicvoid deleteAllMemerShip() {
activitiIdentifyCommonDao.deleteAllMemerShip();
AccountServiceImpl.java(下面两段代码重复)
public &class&AccountServiceImpl&implements AccountService&{&&&@Override&&&&&&public void&synAllUserAndRoleToActiviti()&throwsException&{&&&&&&&&&&&&&&&&&&&&&&&deleteAllActivitiIdentifyData();&&&&&&&&&&&&&&&&&&&&&&&synRoleToActiviti();&&&&&&&&&&&&&&&&&&&&&&&synUserWithRoleToActiviti();&&&&&&}&&&&&&&&&&&&&&&&&private void&synUserWithRoleToActiviti()&{&&&&&&&&&&List&user&&allUser&=&accountManager.getAll();&&&&&&&&&&for(User&user&:&allUser)&{&&&&&&&&&&&&&&String&userId&=&user.getId().toString();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&saveActivitiUser(user);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&List&role&&roleList&=&user.getRoleList();&&&&&&&&&&&&&&for(Role&role&:&roleList)&{&&&&&&&&&&&&&&&&&&identityService.createMembership(userId,&role.getEnName());&&&&&&&&&&&&&&&&&&logger.debug(&add&membership&{user:&{},&role:&{}}&,&userId,&role.getEnName());&&&&&&&&&&&&&&}&&&&&&&&&&}&&&&&&}&&&&&&&&&&&&&&&&&private void&synRoleToActiviti()&{&&&&&&&&&&List&role&&allRole&=&roleManager.getAll();&&&&&&&&&&for(Role&role&:&allRole)&{&&&&&&&&&&&&&&String&groupId&=&role.getEnName().toString();&&&&&&&&&&&&&&Group&group&=&identityService.newGroup(groupId);&&&&&&&&&&&&&&group.setName(role.getName());&&&&&&&&&&&&&&group.setType(role.getType());&&&&&&&&&&&&&&identityService.saveGroup(group);&&&&&&&&&&}&&&&&&}&&&&&&&&&@Override&&&&&&public void&deleteAllActivitiIdentifyData()&throwsException&{&&&&&&&&&&activitiIdentifyService.deleteAllMemerShip();&&&&&&&&&&activitiIdentifyService.deleteAllRole();&&&&&&&&&&activitiIdentifyService.deleteAllUser();&&&&&&}&&}&&
publicclass AccountServiceImpl implementsAccountService {
publicvoid synAllUserAndRoleToActiviti() throwsException {
// 清空工作流用户、角色以及关系
deleteAllActivitiIdentifyData();
// 复制角色数据
synRoleToActiviti();
// 复制用户以及关系数据
synUserWithRoleToActiviti();
* 复制用户以及关系数据
privatevoid synUserWithRoleToActiviti() {
List&user& allUser = accountManager.getAll();
for(User user : allUser) {
String userId = user.getId().toString();
// 添加一个用户到Activiti
saveActivitiUser(user);
// 角色和用户的关系
List&role& roleList = user.getRoleList();
for(Role role : roleList) {
identityService.createMembership(userId, role.getEnName());
logger.debug(&add membership {user: {}, role: {}}&, userId, role.getEnName());
* 同步所有角色数据到{@link Group}
privatevoid synRoleToActiviti() {
List&role& allRole = roleManager.getAll();
for(Role role : allRole) {
String groupId = role.getEnName().toString();
Group group = identityService.newGroup(groupId);
group.setName(role.getName());
group.setType(role.getType());
identityService.saveGroup(group);
publicvoid deleteAllActivitiIdentifyData() throwsException {
activitiIdentifyService.deleteAllMemerShip();
activitiIdentifyService.deleteAllRole();
activitiIdentifyService.deleteAllUser();
方案二:覆盖IdentifyService接口的实现
此方法覆盖IdentifyService接口的默认实现类:org.activiti.engine.impl.IdentityServiceImpl。
读者可以根据现有的用户管理接口实现覆盖IdentityServiceImpl的每个方法的默认实现,这样就等于放弃使用系列表:ACT_ID_。
此方法不再提供代码,请读者自行根据现有接口逐一实现接口定义的功能。
方案三:用视图覆盖同名的ACT_ID_系列表
此方案和第二种类似,放弃使用系列表:ACT_ID_,创建同名的视图。
1.删除已创建的ACT_ID_*表
创建视图必须删除引擎自动创建的ACT_ID_*表,否则不能创建视图。
2.创建视图:
ACT_ID_GROUPACT_ID_INFOACT_ID_MEMBERSHIPACT_ID_USER
创建的视图要保证数据类型一致,例如用户的ACT_ID_MEMBERSHIP表的两个字段都是字符型,一般系统中都是用NUMBER作为用户、角色的主键类型,所以创建视图的时候要把数字类型转换为字符型。
3.修改引擎默认配置
在引擎配置中设置属性dbIdentityUsed为false即可。
beanid=&processEngineConfiguration&class=&org.activiti.spring.SpringProcessEngineConfiguration&&&&&&&...&&&&&&propertyname=&dbIdentityUsed&ref=&false&&&&&&&...&&&&
&beanid=&processEngineConfiguration&class=&org.activiti.spring.SpringProcessEngineConfiguration&&
&propertyname=&dbIdentityUsed&ref=&false&&
&/property&&/bean&
方案一:不破坏、不修改源码,面向接口编程,推荐;
方案二:放弃原有的Identify模块,使用自定义的实现,特殊情况可以使用此方式;
方案三:不需要编写代码,只需要创建同名视图即可,对于现有系统的集成、强烈推荐;
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:61250次
积分:1022
积分:1022
排名:千里之外
原创:34篇
转载:45篇
评论:16条
(2)(2)(1)(1)(2)(1)(3)(3)(2)(2)(2)(2)(1)(6)(2)(4)(4)(4)(2)(3)(3)(2)(2)(4)(9)(9)(1)扩展activiti删除ACT&HI&&历史表
activiti自带了很多表,如图:
ACT_HI_*:HI表示历史数据(History)表,包括过期的流程实例,过期的变量和过期的任务等。
历史表中没有创建外键,可以很好的控制历史表。
在项目中,有可能不需要保存历史记录,也就是这些ACT_HI_*表可以删除了。
删除ACT_HI_*历史表,重新启动项目后报错:
严重: Error while closing command context
org.activiti.engine.ActivitiException: Activiti database problem: Tables missing for component(s) history
at org.activiti.engine.impl.db.DbSqlSession.dbSchemaCheckVersion(DbSqlSession.java:713)
at org.activiti.engine.impl.db.DbSqlSession.performSchemaOperationsProcessEngineBuild(DbSqlSession.java:1097)
at org.activiti.engine.impl.SchemaOperationsProcessEngineBuild.execute(SchemaOperationsProcessEngineBuild.java:27)
at org.activiti.engine.mandExecutorImpl.execute(CommandExecutorImpl.java:24)
at org.activiti.engine.mandContextInterceptor.execute(CommandContextInterceptor.java:60)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:32)
at org.activiti.engine.impl.ProcessEngineImpl.&init&(ProcessEngineImpl.java:75)
at org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl.buildProcessEngine(ProcessEngineConfigurationImpl.java:311)
at org.activiti.engine.ProcessEngines.buildProcessEngine(ProcessEngines.java:194)
at org.activiti.engine.ProcessEngines.initProcessEnginFromResource(ProcessEngines.java:167)
at org.activiti.engine.ProcessEngines.init(ProcessEngines.java:98)
定位到错误地方:DbSqlSession.java
if (dbSqlSessionFactory.isDbHistoryUsed() && !isHistoryTablePresent()) {
errorMessage = addMissingComponent(errorMessage, "history");
这里主要的工作是检查数据库中是否有历史表,因为上面删除了数据库中的历史表所以报错了。
这里面有一个很重要的变量dbSqlSessionFactory.isDbHistoryUsed() ,从代码上面的意思也就是可以关闭使用历史表,好吧,就在创建配置文件的时候把它设置成false。
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResourceDefault();
if(configuration instanceof ProcessEngineConfigurationImpl){
//这里的主要作用是为了,删除历史数据,在启动的时候不去检测历史数据库是否存在
((ProcessEngineConfigurationImpl) configuration).setDbHistoryUsed(false);
ProcessEngine processEngine = configuration.buildProcessEngine();
重新启动后还是有问题,后来debug跟进去发现在使用:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
使用上面代码获取引擎的时候又一次去加载配置文件了,搞了半天,才发现:
ProcessEngines.getDefaultProcessEngine()获取默认的activiti引擎,首先会根据字段isInitialized判断是否已经加载了activiti配置文件,如果没有加载就去加载activiti.cfg.xml和activiti-context.xml,如果加载了,就在processEngines根据名称在获取相应的引擎。
使用 configuration.buildProcessEngine()创建activiti引擎的时候,加载了activiti配置文件,然后把创建的引擎添加到了工具类ProcessEngines的processEngines中。并没有设置字段isInitialized。
所以在项目中使用 ProcessEngines.getDefaultProcessEngine()获取默认的activiti引擎时候,第一次还会去加载配置文件信息。
这个怎么解决呢?
http://www.activiti.org/userguide/index.html 没有找到相应的信息。
后来想到activiti.cfg.xml中的配置信息需要加载到ProcessEngineConfigurationImpl中,应该是先解析,然后寻找相应属性的set方法进行赋值啊(我猜的)。那就通过配置文件设置吧:
&property name="dbHistoryUsed" value="false" /&
启动后项目,成功了,不在报错了。
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.033 (s). 13 q(s)}

我要回帖

更多关于 activiti 删除任务 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信