- 浏览: 146281 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
liuxiang00435057:
不知道,你有这个的实现不,能发给我参考下吗,liuxiang0 ...
RBAC模型的通用权限管理系统的设计(数据模型)的扩展 -
步青龙:
这个批量上传确定可以用吗?我这怎么不行呢,官方的Demo也不行 ...
KindEditor 4.1 发布,开源HTML编辑器
发现JBPM4的权限方面略差一些以后,还是觉得可以续写接口,实现自定义用户组
贴出以下几个关键文件:
jbpm.identity.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <transaction-context> <object class="com.squall.jbpm.test.MesIdentitySessionImpl"/> </transaction-context> </jbpm-configuration>
MesUser.java
package com.squall.jbpm.test; import java.io.Serializable; import java.sql.Blob; import org.jbpm.api.identity.User; public class MesUser implements Serializable, User { private static final long serialVersionUID = 1L; private String id; private String userNo;// 员工工号 private String userName;// 员工姓名 private String userSex;// 性别 private String userPassword;// 密码 private String userType;// 类型 private String userMail;// 电子邮件 private String isValid;// 是否有效Y/N private Blob signaturePic;// 电子签名 private String remarks;// 备注 protected long dbid; // 数据库内部自生成的ID protected int dbversion; public int getDbversion() { return dbversion; } public MesUser() { } public MesUser(String id, String userName, String userMail) { this.id = id; this.userName = userName; this.userMail = userMail; } public void setDbversion(int dbversion) { this.dbversion = dbversion; } public long getDbid() { return dbid; } public void setDbid(long dbid) { this.dbid = dbid; } public void setId(String id) { this.id = id; } public String getUserNo() { return userNo; } public void setUserNo(String userNo) { this.userNo = userNo; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserSex() { return userSex; } public void setUserSex(String userSex) { this.userSex = userSex; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public String getUserType() { return userType; } public void setUserType(String userType) { this.userType = userType; } public String getUserMail() { return userMail; } public void setUserMail(String userMail) { this.userMail = userMail; } public String getIsValid() { return isValid; } public void setIsValid(String isValid) { this.isValid = isValid; } public Blob getSignaturePic() { return signaturePic; } public void setSignaturePic(Blob signaturePic) { this.signaturePic = signaturePic; } public String getRemarks() { return remarks; } public void setRemarks(String remarks) { this.remarks = remarks; } public String getDisplayName() { return userName + "(" + id + ")"; } // 实现User接口所必须实现的几个方法 public String getId() { return this.id; } public String getGivenName() { return null; } public String getFamilyName() { return null; } public String getBusinessEmail() { return this.userMail; } }
MesGroup.java
package com.squall.jbpm.test; import java.io.Serializable; import org.jbpm.api.identity.Group; public class MesGroup implements Serializable, Group { private static final long serialVersionUID = 1L; private String id; private String groupName;// 组织名称 private String groupType;// 组织类型 private MesGroup parentGroup;// 父组织 private String remarks;// 备注 protected long dbid; protected int dbversion; public int getDbversion() { return dbversion; } public void setDbversion(int dbversion) { this.dbversion = dbversion; } public long getDbid() { return dbid; } public void setDbid(long dbid) { this.dbid = dbid; } public String getParentGroupID() { return parentGroup != null ? parentGroup.getId() : null; } public String getParentGroupName() { return parentGroup == null ? "xxx" : parentGroup.getGroupName(); } public void setId(String id) { this.id = id; } public String getGroupName() { return groupName; } public void setGroupName(String groupName) { this.groupName = groupName; } public String getGroupType() { return groupType; } public void setGroupType(String groupType) { this.groupType = groupType; } public MesGroup getParentGroup() { return parentGroup; } public void setParentGroup(MesGroup parentGroup) { this.parentGroup = parentGroup; } public String getRemarks() { return remarks; } public void setRemarks(String remarks) { this.remarks = remarks; } // 实现Group接口必须的几个方法 public String getName() { return this.groupName; } public String getType() { return this.groupType; } public String getId() { return id; } }
MesGroupMember.java
package com.squall.jbpm.test; import java.io.Serializable; public class MesGroupMember implements Serializable { private static final long serialVersionUID = 1L; protected long dbid; protected int dbversion; private MesUser user; private MesGroup group; protected String role; public int getDbversion() { return dbversion; } public void setDbversion(int dbversion) { this.dbversion = dbversion; } public long getDbid() { return dbid; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } public void setDbid(long dbid) { this.dbid = dbid; } public MesGroup getGroup() { return group; } public void setGroup(MesGroup group) { this.group = group; } public String getUserNo() { return user.getUserNo(); } public String getUserID() { return user.getId(); } public String getUserName() { return user.getUserName(); } public MesUser getUser() { return user; } public void setUser(MesUser user) { this.user = user; } }
MesIdentitySessionImpl.java
package com.squall.jbpm.test; import java.util.Arrays; import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.jbpm.api.JbpmException; import org.jbpm.api.identity.Group; import org.jbpm.api.identity.User; import org.jbpm.pvm.internal.env.BasicEnvironment; import org.jbpm.pvm.internal.env.EnvironmentImpl; import org.jbpm.pvm.internal.id.DbidGenerator; import org.jbpm.pvm.internal.identity.spi.IdentitySession; @SuppressWarnings("unchecked") public class MesIdentitySessionImpl implements IdentitySession { protected Session session; public MesIdentitySessionImpl() { this.session = BasicEnvironment.getFromCurrent(Session.class); } /* public String createH() { Test t = new Test(); long dbid = EnvironmentImpl.getFromCurrent(DbidGenerator.class).getNextId(); t.setDbid(dbid); t.setId("abc"); return null; } */ public String createUser(String id, String userName, String businessEmail, String familName) { MesUser user = new MesUser(id, userName, businessEmail); long dbid = EnvironmentImpl.getFromCurrent(DbidGenerator.class).getNextId(); user.setDbid(dbid); session.save(user); return user.getId(); } public MesUser findUserById(String userId) { return (MesUser) session.createCriteria(MesUser.class).add( Restrictions.eq("id", userId)).uniqueResult(); } public List<User> findUsersById(String... userIds) { List<User> users = session.createCriteria(MesUser.class).add( Restrictions.in("id", userIds)).list(); if (userIds.length != users.size()) { throw new JbpmException("not all users were found: " + Arrays.toString(userIds)); } return users; } public List<User> findUsers() { return session.createCriteria(MesUser.class).list(); } public void deleteUser(String userId) { // lookup the user MesUser user = findUserById(userId); // cascade the deletion to the memberships List<MesGroupMember> memberships = session.createCriteria( MesGroupMember.class).add(Restrictions.eq("user", user)).list(); // delete the related memberships for (MesGroupMember membership : memberships) { session.delete(membership); } // delete the user session.delete(user); } public String createGroup(String groupName, String groupType, String parentGroupId) { MesGroup group = new MesGroup(); String groupId = groupType != null ? groupType + "." + groupName : groupName; group.setId(groupId); long dbid = EnvironmentImpl.getFromCurrent(DbidGenerator.class) .getNextId(); group.setDbid(dbid); group.setGroupName(groupName); group.setGroupType(groupType); if (parentGroupId != null) { MesGroup parentGroup = findGroupById(parentGroupId); group.setParentGroup(parentGroup); } session.save(group); return group.getId(); } public List<User> findUsersByGroup(String groupId) { return session.createCriteria(MesGroupMember.class).createAlias( "group", "g").add(Restrictions.eq("g.id", groupId)) .setProjection(Projections.property("user")).list(); } public MesGroup findGroupById(String groupId) { return (MesGroup) session.createCriteria(MesGroup.class).add( Restrictions.eq("id", groupId)).uniqueResult(); } public List<Group> findGroupsByUserAndGroupType(String userId, String groupType) { return session.createQuery( "select distinct m.group" + " from " + MesGroupMember.class.getName() + " as m where m.user.id = :userId" + " and m.group.type = :groupType").setString("userId", userId).setString("groupType", groupType).list(); } public List<Group> findGroupsByUser(String userId) { List<Group> gList = session.createQuery( "select distinct m.group" + " from " + MesGroupMember.class.getName() + " as m where m.user.id = :userId").setString( "userId", userId).list(); return gList; } public List<Group> findGroups() { return session.createCriteria(MesGroup.class).list(); } public void deleteGroup(String groupId) { // look up the group MesGroup group = findGroupById(groupId); // cascade the deletion to the memberships List<MesGroupMember> memberships = session.createCriteria( MesGroupMember.class).add(Restrictions.eq("group", group)) .list(); // delete the related memberships for (MesGroupMember membership : memberships) { session.delete(membership); } // delete the group session.delete(group); } public void createMembership(String userId, String groupId, String role) { MesUser user = findUserById(userId); if (user == null) { throw new JbpmException("user " + userId + " doesn't exist"); } MesGroup group = findGroupById(groupId); if (group == null) { throw new JbpmException("group " + groupId + " doesn't exist"); } MesGroupMember membership = new MesGroupMember(); membership.setUser(user); membership.setGroup(group); membership.setRole(role); long dbid = EnvironmentImpl.getFromCurrent(DbidGenerator.class) .getNextId(); membership.setDbid(dbid); session.save(membership); } public void deleteMembership(String userId, String groupId, String role) { MesGroupMember membership = (MesGroupMember) session.createCriteria( MesGroupMember.class).createAlias("user", "u").createAlias( "group", "g").add(Restrictions.eq("u.id", userId)).add( Restrictions.eq("g.id", groupId)).uniqueResult(); session.delete(membership); } }
applicationContext-hibernate.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:annotation-config /> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" p:location="hibernate.properties" p:ignoreUnresolvablePlaceholders="true" /> <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" /> <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mappingResources"> <list> <value>jbpm.repository.hbm.xml</value> <value>jbpm.execution.hbm.xml</value> <value>jbpm.history.hbm.xml</value> <value>jbpm.task.hbm.xml</value> <value>jbpm.identity.hbm.xml</value> </list> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${dataSource.driverClassName}" /> <property name="url" value="${dataSource.url}" /> <property name="username" value="${dataSource.username}" /> <property name="password" value="${dataSource.password}" /> </bean> </beans>
customize.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.jbpm.pvm.internal.identity.impl" default-access="field"> <!-- ### USER ########################################################### --> <class name="com.squall.jbpm.test.MesUser" table="JBPM4_CUSTOMIZE_USER"> <id name="dbid" column="DBID"> <generator class="assigned" /> </id> <version name="dbversion" column="DBVERSION_" /> <property name="id" column="USERID_" /> <!-- 登陆ID --> <property name="userNo" column="USERNO_" /> <!-- 员工工号 --> <property name="userName" column="USERNAME_" /> <!-- 姓名 --> <property name="userSex" column="USERSEX_" /> <!-- 性别 --> <property name="userPassword" column="USERPASSWORD_" /> <!-- 密码 --> <property name="userType" column="USERTYPE_" /> <!-- 类型 --> <property name="userMail" column="USERMAIL_" /> <!-- 电子邮件 --> <property name="signaturePic" column="SIGNATUREPIC_" /> <!-- 电子签名 --> <property name="remarks" column="REMARKS_" /> <!-- 备注 --> </class> <!-- ### MEMBERSHIP ##################################################### --> <class name="com.squall.jbpm.test.MesGroupMember" table="JBPM4_CUSTOMIZE_MEMBERSHIP"> <id name="dbid" column="DBID_"> <generator class="assigned" /> </id> <version name="dbversion" column="DBVERSION_" /> <many-to-one name="user" column="USER_" class="com.squall.jbpm.test.MesUser" foreign-key="FK_MEM_USER" index="IDX_MEM_USER" /> <many-to-one name="group" column="GROUP_" class="com.squall.jbpm.test.MesGroup" foreign-key="FK_MEM_GROUP" index="IDX_MEM_GROUP" /> <property name="role" column="NAME_" /> </class> <!-- ### GROUP ########################################################### --> <class name="com.squall.jbpm.test.MesGroup" table="JBPM4_CUSTOMIZE_GROUP"> <id name="dbid" column="DBID_"> <generator class="assigned" /> </id> <version name="dbversion" column="DBVERSION_" /> <!-- private String groupID;//数据库内部ID号 private String groupName;//组织名称 private String groupType;//组织类型 private MesGroup parentGroup;//父组织 private String remarks;//备注 --> <property name="id" column="ID_" /> <property name="groupName" column="NAME_" /> <property name="groupType" column="TYPE_" /> <property name="remarks" column="REMARKS_" /> <many-to-one name="parentGroup" column="PARENT_" class="com.squall.jbpm.test.MesGroup" foreign-key="FK_GROUP_PARENT" index="IDX_GROUP_PARENT" /> </class> </hibernate-mapping>
自己看看,懂了就OK了!
发表评论
-
jbpm4.4和tomcat6包冲突问题 javax.el.ELException: expression factory class not found
2012-11-29 12:07 1436将tomcat的lib下的包el-api.jar 替换成jbp ... -
jbpm4.4 sql脚本
2012-11-29 11:44 884CREATE TABLE JBPM4_DEPLOYMENT ( ... -
jbpm学习笔记—— task活动之泳道的概念
2012-08-31 14:47 948任务泳道的概念:在实际的业务应用中,经常会遇到这样一种场景:流 ... -
jbpm4 数据库结构关系图
2012-08-23 12:25 1430持久化基础知识 持久化( Persist ... -
JBPM4.4 eclipse插件安装
2012-08-23 10:41 861JBPM4.4 eclipse插件安装 j ... -
JBPM4 表结构概要说明
2011-12-15 10:06 1110(1)JBPM4_DEPLOYMENT、 (2)JBPM4_ ... -
jbpm4.4安装配置
2011-12-09 14:15 10041. 准备jBPM:http://sourcefo ... -
JBPM4.4 和tomcat6.0.X 兼容问题
2011-12-09 14:16 793基于JBPM4的web项目jsp页面发布出错,错误如下: ...
相关推荐
**jbpm4.4中文用户手册** jbpm4.4是一款功能强大的业务流程管理(BPM)和工作流系统,适用于构建和管理复杂的业务流程。该中文用户手册是官方提供的翻译版本,对于初学者来说是一份非常有价值的参考资料,旨在帮助...
【jbpm4.4项目】是一个基于JBPM4.4版本的工作流管理系统示例,它为初学者提供了深入了解和实践企业级...同时,jbpm4.4作为开源项目,其社区活跃,有大量的文档和示例可供参考,对于深入学习和自定义扩展非常有帮助。
`JBPM4_PARTICIPATION`表定义了参与者信息,包括不同类型的参与角色如Candidate、Client、Owner等,可以是单个用户或用户组。 `JBPM4_SWIMLANE`表关联了泳道信息,泳道是工作流中的一种分隔机制,使得任务可以按...
7. **IdentityService对象**:IdentityService 是身份认证服务,用于处理流程中的用户、用户组和组成员关系。它可以用来管理用户权限和角色分配。 在JBPM4.4中,流程活动主要分为两类:控制活动和自动活动。 - **...
参与者可以是用户、用户组或者角色,jbPM会根据这些信息分配任务。 3. **加签功能** 加签是在流程进行中,根据实际情况需要增加额外审批者的功能。在jbPM中实现加签,可以通过动态修改任务参与者的方式来达成。这...
【JBPM4.4 SSH案例】是一个基于Java技术栈的业务流程管理(BPM)示例项目,结合了Struts2、Spring和Hibernate这三大流行框架。JBPM4.4是JBoss公司提供的一个开源BPM平台,它允许开发者设计、执行和管理业务流程。在...
JBPM4.4还提供了可视化的流程设计器,用户可以通过拖拽方式构建流程图,大大简化了流程开发过程。 【SSH2】 SSH(Secure Shell)是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他网络服务。SSH2...
任务可以分配给特定的用户或组,并且有状态管理,如新、进行中、已完成等。任务管理提供了与工作流参与者交互的能力,允许他们接受、拒绝、重新分配或完成任务。 **执行服务** 执行服务负责运行流程实例。当流程...
**jBPM4.4与SSH整合配置及完整实例详解** jBPM(Java Business Process Management)是一款开源的工作流管理系统,主要用于处理业务流程自动化。在本实例中,我们将讨论如何将jBPM 4.4版本与SSH(Spring、Struts、...
- 用户可以通过jBPM的TaskService接口进行任务的创建、查询、领取和完成操作。 - 集成了邮件通知和多种任务分配策略,提高工作效率。 9. **测试和调试** - 提供了测试框架,允许编写单元测试来验证流程行为。 -...
- Candidate-groups:指定任务由某个用户组执行。 - Candidate-users:允许多个用户参与任务执行。 4. Swimlane:泳道,用于区分不同角色或部门的任务分配,但文档中提到这部分未深入研究。 5. None:不设置特定...
任务可以指定给用户或组,同时支持任务的查询、过滤和定制化通知。 4. **事件处理**:jbpm4.4支持流程中的事件监听,如信号事件、时间事件等,这些事件可以触发流程的特定行为,如分支、跳转或结束流程。 5. **...
- **目标读者**:本书面向具有一定开发经验的技术人员,旨在帮助他们掌握jBPM4.4的相关配置、开发及实施流程。 - **概述**:本书详细介绍了jBPM4.4的核心功能与特性,并提供了丰富的示例来辅助理解。 - **源代码和...
任务分配是jBPM流程执行过程中的核心功能,它决定了任务如何被不同角色的用户或用户组接收并处理。任务分配主要有两种方式: 1. **静态分配**:在流程设计阶段,可以直接通过`assignee`属性指定具体的用户或从环境...
为了确保 jBPM 在不同的数据库环境下都能正常运行,提供了一个专门的数据兼容包,该包包含了一组针对各种主流数据库(如 MySQL、Oracle 等)的配置和优化方案。 **1.9. JBoss jBPM BPEL 扩展** jBPM 还支持 ...
- **身份组创建**:讲解如何创建用于权限管理的身份组。 - **任务表单** - **使用方法**:介绍如何在任务中集成表单。 - **表单格式**:解释表单的格式规范。 - **实例迁移** - **简单迁移**:介绍如何将流程实例...