扩展activiti使用自己的用户表和群组表
博客专区 > cookqq 的博客 > 博客详情
扩展activiti使用自己的用户表和群组表
cookqq 发表于5年前
扩展activiti使用自己的用户表和群组表
  • 发表于 5年前
  • 阅读 12102
  • 收藏 38
  • 点赞 10
  • 评论 24

腾讯云 十分钟定制你的第一个小程序>>>   

本人博客开始迁移,博客整个架构自己搭建及编码 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>





共有 人打赏支持
cookqq
粉丝 113
博文 268
码字总数 156096
评论 (24)
天然疯蜜
这个厉害。
你要爪子
79这个很实用。一般工作流整合进项目都会用自己项目原本的用户管理系统。我最近也准备整合自己的用户关系到activiti里,mark 下。
xueyingbing
看了几天,终于明白了,谢谢!!!
cookqq

引用来自“xueyingbing”的评论

看了几天,终于明白了,谢谢!!!
不明白,可以留言
幸运的橙子C
请问下按照你说的这种重写方式,那在其他类中是直接使用IdentityService。还是要注入CustomGroupEntityManager、CustomUserEntityManager的bean?
cookqq

引用来自“幸运的橙子C”的评论

请问下按照你说的这种重写方式,那在其他类中是直接使用IdentityService。还是要注入CustomGroupEntityManager、CustomUserEntityManager的bean?
直接使用IdentityService
幸运的橙子C

引用来自“幸运的橙子C”的评论

请问下按照你说的这种重写方式,那在其他类中是直接使用IdentityService。还是要注入CustomGroupEntityManager、CustomUserEntityManager的bean?

引用来自“开源知识共创土豪”的评论

直接使用IdentityService
版主。能提供一些实现类的源码,参考下。
cookqq

引用来自“幸运的橙子C”的评论

请问下按照你说的这种重写方式,那在其他类中是直接使用IdentityService。还是要注入CustomGroupEntityManager、CustomUserEntityManager的bean?

引用来自“开源知识共创土豪”的评论

直接使用IdentityService

引用来自“幸运的橙子C”的评论

版主。能提供一些实现类的源码,参考下。
其实思想都是一样,你还是对设计模式不太了解吧
幸运的橙子C

引用来自“幸运的橙子C”的评论

请问下按照你说的这种重写方式,那在其他类中是直接使用IdentityService。还是要注入CustomGroupEntityManager、CustomUserEntityManager的bean?

引用来自“开源知识共创土豪”的评论

直接使用IdentityService

引用来自“幸运的橙子C”的评论

版主。能提供一些实现类的源码,参考下。

引用来自“开源知识共创土豪”的评论

其实思想都是一样,你还是对设计模式不太了解吧
工厂模式我知道的。为什么想参考下实现源码。是比如 List findGroupsByUser这个方法是重写的,返回类型是(activiti的Group)不能修改的。怎么才能做到返回做到自己的对象。
cookqq

引用来自“幸运的橙子C”的评论

请问下按照你说的这种重写方式,那在其他类中是直接使用IdentityService。还是要注入CustomGroupEntityManager、CustomUserEntityManager的bean?

引用来自“开源知识共创土豪”的评论

直接使用IdentityService

引用来自“幸运的橙子C”的评论

版主。能提供一些实现类的源码,参考下。

引用来自“开源知识共创土豪”的评论

其实思想都是一样,你还是对设计模式不太了解吧

引用来自“幸运的橙子C”的评论

工厂模式我知道的。为什么想参考下实现源码。是比如 List findGroupsByUser这个方法是重写的,返回类型是(activiti的Group)不能修改的。怎么才能做到返回做到自己的对象。
new group ,然后把相应的参数复制
java_son
扩展之后,怎样能看出扩展成功呢?
java_son
//获取当前登录人待办任务
tasks = taskService.createTaskQuery().taskCandidateOrAssigned(userId).active().orderByTaskId().desc().list();
这个查询的还是原来的表,怎么解决呢
java_son

引用来自“xueyingbing”的评论

看了几天,终于明白了,谢谢!!!
扩展之后,怎样能看出扩展成功呢?
java_son

引用来自“xueyingbing”的评论

看了几天,终于明白了,谢谢!!!
/获取当前登录人待办任务 tasks = taskService.createTaskQuery().taskCandidateOrAssigned(userId).active().orderByTaskId().desc().list(); 这个查询的还是原来的表,怎么解决呢
兰花村村长
这个方法不行的,查询待办任务 taskCandidateOrAssigned 还是会用到 Act_ID_XXX 表,除非要写改xml文件
丁加砙

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

这个方法不行的,查询待办任务 taskCandidateOrAssigned 还是会用到 Act_ID_XXX 表,除非要写改xml文件
正解,无法解决该问题
长长久久
“查询待办任务”问题参考 Problem with TaskQuery when using custom GroupEntityManager and UserEntityManager (http://forums.activiti.org/content/problem-taskquery-when-using-custom-groupentitymanager-and-userentitymanager), jbarrez答复为BUG。
何海洋
首先先感谢一下博主,最近在学习acitiviti,想扩展自己的用户表,不知道怎么入手,看了这个已经理解了,不过在新版的activiti中有些变化。
Marshmallow

引用来自“java_son”的评论

//获取当前登录人待办任务
tasks = taskService.createTaskQuery().taskCandidateOrAssigned(userId).active().orderByTaskId().desc().list();
这个查询的还是原来的表,怎么解决呢
哥们,解解决问题了吗? 我发现这样一来,需要重写太多发放了,要不然就是查原来的表啊
Marshmallow
//获取当前登录人待办任务
tasks = taskService.createTaskQuery().taskCandidateOrAssigned(userId).active().orderByTaskId().desc().list();
这个查询的还是原来的表,怎么解决呢
×
cookqq
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: