`
luoyu-ds
  • 浏览: 138300 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JBPM4.4学习笔记-3

 
阅读更多

      欢迎转载,转载请注明出处,谢谢

       这一篇博客接着以前的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的用户体系集成自己业务系统的所有过程,,欢迎拍砖!

 

2
2
分享到:
评论
2 楼 luoyu-ds 2013-08-21  
留下的祝福 写道
楼主很自恋哇,又是不好意思又是转载注明的 

骚年,你知道得太多了
1 楼 留下的祝福 2013-08-21  
楼主很自恋哇,又是不好意思又是转载注明的 

相关推荐

    jbpm-4.4\jbpm-4.4\doc\javadocs

    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-API-CHM官方英文版(自己制作整合)

    jBPM4.4.rar_jbpm4.4_jbpm4.4 PDF

    《jBPM4.4开发指南》与《jBPM4.4中文用户手册》是深入理解jBPM...总的来说,jBPM4.4是企业级业务流程自动化的重要工具,通过深入学习这两份资料,开发者和业务人员都能够充分利用其功能,提升流程管理的效率和灵活性。

    jbpm4.4 ibatis-spring 整合

    jbpm4.4 ibatis-spring 整合

    jbpm4.4学习笔记

    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.zip part03】这个压缩文件是关于jbpm 4.4版本的组成部分,jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了业务流程建模、部署、执行和监控的功能。jbpm 4.4是该系统的一...

    jbpm4.4帮助文档API--chm格式

    完美版JBPM4.4帮助文档,开发必备。

    JBPM4.4学习文档.ppt

    JBPM4.4学习文档.ppt

    jbpm4.4下载地址

    jBPM 4.4的下载地址为:http://sourceforge.net/projects/jbpm/files/jBPM%204/jbpm-4.4/。在下载页面上,你可以找到不同的包,包括源代码、二进制文件和文档。选择适合你需求的包进行下载。安装过程通常涉及解压缩...

    jbpm4.4文档+学习资料

    三、jbpm4.4学习路径 1. 基础概念:首先需要了解BPM的基本概念,如流程实例、任务、事件、信号等。 2. 工具使用:学习使用jbpm提供的图形化建模工具,创建和编辑流程模型。 3. API及编程接口:深入理解jbpm的API,如...

    jbpm 4.4 学习笔记

    在本文档中,主要讨论的是jbpm 4.4 版本的学习笔记。作者通过实践学习并整理了关于jbpm的一些关键概念和操作。 首先,流程图是jbpm设计流程的核心,它包含了一系列的流程元素。在提到的订购流程中,主要包括以下...

    jBPM4.4开发指南

    导航至 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进行流程设计、部署和执行的基本操作,并逐步掌握其在实际项目中的应用。在实践中不断探索和深入,才能更好地利用jBPM4.4实现业务流程自动化,提高工作效率。

    jbpm_4.4完整架包

    【jbpm_4.4完整架包】是一个包含jbpm(Java Business Process Management)4.4版本所有必要组件和资源的压缩包。jbpm是一个开源的工作流管理系统,它提供了业务流程建模、部署、执行、监控和管理的能力,主要用于...

    jbpm4.4中文开发指南

    3. **持久化**: jbpm4.4支持JPA(Java Persistence API),允许流程实例和相关数据在数据库中持久化,确保系统在重启后仍能恢复状态。 4. **任务服务**: 提供了任务服务,使得用户可以进行任务的接收、完成、委托和...

    JBPM4.4流程管理Demo(附学习资料)

    - 随附的学习资料可能包括JBPM4.4的官方文档、教程、示例代码解析等,对于初学者来说,这些资源可以帮助理解JBPM的工作原理和使用方法。 7. **项目结构与运行** - JBPM4.4Demo项目可能包含了Maven或Gradle构建...

    jbpm4.4 shh2 项目示例

    jbpm4.4 shh2 项目示例是基于jbpm4.4版本与SSH2(Struts2、Spring和Hibernate)集成的一个实战项目。jbPM(Business Process Management)是一款开源的工作流管理系统,用于实现业务流程自动化。SSH2是Java开发中的...

    jBPM 4.4用户手册 中文PDF

    《jBPM 4.4 用户手册》中文版提供了全面的指南,涵盖了从安装、配置、建模、执行到监控的各个环节,是学习和使用jBPM 4.4的重要参考资料。通过阅读这份手册,开发者和业务分析师可以深入了解jBPM的功能和用法,快速...

    JBPM4.4资料的其他补充

    JBPM4.4是JBPM的其中一个稳定版本,发布于2009年,它提供了强大的工作流服务,包括流程定义、流程实例管理、任务管理和监控等功能。在JBPM4.4版本中,开发者可以利用其提供的API和工具来设计、部署和执行复杂的业务...

Global site tag (gtag.js) - Google Analytics