文档章节

扩展activiti使用自己的用户表和群组表

cookqq
 cookqq
发布于 2013/03/28 09:03
字数 758
阅读 13601
收藏 39

本人博客开始迁移,博客整个架构自己搭建及编码 http://www.cookqq.com/listBlog.action 


1、自定义的Activiti用户组管理器,主要重写对用户群组的增删改查等操作。

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import javax.persistence.Query;

import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.GroupQuery;
import org.activiti.engine.impl.GroupQueryImpl;
import org.activiti.engine.impl.Page;
import org.activiti.engine.impl.persistence.entity.GroupEntity;
import org.activiti.engine.impl.persistence.entity.GroupManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 自定义的Activiti用户组管理器
 * 
 */
public class CustomGroupManager extends GroupManager {
	private static final Log logger = LogFactory
			.getLog(CustomGroupManager.class);

	@Override
	public GroupQuery createNewGroupQuery() {
		// TODO Auto-generated method stub
		return super.createNewGroupQuery();
	}

	@Override
	public List<Group> findGroupByQueryCriteria(GroupQueryImpl query, Page page) {
		// TODO Auto-generated method stub
		return super.findGroupByQueryCriteria(query, page);
	}

	@Override
	public long findGroupCountByQueryCriteria(GroupQueryImpl query) {
		// TODO Auto-generated method stub
		return super.findGroupCountByQueryCriteria(query);
	}

	@Override
	public GroupEntity findGroupById(String groupId) {
		// TODO Auto-generated method stub
		return super.findGroupById(groupId);
	}

	@Override
	public List<Group> findGroupsByUser(String userId) {
		// TODO Auto-generated method stub
		return super.findGroupsByUser(userId);
	}

	@Override
	public List<Group> findPotentialStarterUsers(String proceDefId) {
		return super.findPotentialStarterUsers(proceDefId);
	}


	
}

注意:如果想使用自己定义的用户组表,请重新这个findGroupById(final String groupCode)和findGroupsByUser(final String userCode),这两个方法是activiti查询的用户组的方法。

2、自定义的Activiti用户组会话工厂,返回类型不要变还是GroupManager,主要是覆盖系统默认添加的用户群组工厂。

import org.activiti.engine.impl.interceptor.Session;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.activiti.engine.impl.persistence.entity.GroupManager;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 自定义的Activiti用户组会话工厂
 */
public class CustomGroupManagerFactory implements SessionFactory {
	private GroupManager groupManager;

	@Autowired
	public void setGroupManager(GroupManager groupManager) {
		this.groupManager = groupManager;
	}

	public Class<?> getSessionType() {
		// 返回原始的GroupManager类型
		return GroupManager.class;
	}

	public Session openSession() {
		// 返回自定义的GroupManager实例
		return groupManager;
	}
}

3、自定义的Activiti用户管理器, 主要重写对用户的增删改查等操作。

import java.util.List;

import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti.engine.impl.Page;
import org.activiti.engine.impl.UserQueryImpl;
import org.activiti.engine.impl.persistence.entity.IdentityInfoEntity;
import org.activiti.engine.impl.persistence.entity.UserEntity;
import org.activiti.engine.impl.persistence.entity.UserManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 自定义的Activiti用户管理器
 */
public class CustomUserManager extends UserManager {
	private static final Log logger = LogFactory
			.getLog(CustomUserManager.class);

	@Override
	public UserEntity findUserById(String userId) {
		return super.findUserById(userId);
	}

	@Override
	public List<User> findUserByQueryCriteria(UserQueryImpl query, Page page) {
		// TODO Auto-generated method stub
		return super.findUserByQueryCriteria(query, page);
	}

	@Override
	public long findUserCountByQueryCriteria(UserQueryImpl query) {
		// TODO Auto-generated method stub
		return super.findUserCountByQueryCriteria(query);
	}

	@Override
	public List<Group> findGroupsByUser(String userId) {
		// TODO Auto-generated method stub
		return super.findGroupsByUser(userId);
	}

	@Override
	public IdentityInfoEntity findUserInfoByUserIdAndKey(String userId,
			String key) {
		// TODO Auto-generated method stub
		return super.findUserInfoByUserIdAndKey(userId, key);
	}

