[Java][activiti]同步或者重构activiti identify用户数据的方法(三)

2014-11-23 21:39:24 · 作者: · 浏览: 22
tion { // 清空工作流用户、角色以及关系 deleteAllActivitiIdentifyData(); // 复制角色数据 synRoleToActiviti(); // 复制用户以及关系数据 synUserWithRoleToActiviti(); } /** * 复制用户以及关系数据 */ privatevoid synUserWithRoleToActiviti() { List allUser = accountManager.getAll(); for(User user : allUser) { String userId = user.getId().toString(); // 添加一个用户到Activiti saveActivitiUser(user); // 角色和用户的关系 List roleList = user.getRoleList(); for(Role role : roleList) { identityService.createMembership(userId, role.getEnName()); logger.debug(add membership {user: {}, role: {}}, userId, role.getEnName()); } } } /** * 同步所有角色数据到{@link Group} */ privatevoid synRoleToActiviti() { List allRole = roleManager.getAll(); for(Role role : allRole) { String groupId = role.getEnName().toString(); Group group = identityService.newGroup(groupId); group.setName(role.getName()); group.setType(role.getType()); identityService.saveGroup(group); } } @Override publicvoid deleteAllActivitiIdentifyData() throwsException { activitiIdentifyService.deleteAllMemerShip(); activitiIdentifyService.deleteAllRole(); activitiIdentifyService.deleteAllUser(); } }

方案二:覆盖IdentifyService接口的实现

此方法覆盖IdentifyService接口的默认实现类:org.activiti.engine.impl.IdentityServiceImpl

读者可以根据现有的用户管理接口实现覆盖IdentityServiceImpl的每个方法的默认实现,这样就等于放弃使用系列表:ACT_ID_。

此方法不再提供代码,请读者自行根据现有接口逐一实现接口定义的功能。

方案三:用视图覆盖同名的ACT_ID_系列表

此方案和第二种类似,放弃使用系列表:ACT_ID_,创建同名的视图。

1.删除已创建的ACT_ID_*表

创建视图必须删除引擎自动创建的ACT_ID_*表,否则不能创建视图。

2.创建视图:

ACT_ID_GROUPACT_ID_INFOACT_ID_MEMBERSHIPACT_ID_USER

创建的视图要保证数据类型一致,例如用户的ACT_ID_MEMBERSHIP表的两个字段都是字符型,一般系统中都是用NUMBER作为用户、角色的主键类型,所以创建视图的时候要把数字类型转换为字符型。

3.修改引擎默认配置

在引擎配置中设置属性dbIdentityUsedfalse即可。


  
   
    ...
    
   
     ... 
   
  

总结

方案:不破坏、不修改源码面向接口编程推荐

方案:放弃原有的Identify模块,使用自定义的实现,特殊情况可以使用此方式;

方案:不需要编写Java代码,只需要创建同名视图即可,对于现有系统的集成、强烈推荐