Liferay7 BPM门户开发之46: 集成Activiti用户、用户组、成员关系同步
2016-12-19 21:36
549 查看
在实际的BPM集成开发过程中,Liferay和Activiti这两个异构的系统之间,用户、组的同步需求非常重要,用来实现签收组的概念,比如指定签收组、会签、抢签都需要用到。
Activiti可以通过自定义实现SessionFactory,实现customUserManager和customRoleManager的方式集成第三方的用户关系。
这里我介绍一个方法,可以借助Liferay的实体监听器来做用户、组、用户-组成员关系的三种同步。
其实实现原理非常简单
用户组的同步,就是实现 BaseModelListener 泛型接口
用户,成员关系的同步
其中onAfterAddAssociation 就是监听成员关系,可以在liferay的users_usergroups表和activiti的act_id_membership查看
实际上就是一个关联中间表
运行情况:
1、用户同步,在liferay的用户管理后台添加用户:
添加后,activiti也有同名的用户了(自动同步),即使修改或删除也能同步:
2、用户组同步
注意,liferay叫用户群组,acitiviti叫组
liferay添加组以后,activiti也自动同步:
3、成员关系同步
同步后,发现activiti也有同样的 “用户-组” 关系了
Activiti的集成开发系列文章集合在这里:
http://www.cnblogs.com/starcrm/p/6047486.html
全部工程源代码下载:
http://download.csdn.net/detail/starcrm/9715804
Activiti可以通过自定义实现SessionFactory,实现customUserManager和customRoleManager的方式集成第三方的用户关系。
这里我介绍一个方法,可以借助Liferay的实体监听器来做用户、组、用户-组成员关系的三种同步。
其实实现原理非常简单
用户组的同步,就是实现 BaseModelListener 泛型接口
package com.lifiti.hooks; import org.osgi.service.component.annotations.Component; import com.liferay.portal.kernel.exception.ModelListenerException; import com.liferay.portal.kernel.model.BaseModelListener; import com.liferay.portal.kernel.model.ModelListener; import com.liferay.portal.kernel.model.UserGroup; import com.lifiti.util.IdentifyHelper; @Component(immediate = true, service = ModelListener.class) public class UserGroupListener extends BaseModelListener<UserGroup>{ @Override public void onAfterCreate(UserGroup ug) throws ModelListenerException{ System.out.println(ug.getUuid()+ug.getName() + " Added."); IdentifyHelper.saveGroup(ug.getUuid(), ug.getName(), 1); } @Override public void onAfterRemove(UserGroup ug) throws ModelListenerException { System.out.println(ug.getName() + " Deleted."); IdentifyHelper.delGroup(ug.getUuid()); } @Override public void onAfterUpdate(UserGroup ug) throws ModelListenerException { System.out.println(ug.getName() + " Modified."); IdentifyHelper.delGroup(ug.getUuid()); IdentifyHelper.saveGroup(ug.getUuid(), ug.getName(), 1); } }
用户,成员关系的同步
其中onAfterAddAssociation 就是监听成员关系,可以在liferay的users_usergroups表和activiti的act_id_membership查看
实际上就是一个关联中间表
package com.lifiti.hooks; import org.osgi.service.component.annotations.Component; import com.liferay.portal.kernel.exception.ModelListenerException; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.model.BaseModelListener; import com.liferay.portal.kernel.model.ModelListener; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.service.UserGroupLocalServiceUtil; import com.liferay.portal.kernel.service.UserLocalServiceUtil; import com.lifiti.util.IdentifyHelper; @Component(immediate = true, service = ModelListener.class) public class UserListener extends BaseModelListener<User> { @Override public void onAfterCreate(User u) throws ModelListenerException { System.out.println(u.getScreenName() + " Added."); IdentifyHelper.saveUser(u.getScreenName(), u.getLastName() + u.getFirstName(), u.getEmailAddress()); } @Override public void onAfterRemove(User u) throws ModelListenerException { System.out.println(u.getUserId() + " Deleted."); IdentifyHelper.delUser(u.getScreenName()); } @Override public void onAfterUpdate(User u) throws ModelListenerException { System.out.println(u.getUserId() + " Modified."); IdentifyHelper.delUser(u.getScreenName()); IdentifyHelper.saveUser(u.getScreenName(), u.getLastName() + u.getFirstName(), u.getEmailAddress()); } @Override public void onAfterAddAssociation(Object classPK, String associationClassName, Object associationClassPK) throws ModelListenerException { try { //对关系类型进行过滤,比如com.liferay.portal.kernel.model.UserRole先不处理 if ("com.liferay.portal.kernel.model.UserGroup".equals(associationClassName)) { IdentifyHelper.createMembership( UserLocalServiceUtil.getUser(Long.parseLong(classPK.toString())).getScreenName(), UserGroupLocalServiceUtil.getUserGroup(Long.parseLong(associationClassPK.toString())) .getUuid()); System.out.println(classPK.toString() + "#" + associationClassName + "#" + associationClassPK.toString() + " associationClassName Modified."); } } catch (NumberFormatException e) { e.printStackTrace(); } catch (PortalException e) { e.printStackTrace(); } } @Override public void onAfterRemoveAssociation(Object classPK, String associationClassName, Object associationClassPK) throws ModelListenerException { try { if ("com.liferay.portal.kernel.model.UserGroup".equals(associationClassName)) { IdentifyHelper.deleteMembership( UserLocalServiceUtil.getUser(Long.parseLong(classPK.toString())).getScreenName(), UserGroupLocalServiceUtil.getUserGroup(Long.parseLong(associationClassPK.toString())) .getUuid()); System.out.println(classPK.toString() + "#" + associationClassName + "#" + associationClassPK.toString() + " associationClassName Removed."); } } catch (NumberFormatException e) { e.printStackTrace(); } catch (PortalException e) { e.printStackTrace(); } } }
运行情况:
1、用户同步,在liferay的用户管理后台添加用户:
添加后,activiti也有同名的用户了(自动同步),即使修改或删除也能同步:
2、用户组同步
注意,liferay叫用户群组,acitiviti叫组
liferay添加组以后,activiti也自动同步:
3、成员关系同步
同步后,发现activiti也有同样的 “用户-组” 关系了
Activiti的集成开发系列文章集合在这里:
http://www.cnblogs.com/starcrm/p/6047486.html
全部工程源代码下载:
http://download.csdn.net/detail/starcrm/9715804
相关文章推荐
- Liferay7 BPM门户开发之12:acitiviti和liferay用户权限体系集成
- Liferay7 BPM门户开发之26: 集成Activiti到Liferay7
- Liferay7 BPM门户开发之16: Liferay中用户\站点\组织架构\角色\用户组以及关联关系
- Liferay7 BPM门户开发之44: 集成Activiti展示流程列表
- Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发
- Liferay7 BPM门户开发之35: AssetTag的集成查询
- Liferay7 BPM门户开发之3: Activiti开发环境搭建
- Liferay7 BPM门户开发之8: Activiti实用问题集合
- Liferay7 BPM门户开发之11: Activiti工作流程开发的一些统一规则和实现原理(完整版)
- Liferay7 BPM门户开发之5: Activiti和Spring集成
- Liferay7 BPM门户开发之45: 集成Activiti文件上传部署流程BPMN模型
- Liferay7 BPM门户开发之28: Portlet文件上传,及实体类同步更新上传
- Liferay7 BPM门户开发之47: 集成Activiti待办已办任务清单和流程启动
- Liferay7 BPM门户开发之6: Activiti数据库换为mysql
- Liferay7 BPM门户开发之2: BPMN 2.0 规范入门 (Activiti BPMN extensions)
- Liferay7 BPM门户开发之7: Activiti中的重要概念和主要数据库结构
- Liferay7 BPM门户开发之34: liferay7对外服务类生成(RestService Get Url)
- Liferay7 BPM门户开发之18: 理解ServiceContext
- C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息
- Liferay7 BPM门户开发之27: MVC Portlet插件工程开发