	@Override
	public List<String> findUserInfoKeysByUserIdAndType(String userId,
			String type) {
		// TODO Auto-generated method stub
		return super.findUserInfoKeysByUserIdAndType(userId, type);
	}

	@Override
	public Boolean checkPassword(String userId, String password) {
		// TODO Auto-generated method stub
		return super.checkPassword(userId, password);
	}

	@Override
	public List<User> findPotentialStarterUsers(String proceDefId) {
		// TODO Auto-generated method stub
		return super.findPotentialStarterUsers(proceDefId);
	}
	
}

注意:如果想使用自己定义的用户表,请重新这个findUserById(final String userCode)和findGroupsByUser(final String userCode),这两个方法是activiti查询的用户的方法

4、自定义的Activiti用户会话工厂, ,返回类型不要变还是 UserManager,主要是覆盖系统默认添加的用户工厂。

import org.activiti.engine.impl.interceptor.Session;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.activiti.engine.impl.persistence.entity.UserManager;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 自定义的Activiti用户会话工厂
 */
public class CustomUserManagerFactory implements SessionFactory {
	private UserManager userManager;

	@Autowired
	public void setUserManager(UserManager userManager) {
		this.userManager = userManager;
	}

	public Class<?> getSessionType() {
		// 返回原始的UserManager类型
		return UserManager.class;
	}

	public Session openSession() {
		// 返回自定义的UserManager实例
		return userManager;
	}
}

5、activiti.cfg.xml相应的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">
	<bean id="processEngineConfiguration"
		class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
		
		<property name="jobExecutorActivate" value="false" />
		<property name="history" value="none" />
		<property name="customSessionFactories">  
	        <list>  
	           <bean class="com.xxx.activiti.ext.CustomGroupEntityManagerFactory" >
                    <property name="groupEntityManager"> 
                        <bean class="com.xxx.activiti.ext.CustomGroupEntityManager"/>
                     </property>
                </bean>
                <bean class="com.xxx.activiti.ext.CustomUserEntityManagerFactory" >
                    <property name="userEntityManager"> 
                        <bean class="com.xxx.activiti.ext.CustomUserEntityManager"/>
                     </property>
                 </bean>
 
	        </list>  
     </property>
	</bean>
</beans>





本文转载自:http://www.cookqq.com/lookBlog.action?id=8b3a66d0-01c2-480a-a32c-2c050ee9c4d1

共有 人打赏支持
cookqq

cookqq

粉丝 118
博文 268
码字总数 156096
作品 0
海淀
技术主管
私信 提问
加载中

评论(24)

dick_xu
dick_xu
最简单是创建同名视图,覆盖原来的表,注意字段一样就可以了。
cookqq
cookqq

引用来自“Amayadream”的评论

请问各位有办法了没?找了很多天还是没有很好的办法
你还没有解决
Amayadream
Amayadream
请问各位有办法了没?找了很多天还是没有很好的办法
Marshmallow
Marshmallow
select
distinct RES.*
from
ACT_RU_TASK RES
left join
ACT_RU_IDENTITYLINK I
on I.TASK_ID_ = RES.ID_
inner join
ACT_RE_PROCDEF D
on RES.PROC_DEF_ID_ = D.ID_
WHERE
D.KEY_ = 'leave'
and (
RES.ASSIGNEE_ = 'kermit'
or (
RES.ASSIGNEE_ is null
and (
I.USER_ID_ = 'kermit'
or I.GROUP_ID_ IN (
select
g.GROUP_ID_
from
ACT_ID_MEMBERSHIP g
where
g.USER_ID_ = 'kermit'
)
)
)
)
order by
RES.ID_ asc LIMIT 2147483647 OFFSET 0
Marshmallow
Marshmallow
//获取当前登录人待办任务
tasks = taskService.createTaskQuery().taskCandidateOrAssigned(userId).active().orderByTaskId().desc().list();
这个查询的还是原来的表,怎么解决呢
Marshmallow
Marshmallow

引用来自“java_son”的评论

