`
squall140
  • 浏览: 146281 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

JBPM4.4 自定义用户组

    博客分类:
  • JBPM
 
阅读更多

发现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中文用户手册

    **jbpm4.4中文用户手册** jbpm4.4是一款功能强大的业务流程管理(BPM)和工作流系统,适用于构建和管理复杂的业务流程。该中文用户手册是官方提供的翻译版本,对于初学者来说是一份非常有价值的参考资料,旨在帮助...

    jbpm4.4项目

    【jbpm4.4项目】是一个基于JBPM4.4版本的工作流管理系统示例,它为初学者提供了深入了解和实践企业级...同时,jbpm4.4作为开源项目,其社区活跃,有大量的文档和示例可供参考,对于深入学习和自定义扩展非常有帮助。

    JBPM4.4工作流数据表结构的详解

    `JBPM4_PARTICIPATION`表定义了参与者信息,包括不同类型的参与角色如Candidate、Client、Owner等,可以是单个用户或用户组。 `JBPM4_SWIMLANE`表关联了泳道信息,泳道是工作流中的一种分隔机制,使得任务可以按...

    jbpm4.4基本语法

    7. **IdentityService对象**:IdentityService 是身份认证服务,用于处理流程中的用户、用户组和组成员关系。它可以用来管理用户权限和角色分配。 在JBPM4.4中,流程活动主要分为两类:控制活动和自动活动。 - **...

    jBPM4.4 会签(带加签、减签功能)

    参与者可以是用户、用户组或者角色,jbPM会根据这些信息分配任务。 3. **加签功能** 加签是在流程进行中,根据实际情况需要增加额外审批者的功能。在jbPM中实现加签,可以通过动态修改任务参与者的方式来达成。这...

    JBPM4.4SSH案例,有jar包

    【JBPM4.4 SSH案例】是一个基于Java技术栈的业务流程管理(BPM)示例项目,结合了Struts2、Spring和Hibernate这三大流行框架。JBPM4.4是JBoss公司提供的一个开源BPM平台,它允许开发者设计、执行和管理业务流程。在...

    JBPM4.4+ssh2+流程图实例

    JBPM4.4还提供了可视化的流程设计器,用户可以通过拖拽方式构建流程图,大大简化了流程开发过程。 【SSH2】 SSH(Secure Shell)是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他网络服务。SSH2...

    JBPM4.4中文开发指南

    任务可以分配给特定的用户或组,并且有状态管理,如新、进行中、已完成等。任务管理提供了与工作流参与者交互的能力,允许他们接受、拒绝、重新分配或完成任务。 **执行服务** 执行服务负责运行流程实例。当流程...

    jBPM4.4+ssh 整合配置及完整实例

    **jBPM4.4与SSH整合配置及完整实例详解** jBPM(Java Business Process Management)是一款开源的工作流管理系统,主要用于处理业务流程自动化。在本实例中,我们将讨论如何将jBPM 4.4版本与SSH(Spring、Struts、...

    jBPM 4.4开发指南 中文PDF

    - 用户可以通过jBPM的TaskService接口进行任务的创建、查询、领取和完成操作。 - 集成了邮件通知和多种任务分配策略,提高工作效率。 9. **测试和调试** - 提供了测试框架,允许编写单元测试来验证流程行为。 -...

    jbpm 4.4 学习笔记

    - Candidate-groups:指定任务由某个用户组执行。 - Candidate-users:允许多个用户参与任务执行。 4. Swimlane:泳道,用于区分不同角色或部门的任务分配,但文档中提到这部分未深入研究。 5. None:不设置特定...

    JBpm4开发指南

    任务可以指定给用户或组,同时支持任务的查询、过滤和定制化通知。 4. **事件处理**:jbpm4.4支持流程中的事件监听,如信号事件、时间事件等,这些事件可以触发流程的特定行为,如分支、跳转或结束流程。 5. **...

    jBPM4.1中文用户手册.pdf

    - **目标读者**:本书面向具有一定开发经验的技术人员,旨在帮助他们掌握jBPM4.4的相关配置、开发及实施流程。 - **概述**:本书详细介绍了jBPM4.4的核心功能与特性,并提供了丰富的示例来辅助理解。 - **源代码和...

    jbpm关键点资料整理

    任务分配是jBPM流程执行过程中的核心功能,它决定了任务如何被不同角色的用户或用户组接收并处理。任务分配主要有两种方式: 1. **静态分配**:在流程设计阶段,可以直接通过`assignee`属性指定具体的用户或从环境...

    jbpm3.1

    为了确保 jBPM 在不同的数据库环境下都能正常运行,提供了一个专门的数据兼容包,该包包含了一组针对各种主流数据库(如 MySQL、Oracle 等)的配置和优化方案。 **1.9. JBoss jBPM BPEL 扩展** jBPM 还支持 ...

    jBPM Developers Guide.pdf

    - **身份组创建**:讲解如何创建用于权限管理的身份组。 - **任务表单** - **使用方法**:介绍如何在任务中集成表单。 - **表单格式**:解释表单的格式规范。 - **实例迁移** - **简单迁移**:介绍如何将流程实例...

Global site tag (gtag.js) - Google Analytics