在咖啡兔的blog中有一篇文章同步或者重构activiti用户数据的比较,在这里再做简单的介绍以及补充
方案1:通过identityService接口进行同步。
在上篇文章identityService介绍中,讲解了用户,用户组,用户与用户组关系的使用。
那么在我们业务系统中,在新增用户,角色,角色分配等功能中,增加activiti用户,用户组等操作即可实现用户数据的同步。
比如保存系统用户信息:
1. 调用系统业务代码保存用户
2. 调用identityService接口将用户数据保存到activiti中。注意的userId唯一性。
3. 同步用户组,用户与用户组关系等操作
简单点说就是两套表结构,都是用来存储用户,用户组信息的。只要保证数据一致性即可。
方案二:自定义sessionFactory
引擎内部与数据库交互使用的是MyBatis,对不同的表的CRUD操作均由一个对应的实体管理器(XxxEntityManager,有接口和实现类),引擎的7个Service接口在需要CRUD实体时会根据接口获取注册的实体管理器实现类(初始化引擎时用Map对象维护两者的映射关系),并且引擎允许我们覆盖内部的实体管理器,查看源码后可以知道有关Identity操作的两个接口分别为:UserIdentityManager和GroupIdentityManager。
查看引擎配置对象ProcessEngineConfigurationImpl类可以找到一个名称为“customSessionFactories”的属性,该属性可以用来自定义SessionFactory(每一个XXxManager类都是一个Session<实现Session接口>,由SessionFactory来管理),为了能替代内部的实体管理器的实现我们可以自定义一个SessionFactory并注册到引擎。
这种自定义SessionFactory的方式适用于公司内部有独立的身份系统或者公共的身份模块的情况,所有和用户、角色、权限的服务均通过一个统一的接口获取,而业务系统则不保存这些数据,此时引擎的身份模块表就没必要存在(ACT_ID_*)。
具体配置如下:
<!-- 定义基于Spring引擎配置对象bean -->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManager" />
<!--<property name="deploymentResources" value="classpath*:/act/deployments/**/*.bar"/>-->
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="true" />
<property name="history" value="full" />
<property name="processDefinitionCacheLimit" value="10"/>
<!-- UUID作为主键生成策略 -->
<property name="idGenerator" ref="idGen" />
<!-- 生成流程图的字体 -->
<property name="activityFontName" value="${activiti.diagram.activityFontName}"/>
<property

本文介绍了三种同步或重构Activiti用户数据的方法:1) 使用identityService接口;2) 自定义sessionFactory;3) 创建视图覆盖act_id_*表。通过分析,方案一涉及数据双向同步,适合小型项目;方案二适用于有独立身份系统的企业,通过自定义SessionFactory实现;方案三通过视图简化操作,但可能无法满足复杂权限需求。
最低0.47元/天 解锁文章
1043

被折叠的 条评论
为什么被折叠?