//获取当前登录人待办任务
tasks = taskService.createTaskQuery().taskCandidateOrAssigned(userId).active().orderByTaskId().desc().list();
这个查询的还是原来的表,怎么解决呢
哥们,解解决问题了吗? 我发现这样一来,需要重写太多发放了,要不然就是查原来的表啊
何海洋
何海洋
首先先感谢一下博主,最近在学习acitiviti,想扩展自己的用户表,不知道怎么入手,看了这个已经理解了,不过在新版的activiti中有些变化。
长长久久
“查询待办任务”问题参考 Problem with TaskQuery when using custom GroupEntityManager and UserEntityManager (http://forums.activiti.org/content/problem-taskquery-when-using-custom-groupentitymanager-and-userentitymanager), jbarrez答复为BUG。
丁加砙
丁加砙

引用来自“兰花村村长”的评论

这个方法不行的,查询待办任务 taskCandidateOrAssigned 还是会用到 Act_ID_XXX 表,除非要写改xml文件
正解,无法解决该问题
兰花村村长
兰花村村长
这个方法不行的,查询待办任务 taskCandidateOrAssigned 还是会用到 Act_ID_XXX 表,除非要写改xml文件
基于 Activiti 的工作流引擎--openwebflow

OpenWebFlow是基于Activiti(官方网站http://activiti.org/)扩展的工作流引擎,它扩展的功能包括: 完全接管了Activiti对活动(activity)权限的管理。Activiti允许在设计model的时候指定每...

白乔
2016/09/27
3.7K
1
activiti使用自己的用户表和群组表

1、自定义的Activiti用户组管理器,主要重写对用户群组的增删改查等操作。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38...

小城故事_
2015/11/24
135
0
基于Activiti扩展的工作流引擎OpenWebFlow

开源地址:https://github.com/bluejoe2008/openwebflow(欢迎star) 1. OpenWebFlow概述 OpenWebFlow是基于Activiti扩展的工作流引擎。Activiti (官方网站http://activiti.org/,代码托管在...

白乔
2017/10/18
0
9
自定义Activiti的用户群组表

简述 Activiti工作流引擎本身配套了包括User、Group的Identify模块,但是实际上公司内部各个部门关系、领导下级等关系都很复杂,Activiti自身的id模块就显得有些弱了。 有关自定义Activiti用...

名为风中的男子
2016/09/06
478
0
activiti学习笔记3-用户与用户组

(本博客都是纯文本手工代码,错误难免,需要在eclipse中自己调整错误代码) activiti默认建立用户表,默认的用户表可以构建简单的用户管理功能。 一、表结构 acitiviti建立了默认用户表: ...

安世博
2014/06/25
5.8K
2

没有更多内容

加载失败,请刷新页面

加载更多

mybatis批量update操作的写法,及批量update报错的问题解决方法

mybatis的批量update操作写法很简单,如下: 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿...

编程SHA
38分钟前
6
0
EOS怎样删除钱包

在使用Eos的keosd钱包软件时,如果要删除EOS中指定名称的钱包,最简单的办法是 直接删除钱包文件,不过在删除钱包之前,需要先停止钱包软件的运行。 学习EOS应用开发要选这个:【EOS智能合约...

汇智网教程
45分钟前
7
0
Java语言快速实现简单MQ消息队列服务

使用 JAVA 语言自己动手来写一个MQ (类似ActiveMQ,RabbitMQ) 主要角色 首先我们必须需要搞明白 MQ (消息队列) 中的三个基本角色 ProducerBrokerConsumer 整体架构如下所示 自定义协议 首...

微笑向暖wx
54分钟前
5
0
ES5和ES6那些你必须知道的事儿

  ES5和ES6那些你必须知道的事儿      ES5新增的东西      一、数组方法      1、forEach      用途:遍历,循环      对于空数组不会执行回调函数      复制代码...

SEOwhywhy
今天
11
0
转:[windows]DOS批处理添加任务计划

[windows]DOS批处理添加任务计划 博客分类: Windows 转自:http://gwmold.blog.163.com/blog/static/1553319892010117113457232/ 自动创建每周运行一次的计划任务 创建计划任务可用at,sch...

SamXIAO
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部