因项目需要需求,在网上找了很多关于activiti扩展用户自定义表的文章,发现在5.15.1中不起作用,查看源码之后发现在用会话工厂中的返回类型改成了接口而不是原来的抽象类。
1.CustomGroupManagerFactory 用户组会话工厂这边的返回类型要改成 GroupIdentityManager接口,之前的版本貌似是GroupEntityManager,因为在配置加载的时候是以这个为KEY值获得对应的工厂.
package tk.hecks.workflow; import org.activiti.engine.impl.interceptor.Session; import org.activiti.engine.impl.interceptor.SessionFactory; import org.activiti.engine.impl.persistence.entity.GroupEntityManager; import org.activiti.engine.impl.persistence.entity.GroupIdentityManager; import org.springframework.beans.factory.annotation.Autowired; /** * 自定义的Activiti用户组会话工厂 */ public class CustomGroupManagerFactory implements SessionFactory { private GroupEntityManager groupEntityManager; @Autowired public void setGroupEntityManager(GroupEntityManager groupEntityManager) { this.groupEntityManager = groupEntityManager; } public Class<?> getSessionType() { // 返回原始的GroupIdentityManager类型 return GroupIdentityManager.class; } public Session openSession() { // 返回自定义的GroupEntityManager实例 return groupEntityManager; } }
2. CustomUserManagerFactory 自定义的Activiti用户会话工厂
package tk.hecks.workflow; import org.activiti.engine.impl.interceptor.Session; import org.activiti.engine.impl.interceptor.SessionFactory; import org.activiti.engine.impl.persistence.entity.UserEntityManager; import org.activiti.engine.impl.persistence.entity.UserIdentityManager; import org.springframework.beans.factory.annotation.Autowired; /** * 自定义的Activiti用户会话工厂 */ public class CustomUserManagerFactory implements SessionFactory { private UserEntityManager userEntityManager; @Autowired public void setUserEntityManager(UserEntityManager userEntityManager) { this.userEntityManager = userEntityManager; } public Class<?> getSessionType() { // 返回原始的UserManager类型 return UserIdentityManager.class; } public Session openSession() { // 返回自定义的UserManager实例 return userEntityManager; } }
3.下面是用户组合用户管理器只要在里面实现自己的增删改查就行了
package tk.hecks.workflow; import java.util.List; import java.util.Map; 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.GroupEntityManager; /** * 自定义的Activiti用户组管理器 * */ public class CustomGroupManager extends GroupEntityManager { @Override public Group createNewGroup(String groupId) { // TODO Auto-generated method stub return super.createNewGroup(groupId); } @Override public void insertGroup(Group group) { // TODO Auto-generated method stub super.insertGroup(group); } @Override public void updateGroup(GroupEntity updatedGroup) { // TODO Auto-generated method stub super.updateGroup(updatedGroup); } @Override public void deleteGroup(String groupId) { // TODO Auto-generated method stub super.deleteGroup(groupId); } @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 List<Group> findGroupsByUser(String userId) { // TODO Auto-generated method stub return super.findGroupsByUser(userId); } @Override public List<Group> findGroupsByNativeQuery(Map<String, Object> parameterMap, int firstResult, int maxResults) { // TODO Auto-generated method stub return super.findGroupsByNativeQuery(parameterMap, firstResult, maxResults); } @Override public long findGroupCountByNativeQuery(Map<String, Object> parameterMap) { // TODO Auto-generated method stub return super.findGroupCountByNativeQuery(parameterMap); } }
package tk.hecks.workflow; import java.util.List; import java.util.Map; import org.activiti.engine.identity.Group; import org.activiti.engine.identity.User; import org.activiti.engine.identity.UserQuery; 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; public class CustomUserManager extends UserEntityManager { @Override public User createNewUser(String userId) { // TODO Auto-generated method stub return super.createNewUser(userId); } @Override public void insertUser(User user) { // TODO Auto-generated method stub super.insertUser(user); } @Override public void updateUser(UserEntity updatedUser) { // TODO Auto-generated method stub super.updateUser(updatedUser); } @Override public UserEntity findUserById(String userId) { // TODO Auto-generated method stub return super.findUserById(userId); } @Override public void deleteUser(String userId) { // TODO Auto-generated method stub super.deleteUser(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) { return super.findGroupsByUser(userId); } @Override public UserQuery createNewUserQuery() { // TODO Auto-generated method stub return super.createNewUserQuery(); } @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); } @Override public List<User> findUsersByNativeQuery(Map<String, Object> parameterMap, int firstResult, int maxResults) { // TODO Auto-generated method stub return super.findUsersByNativeQuery(parameterMap, firstResult, maxResults); } @Override public long findUserCountByNativeQuery(Map<String, Object> parameterMap) { // TODO Auto-generated method stub return super.findUserCountByNativeQuery(parameterMap); } }
4.最后是配置文件
<!-- 创建一个流程引擎的配置对象 --> <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <!--这里是数据源的指定 指向你自己的dataSource --> <property name="dataSource" ref="dataSource" /> <property name="transactionManager" ref="transactionManager" /> <!-- 设置数据库schema的更新方式 --> <property name="databaseSchemaUpdate" value="true" /> <!-- 是否启动jobExecutor --> <property name="jobExecutorActivate" value="false" /> <property name="activityFontName" value="宋体" /> <property name="labelFontName" value="宋体" /> <!-- 自动部署流程 --> <property name="deploymentResources"> <list> <value>classpath*:/diagrams/*</value> </list> </property> <property name="mailServerHost" value="smtp.xxx.com" /> <property name="mailServerPort" value="25" /> <property name="mailServerDefaultFrom" value="xxx@xxx.com" /> <property name="mailServerUsername" value="xxx@xx.com" /> <property name="mailServerPassword" value="xxxx" /> <!-- 配置自定义用户 --> <property name="customSessionFactories"> <list> <bean class="tk.hecks.workflow.CustomGroupManagerFactory" > <property name="groupEntityManager"> <bean class="tk.hecks.workflow.CustomGroupManager"></bean> </property> </bean> <bean class="tk.hecks.workflow.CustomUserManagerFactory" > <property name="userEntityManager"> <bean id="userEntityManager" class="tk.hecks.workflow.CustomUserManager"></bean> </property> </bean> </list> </property> </bean>
相关推荐
11. ** 集成与扩展 **:介绍如何与Spring框架集成,以及如何编写自定义的监听器、行为、表达式等,增强Activiti的功能。 12. ** 示例与最佳实践 **:手册中包含多个实际案例,帮助读者更好地理解和应用Activiti,...
BPMN 2.0是业务流程模型和符号的国际标准,手册中对此有详细的介绍,包括BPMN的定义、结构以及如何在Activiti中实现自定义扩展。BPMN结构部分详细介绍了各种事件、网关、任务等元素以及它们在XML中的表示方法。 ...
通过对这些组件的学习,开发者不仅可以掌握Activiti5.14的工作原理,还能了解如何自定义流程行为、扩展Activiti的功能,甚至参与到项目的贡献中。 在阅读源码时,建议首先从主入口点开始,如`org.activiti.engine....
- 开发者可以扩展Activiti的模型器,添加自定义的图形元素和行为。 - 使用Activiti的API,可以创建自定义的服务任务,实现与企业内部系统的深度集成。 - 通过监听器和事件,可以实现对流程生命周期的监控和定制化...
《Activiti 5.14用户手册(中文)》是一份详尽的指南,专为理解和操作Activiti工作流引擎的用户设计。Activiti是一款开源的业务流程管理(BPM)和工作流系统,它基于Java平台,适用于企业级应用。手册的中文版确保了...
### Activiti 5.14 用户手册中文版知识点解析 #### 一、简介 - **协议**:Activiti 使用开放源代码许可协议进行分发,这意味着开发者可以自由地使用、修改和分发此软件。 - **下载**:可以从官方网站或其他官方渠道...
Activiti 5.14 用户手册 Activiti 是一个基于 BPMN 2.0 的业务流程管理系统,本手册详细介绍了 Activiti 5.14 的使用和配置,包括安装、配置、API 使用、Spring 集成、部署、BPMN 2.0 结构、表单、JPA 配置、历史...
Activiti 是一个开源的工作流程引擎,它主要用于自动化业务流程,为企业的业务流程管理提供了一种灵活、可扩展的解决方案。这个“activiti-5.14.zip”压缩包包含了Activiti 5.14版本的相关文件,这版Activiti是一个...
8. **自定义扩展**:通过编写 Java 类和使用 Activiti 的 API,开发者可以扩展 Activiti Designer,实现自定义的行为或功能。 9. **部署与运行**:设计好的流程图可以直接部署到 Activiti 引擎,运行在服务器上,...
6. **事件和监听器(Events and Listeners)**:Activiti允许用户在流程生命周期的各个阶段添加监听器,以便于扩展和自定义行为。`org.activiti.engine.delegate`和`org.activiti.engine.impl.event`包中定义了这些...
- **表单和用户界面**:支持自定义表单,允许通过表单数据驱动流程,并且可以通过API与前端界面集成。 - **动态流程**:支持流程实例的动态修改,如添加、删除任务节点,适应变化的业务需求。 - **规则引擎集成**...
8. **扩展性**:通过插件机制,用户可以自定义和扩展Designer的功能,满足特定的业务需求。 9. **文档资源**:Activiti 社区提供了丰富的文档和教程,帮助开发者快速上手和精通使用Designer。 10. **社区支持**:...
6. **扩展性**:源码允许开发者通过插件机制扩展其功能,例如添加自定义表单、任务监听器等。 7. **调试工具**:包含了调试流程的辅助工具,如流程实例的跟踪和日志查看,有助于开发者定位和解决问题。 8. **API...