欢迎转载,转载请注明出处,谢谢
这一篇博客接着以前的JBPM写,很不好意思,中间间隔了那么久,实在是有的忙了,或许我自己太懒了,见谅,哈哈.....
之前两篇简单讲了下JBPM的环境搭建,由于前段时间项目也用到了JBPM,所以今天我们回顾一下JBPM与业务系统的用户,权限集成的问题。
首先,我们要搞明白为什么把JBPM的用户体系集成到自己的业务系统,也就是抛弃JBPM自己的用户体系,稍有研究的同学肯定也小得JBPM自带的用户权限太简单了,就只有三张表,而且字段也过于简单。
在集成之前我们先回顾下JBPM自己的用户体系,它一共有三张表,jbpm4_id_user,jbpm4_id_group,jbpm4_id_membership,也就是用户表,组表,用户与组关系表,那么想要集成,在我们业务系统里面肯定得有与这三张表类似的表,用户表业务系统肯定有(你懂的),组这个表业务系统不一定有,但是考虑到业务系统一般都有角色表,那么我们是不是可以把角色当作组,答案是肯定的,我接下来要讲的也就是这样子的,组与用户的关系表就不说了,有角色表的话,关系也肯定有。
表的问题解决了,我们要做的第一步就是让我们业务系统的User实体实现JBPM的User接口:
/** *用户实体表 *已实现org.jbpm.api.identity.User接口,与JBPM公用用户对象 */ @Entity @Table(name = "T_USER") public class User extends BaseEntity implements org.jbpm.api.identity.User {
实现该接口后,由于org.jbpm.api.identity.User里有个方法
public String getId();
一般来说我们的User实体id都是int型的,但是接口里的都是String型的,所以这个要做个转换
@Override public String getId() { return id.toString(); }
同时setId方法也要改一点点:
public void setId(String id) { this.id = NumberUtils.toInt(id); }
同时Role这个实体也要实现JBPM的Group接口:
/** *角色实体类 *已实现org.jbpm.api.identity.Group接口,与JBPM公用用户组概念 *@author LuoYu */ @Entity @Table(name = "T_ROLE") public class Role extends BaseEntity implements Group
Role里面的id问题与User一样,做一点点修改,这里不再赘述.
值得得注意的是:既然我们修改了JBPM用户,组的指向,那么之前JBPM自带的创建用户,组等方法肯定不好使,我们得重写这些方法,怎么重写?JBPM其实也提供了一个接口来做这个事情,IdentitySession。
我们需要创建一个类来实现该接口,下面的我系统里的相关代码:
/** * 自定义的JBPM,identitySession引擎 * 继承JBPM的IdentitySession接口,以实现外挂配餐系统自己的用户系统 * @author LuoYu */ @Service @Component(value = "sessionService") public class JbpmSessionEngine implements IdentitySession { @Autowired private IBaseDao baseDao; @Override public String createGroup(String groupName, String groupType, String groupParentId) { Role role = new Role(); role.setRoleName(groupName); return (String) this.baseDao.save(role); } public void createMembership(String userId,String groupId){ UserRole userRole = new UserRole(); com.tlj.pcxt.entity.admin.User user = new com.tlj.pcxt.entity.admin.User(); user.setId(userId); userRole.setUser(user); Role role = new Role(); role.setId(groupId); this.baseDao.save(userRole); } @Override public void deleteGroup(String groupId) { } @Override public void deleteMembership(String userId, String groupId, String role) { } @Override public Group findGroupById(String groupId) { return (Group) this.baseDao.getObjectByID(Role.class, NumberUtils.toInt(groupId)); } /** * 通过userId查询所在的用户组 *@author LuoYu *@date 2013-4-25 *@param arg *@return String */ @SuppressWarnings("unchecked") @Override public List<Group> findGroupsByUser(String userId) { String hql = "select o.role from UserRole o where o.user.id = "+NumberUtils.toInt(userId); return (List<Group>) this.baseDao.getObjectList(hql); } @Override public User findUserById(String userId) { Object obj = this.baseDao.getObjectByID(com.tlj.pcxt.entity.admin.User.class, NumberUtils.toInt(userId)); if(obj!=null){ return (User)obj; } return new UserImpl(); } @SuppressWarnings("unchecked") @Override public List<User> findUsers() { return (List<User>)this.baseDao.getAllObjects(com.tlj.pcxt.entity.admin.User.class); } public com.tlj.pcxt.entity.admin.User getUserById(String userId){ return (com.tlj.pcxt.entity.admin.User) this.baseDao.getObjectByID(com.tlj.pcxt.entity.admin.User.class, Integer.parseInt(userId)); } @Override public List<User> findUsersByGroup(String groupId) { return null; } /** * 通过用户组id查询下属所有用户 *@author LuoYu *@date 2013-4-25 *@param arg *@return String */ @SuppressWarnings("unchecked") public List<com.tlj.pcxt.entity.admin.User> getUsersByGroup(String groupId){ String hql = "select o.user from UserRole o where o.role.id="+NumberUtils.toInt(groupId); List<com.tlj.pcxt.entity.admin.User> list = (List<com.tlj.pcxt.entity.admin.User>) baseDao.getObjectList(hql); return list; } @SuppressWarnings("unchecked") public List<ProcessDefinitionInfo> getAllDeployDefinition(){ List<ProcessDefinitionInfo> list = new ArrayList<ProcessDefinitionInfo>(); String hql = "from ProcessDefinitionInfo o where o.isDelete=0"; list = (List<ProcessDefinitionInfo>) this.baseDao.getObjectList(hql); return list; } public void saveProcessDefinitionInfo(ProcessDefinitionInfo processDefinitionInfo){ this.baseDao.save(processDefinitionInfo); } @SuppressWarnings("unchecked") public ListVo<ProcessInfo> getAllProcessInstance(Map<String, Object> paramMap){ ListVo<ProcessInfo> listVo = new ListVo<ProcessInfo>(); List<ProcessInfo> list = new ArrayList<ProcessInfo>(); StringBuffer hqlList = new StringBuffer(); StringBuffer hqlCount = new StringBuffer(); Map<Object, Object> map = new HashMap<Object, Object>(); int start = NumberUtils.toInt((String) paramMap.get("start")); int limit = NumberUtils.toInt((String) paramMap.get("limit")); String status = (String) paramMap.get("status"); hqlList.append("select w from ProcessInfo w where w.isDelete=0 "); hqlCount.append("select count(w.id) from ProcessInfo w where w.isDelete=0 "); if(!StringUtils.isBlank(status)){ hqlList.append("and w.status = :status "); hqlCount.append("and w.status = :status "); map.put("status", status); } hqlList.append("order by w.status asc,w.createDate desc"); list = (List<ProcessInfo>) this.baseDao.findPageByQuery(start, limit, hqlList.toString(), map); int count = this.baseDao.getTotalCount(hqlCount.toString(), map); listVo.setList(list); listVo.setTotalSize(count); return listVo; } public void deleteDefinition(String ids) { this.baseDao.delete(ProcessDefinitionInfo.class, ids); } @SuppressWarnings("unchecked") public String getDefinitionIdByObjectName(String name){ String sql = "select j.DEPLOYMENT_ from jbpm4_deployprop j where j.OBJNAME_ = '"+name+"' and j.KEY_ = 'pdid'"; List<Object> list = (List<Object>) this.baseDao.getObjectsByNativeSql(sql); if(list!=null){ return list.get(0).toString(); } return null; } public IBaseDao getBaseDao() { return baseDao; } public void setBaseDao(IBaseDao baseDao) { this.baseDao = baseDao; } @Override public String createUser(String s, String s1, String s2, String s3) { return null; } @Override public List<User> findUsersById(String... as) { return null; } @Override public void deleteUser(String s) { } @Override public List<Group> findGroupsByUserAndGroupType(String s, String s1) { return null; } @Override public void createMembership(String s, String s1, String s2) { } }
这里面需要实现的方法很多,自己斟酌,重写你需要用到的方法即可。
这些步骤完成之后,再回家最初的配置,找到jbpm.cfg.xml,在里面添加如下代码,用来指向我们刚刚创建的类
<transaction-context> <hibernate-session current="true" /> <Object class="com.tlj.pcxt.service.jbpm.identity.JbpmSessionEngine" /> </transaction-context>
完成这一步,基本上就属于万事具备,只欠东风了
在我们需要用到jbpm的地方,注入我们刚刚创建的service,任务JBPM操作都通过我们刚刚创建的类提供的方法来完成!
好了,以上就是把JBPM的用户体系集成自己业务系统的所有过程,,欢迎拍砖!
相关推荐
jbpm-4.4\jbpm-4.4\doc\javadocsjbpm-4.4\jbpm-4.4\doc\javadocsjbpm-4.4\jbpm-4.4\doc\javadocs
JBPM4.4-API-CHM官方英文版(自己制作整合)
《jBPM4.4开发指南》与《jBPM4.4中文用户手册》是深入理解jBPM...总的来说,jBPM4.4是企业级业务流程自动化的重要工具,通过深入学习这两份资料,开发者和业务人员都能够充分利用其功能,提升流程管理的效率和灵活性。
jbpm4.4 ibatis-spring 整合
3 Jbpm4.4介绍 7 3.1工作流引擎 8 3.2jpdl 8 3.3数据库 8 3.3.1资源库和运行时表结构 8 3.3.2历史数据库表 9 3.3.3身份认证表 9 3.4jbpm.cfg.xml 9 3.5 jbpm.hibernate.cfg.xml 10 3.6logging.properties 10 4 准备...
【jbpm-4.4.zip part03】这个压缩文件是关于jbpm 4.4版本的组成部分,jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了业务流程建模、部署、执行和监控的功能。jbpm 4.4是该系统的一...
完美版JBPM4.4帮助文档,开发必备。
JBPM4.4学习文档.ppt
jBPM 4.4的下载地址为:http://sourceforge.net/projects/jbpm/files/jBPM%204/jbpm-4.4/。在下载页面上,你可以找到不同的包,包括源代码、二进制文件和文档。选择适合你需求的包进行下载。安装过程通常涉及解压缩...
三、jbpm4.4学习路径 1. 基础概念:首先需要了解BPM的基本概念,如流程实例、任务、事件、信号等。 2. 工具使用:学习使用jbpm提供的图形化建模工具,创建和编辑流程模型。 3. API及编程接口:深入理解jbpm的API,如...
在本文档中,主要讨论的是jbpm 4.4 版本的学习笔记。作者通过实践学习并整理了关于jbpm的一些关键概念和操作。 首先,流程图是jbpm设计流程的核心,它包含了一系列的流程元素。在提到的订购流程中,主要包括以下...
导航至 install/src/gpd/jbpm-gpd-site.zip 并点击 Open 5. 在 Install 对话框中选择 jPDL4 GPD Update Site 6. 点击 Next 和 Finish 7. 同意许可协议 8. 重启 Eclipse - **添加 jPDL 4.4 Schema 校验**:用于...
通过这个入门实例,开发者可以学习到如何使用jBPM4.4进行流程设计、部署和执行的基本操作,并逐步掌握其在实际项目中的应用。在实践中不断探索和深入,才能更好地利用jBPM4.4实现业务流程自动化,提高工作效率。
【jbpm_4.4完整架包】是一个包含jbpm(Java Business Process Management)4.4版本所有必要组件和资源的压缩包。jbpm是一个开源的工作流管理系统,它提供了业务流程建模、部署、执行、监控和管理的能力,主要用于...
3. **持久化**: jbpm4.4支持JPA(Java Persistence API),允许流程实例和相关数据在数据库中持久化,确保系统在重启后仍能恢复状态。 4. **任务服务**: 提供了任务服务,使得用户可以进行任务的接收、完成、委托和...
- 随附的学习资料可能包括JBPM4.4的官方文档、教程、示例代码解析等,对于初学者来说,这些资源可以帮助理解JBPM的工作原理和使用方法。 7. **项目结构与运行** - JBPM4.4Demo项目可能包含了Maven或Gradle构建...
jbpm4.4 shh2 项目示例是基于jbpm4.4版本与SSH2(Struts2、Spring和Hibernate)集成的一个实战项目。jbPM(Business Process Management)是一款开源的工作流管理系统,用于实现业务流程自动化。SSH2是Java开发中的...
《jBPM 4.4 用户手册》中文版提供了全面的指南,涵盖了从安装、配置、建模、执行到监控的各个环节,是学习和使用jBPM 4.4的重要参考资料。通过阅读这份手册,开发者和业务分析师可以深入了解jBPM的功能和用法,快速...
JBPM4.4是JBPM的其中一个稳定版本,发布于2009年,它提供了强大的工作流服务,包括流程定义、流程实例管理、任务管理和监控等功能。在JBPM4.4版本中,开发者可以利用其提供的API和工具来设计、部署和执行复杂的业务...