[英]Configure Activiti to reuse the existing user/group data in Spring Boot
I am using Spring Boot 1.4.3.RELEASE. 我正在使用Spring Boot 1.4.3.RELEASE。 I have already created a simple MVC application to manage users and groups.
我已经创建了一个简单的MVC应用程序来管理用户和组。 Now, I am trying to integrate Activiti 5.21.0 within my project, and REUSE the existing user/group tables by Activiti.
现在,我正在尝试将Activiti 5.21.0集成到我的项目中,并重新使用 Activiti的现有用户/组表。
I have extended the default UserEntityManager
and GroupEntityManager
classes from Activiti like below: 我已经从Activiti扩展了默认的
UserEntityManager
和GroupEntityManager
类,如下所示:
CustomUserEntityManager.java CustomUserEntityManager.java
import java.util.List;
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.UserEntityManager;
import com.example.spring.dao.UserDao;
import com.example.spring.model.User;
public class CustomUserEntityManager extends UserEntityManager {
private UserDao userDao;
public CustomUserEntityManager(UserDao userDao) {
this.userDao = userDao;
}
@Override
public UserEntity findUserById(String userId) {
User user = userDao.findById(Integer.parseInt(userId));
return userToActivitiUser(user);
}
@Override
public org.activiti.engine.identity.User createNewUser(String userId) {
throw new UnsupportedOperationException();
}
@Override
public void insertUser(org.activiti.engine.identity.User user) {
throw new UnsupportedOperationException();
}
@Override
public void updateUser(org.activiti.engine.identity.User updatedUser) {
throw new UnsupportedOperationException();
}
@Override
public void deleteUser(String userId) {
throw new UnsupportedOperationException();
}
@Override
public List<org.activiti.engine.identity.User> findUserByQueryCriteria(UserQueryImpl query, Page page) {
throw new UnsupportedOperationException();
}
@Override
public long findUserCountByQueryCriteria(UserQueryImpl query) {
throw new UnsupportedOperationException();
}
@Override
public IdentityInfoEntity findUserInfoByUserIdAndKey(String userId, String key) {
throw new UnsupportedOperationException();
}
@Override
public List<String> findUserInfoKeysByUserIdAndType(String userId, String type) {
throw new UnsupportedOperationException();
}
private UserEntity userToActivitiUser(User user) {
UserEntity activitiUser = new UserEntity();
activitiUser.setId(user.getId().toString());
activitiUser.setPassword(user.getPassword());
activitiUser.setFirstName(user.getUsername());
activitiUser.setLastName(user.getLastName());
activitiUser.setEmail(user.getEmail());
return activitiUser;
}
}
ActivitiGroupEntityManager.java ActivitiGroupEntityManager.java
import java.util.List;
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.GroupEntityManager;
import com.example.spring.dao.CMSGroupDao;
public class CustomGroupEntityManager extends GroupEntityManager {
private CMSGroupDao groupDao;
public CustomGroupEntityManager(CMSGroupDao groupDao) {
this.groupDao = groupDao;
}
@Override
public List<Group> findGroupsByUser(String userId) {
// TODO add logic
return null;
}
@Override
public Group createNewGroup(String groupId) {
throw new UnsupportedOperationException();
}
@Override
public void deleteGroup(String groupId) {
throw new UnsupportedOperationException();
}
@Override
public GroupQuery createNewGroupQuery() {
return super.createNewGroupQuery();
}
@Override
public List<Group> findGroupByQueryCriteria(GroupQueryImpl query, Page page) {
throw new UnsupportedOperationException();
}
@Override
public long findGroupCountByQueryCriteria(GroupQueryImpl query) {
throw new UnsupportedOperationException();
}
}
then, I added my custom factories like below: 然后,我添加了我的自定义工厂,如下所示:
CustomUserManagerFactory.java CustomUserManagerFactory.java
import org.activiti.engine.impl.interceptor.Session;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.example.spring.dao.UserDao;
@Component(value = "customUserManagerFactory")
public class CustomUserManagerFactory implements SessionFactory {
@Autowired
private UserDao userDao;
@Override
public Class<?> getSessionType() {
return CustomUserEntityManager.class;
}
@Override
public Session openSession() {
return new CustomUserEntityManager(userDao);
}
}
CustomGroupManagerFactory.java CustomGroupManagerFactory.java
import org.activiti.engine.impl.interceptor.Session;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.example.spring.dao.CMSGroupDao;
@Component(value = "customGroupManagerFactory")
public class CustomGroupManagerFactory implements SessionFactory {
@Autowired
private CMSGroupDao groupDao;
@Override
public Class<?> getSessionType() {
return CustomGroupEntityManager.class;
}
@Override
public Session openSession() {
return new CustomGroupEntityManager(groupDao);
}
}
Finally, I added my ProcessEngine configuration bean like below: 最后,我添加了我的ProcessEngine配置bean,如下所示:
ProcessEngineConfig.java ProcessEngineConfig.java
package com.example.spring.configuration;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.context.annotation.Configuration;
@Configuration
@AutoConfigureBefore(org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class)
public class ProcessEngineConfig implements ProcessEngineConfigurationConfigurer{
@Resource(name = "customUserManagerFactory")
private SessionFactory userManagerFactory;
@Resource(name = "customGroupManagerFactory")
private SessionFactory groupManagerFactory;
public void configure(SpringProcessEngineConfiguration pec) {
pec.setDbIdentityUsed(false);
List<SessionFactory> customSessionFactories = new ArrayList<SessionFactory>();
customSessionFactories.add(userManagerFactory);
customSessionFactories.add(groupManagerFactory);
if (pec.getCustomSessionFactories() == null){
pec.setCustomSessionFactories(customSessionFactories);
}
else{
pec.getCustomSessionFactories().addAll(customSessionFactories);
}
}
}
Important parts from pom.xml 来自pom.xml的重要部分
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<activiti.version>5.21.0</activiti.version>
</properties>
<dependencies>
<!-- Activiti Dependencies -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-actuator</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- Spring-boot Dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
.......
.......
</dependencies>
The application is executing without any runtime error, HOWEVER , when I create a user using org.activiti.engine.IdentityService.newUser()
the user is created and saved in Activit user table and UnsupportedOperationException()
is not thrown which mean that the custom configuration is not working. 应用程序正在执行而没有任何运行时错误, 但是当我使用
org.activiti.engine.IdentityService.newUser()
创建用户时,用户被创建并保存在Activit用户表中并且UnsupportedOperationException()
抛出UnsupportedOperationException()
,这意味着自定义配置不起作用。
Any help will be appreciated!! 任何帮助将不胜感激!!
For the CustomGroupManagerFactory the type should be : 对于CustomGroupManagerFactory,类型应为:
@Override
public Class<?> getSessionType() {
return GroupIdentityManager.class;
}
For CustomUserManagerFactory the type should be : 对于CustomUserManagerFactory,类型应为:
@Override
public Class<?> getSessionType() {
return UserIdentityManager.class;
}
I hope the solution above helps you to get it working. 我希望上面的解决方案可以帮助您实现它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.