前言
这篇文章不错,可以看看 http://www.iteye.com/topic/349399
最近因为工作需要做一个工作流相关的DEMO,研究了一下JBPM,记录一下个人的心得与体会。
软件环境:
- spring2.0.2
- hibernate3.2.2
- spring modules 0.8 (Jbpm3.1)
- jbpm3.1.4
- struts2.0.6
配置
Spring Module Jbpm模块提供了几个工具类用来整合spring和jbpm,关于具体的配置可以参见spring module下载包中的参考手册,按照上面的指示来就OK了,这里粘贴示例配置。
xml 代码
- <!---->xml version="1.0" encoding="UTF-8"?>
- <!---->>
- <beans default-autowire="byName" default-lazy-init="true">
-
<bean id="approveWorkflow"
-
class="org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBean">
-
<property name="definitionLocation"
-
value="classpath:jbpm/audit/processdefinition.xml" />
-
bean>
-
<bean id="jbpmConfiguration"
-
class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean">
-
<property name="sessionFactory" ref="sessionFactory" />
-
<property name="configuration" value="classpath:jbpm/jbpm.cfg.xml" />
-
<property name="processDefinitions">
-
<list>
-
<ref local="approveWorkflow" />
-
list>
-
property>
-
-
bean>
-
<bean id="jbpmTemplate"
-
class="org.springmodules.workflow.jbpm31.JbpmTemplate">
-
<constructor-arg index="0" ref="jbpmConfiguration" />
-
<constructor-arg index="1" ref="approveWorkflow" />
-
bean>
- beans>
-
比较关键的是为了能够使JBPM实体和业务实体使用同一个会话工厂,这样可以在JBPM流程实例中持久化业务实体对象。必须将业务实体映射和JBPM的实体映射进行整合。我的作法是改写JBPM本身提供的hibernate.cfg.xml文件,将业务实体包括在里面。
xml 代码
- <!---->xml version='1.0' encoding='utf-8'?>
-
- <!---->
-
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
-
- <hibernate-configuration>
-
<session-factory>
-
-
<property name="hibernate.cache.use_second_level_cache">
-
false
-
property>
-
<property name="hibernate.cache.use_query_cache">
-
false
-
property>
-
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialectproperty>
-
<property name="hibernate.show_sql">falseproperty>
-
<property name="hibernate.query.factory_class">
-
org.hibernate.hql.ast.ASTQueryTranslatorFactory
-
property>
-
-
-
-
<mapping resource="com/emap/jbpm/model/Apply.hbm.xml"/>
-
-
-
<mapping resource="org/jbpm/graph/action/Script.hbm.xml"/>
-
-
<mapping resource="org/jbpm/db/hibernate.queries.hbm.xml" />
-
-
-
<mapping resource="org/jbpm/graph/def/ProcessDefinition.hbm.xml"/>
-
<mapping resource="org/jbpm/graph/def/Node.hbm.xml"/>
-
<mapping resource="org/jbpm/graph/def/Transition.hbm.xml"/>
-
<mapping resource="org/jbpm/graph/def/Event.hbm.xml"/>
-
<mapping resource="org/jbpm/graph/def/Action.hbm.xml"/>
-
<mapping resource="org/jbpm/graph/def/SuperState.hbm.xml"/>
-
<mapping resource="org/jbpm/graph/def/ExceptionHandler.hbm.xml"/>
-
<mapping resource="org/jbpm/instantiation/Delegation.hbm.xml"/>
-
-
........
-
-
session-factory>
- hibernate-configuration>
下面我们看看sessionFactory工厂的配置。
xml 代码
- <!---->xml version="1.0" encoding="UTF-8"?>
- <!---->>
- <beans default-autowire="byName" default-lazy-init="true">
-
-
-
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
-
<property name="driverClassName" value="${jdbc.driverClassName}"/>
-
<property name="url" value="${jdbc.url}"/>
-
<property name="username" value="${jdbc.username}"/>
-
<property name="password" value="${jdbc.password}"/>
-
bean>
-
-
-
<bean id="sessionFactory"
-
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
-
<property name="dataSource" ref="dataSource" />
-
<property name="configLocations">
-
<list>
-
<value>classpath:jbpm/hibernate.cfg.xmlvalue>
-
list>
-
property>
-
bean>
-
-
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
-
<property name="sessionFactory" ref="sessionFactory"/>
-
bean>
- beans>
遗留问题
如何使用JBPM Process Designer插件?
一直没找到如何使用JBPM Process Designer插件的使用文档,比如如何配置JBPM安装路径,如何部署。目前唯一用到的功能就是编写流程文件。
如何发布流程文件?
对于如何发布流程文件,我比较同意如下帖子中的观点,编程实现或许是最简洁的方式。
www.pcdog.com/edu/java/2006/11/v171946.html
如何关联业务实体和流程实例?
JBPM主要用来管理业务流程,记录每个流程进入哪个环节,同时还要保存一些状态,这些状态信息可能来自于业务实体。JBPM的实现方式是将这些状态信息序列化到数据库的表列。
假定有一个订单处理的流程,现在要获取某个角色当前的所有任务列表,同时将关联的订单信息展示给用户,我们应该如何处理?目前我想到有以下几种方式:
方式一:在构建任务实例的时候,将业务实体持久化到contextInstance,在获取任务列表时从任务实例中直接解析出业务实体。如果需要保存的业务实体数据量很大,这会给JBPM数据库造成很大的数据冗余。
方式二:在构建任务实例的时候,仅将业务实体的唯一标识符持久到contextInstance,在获取任务列表时从任务实例中解析出任务实体的唯一标识符,然后再根据此标识符查询业务实体数据库。这种情况会造成查询一个包含N个的任务列表时,需要N+1次数据库查询,显然性能是无法满足需求的。
方式三:是否可以在构建业务实体时,和TaskInstance进行关联?这种方式会造成业务实体和JBPM紧耦合,而且必须对JBPM本身有比较深刻的理解。
有什么更好的办法解决这种问题呢?个人以为方式一可能是目前性价比最好的解决方式吧。
一点体会
JBPM看来在国内并没有得到很多的应用,资料都比较稀缺,唯一的参考手册也是非常的浅显和简单。而其源码的注释不是很好,这在国外的开源软件中是很罕见的。
JBPM提供的某些API不是很全,举个例子,假定我要查询某个角色某个时间段的所有任务列表。因为TaskMgmtSession仅提供了findXXXTaskInstances(String actorId)方法,所以我只能先查询出该角色的所有任务列表,采用如下代码:
java 代码
-
TaskMgmtSession taskMgmtSession = context.getTaskMgmtSession();
-
List tasks = taskMgmtSession.findPooledTaskInstances(actorId);
然后再在内存中使用类似如下代码进行过滤。
java 代码
-
if (task.getName().equals(taskName) && !task.hasEnded())
这种方式太笨拙和低效了。
分享到:
相关推荐
jbpm4jbpm5是关于jbpm流程管理框架的专题,涵盖了jbpm4和jbpm5两个主要版本。jbpm是一个开源的工作流管理系统,用于帮助开发者实现业务流程自动化。以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. *...
jbpm jbpm4.3.jar DDDDDDDD
### jBPM简介与关键技术知识点 #### 一、jBPM概述 jBPM是一个开源的、纯Java的、轻量级的商业流程管理(Business Process Management, BPM)工作流引擎。它支持多种可执行流程语言,并且可以在任何JavaEE应用...
**jbPM 3.2 知识点详解** jbPM,全称为Java Business Process Management,是一个开源的工作流管理系统,主要用于企业级应用中的业务流程管理。jbPM 3.2是该系统的一个版本,它提供了丰富的功能,包括流程设计、...
jbpm-3.1.2.zip 文件包含了 jBpm 的一个重要版本——jBpm 3.1.2,这是一个开源的工作流管理系统,专为构建灵活且可扩展的业务流程解决方案而设计。jBpm 提供了一种方式,使得开发者能够用简单而强大的语言来表达业务...
jbpm使用案例,非常不错,大家都来看看吧。
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
### jbpm开发环境搭建知识点详解 #### 一、概述 JBPM(JBoss Business Process Management)是一款开源的工作流管理系统,广泛应用于企业级应用的流程控制与管理。本文将详细介绍基于JBPM 4.4版本在Eclipse开发环境...
jbpm-jpdl-designer-3.0.13 是一个与jbpm相关的软件包,主要功能是提供jbpm流程定义的图形化设计工具。jbpm(Java Business Process Management)是一个开源的工作流管理系统,用于管理和执行业务流程。JPDL(JBoss ...
jbpm是Java Business Process Management(Java业务流程管理)的缩写,它是一个开源的工作流管理系统,主要用于企业级应用中处理业务流程的自动化。jbpm3和jbpm4是该系统的两个重要版本,提供了丰富的功能来支持流程...
《jBPM4.4开发指南》与《jBPM4.4中文用户手册》是深入理解jBPM4.4这一开源工作流管理系统的重要参考资料。jBPM,全称Java Business Process Management,是一个用于执行业务流程的轻量级、灵活的开源框架,它为业务...
JBPM(Java Business Process Management)是一款开源的工作流管理系统,它提供了强大的业务流程建模、执行和监控能力。本文将深入探讨JBPM的工作原理、表结构及其在实际操作中的应用。 1. **JBPM特色** - **灵活...
### Eclipse 安装 JBPM-4.4 详尽指南 #### 一、概述 JBPM(JBoss Business Process Management)是一款开源的工作流引擎,基于Java语言开发,用于执行业务流程。JBPM允许开发者轻松地定义复杂的业务流程,并将这些...
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
【jbpm】是一种开源的工作流管理系统,全称为Java Business Process Management。它主要用于处理业务流程的自动化,通过定义和执行工作流程来协调应用系统中的不同组件。jbpm不仅提供了流程建模、部署、执行的能力,...
jbpm 数据库表介绍 jbpm 是一个基于 Java 的 workflow 引擎,用于管理和执行业务流程。jbpm 需要持久化流程部署、流程实例、任务、用户认证等信息,于是 jbpm 设计了一系列的数据库表来存储这些信息。在 jbpm 4.4 ...
### jBPM 白皮书:介绍 jBPM 入门 #### 一、引言与背景 在当今数字化转型的时代背景下,业务流程管理(Business Process Management,简称 BPM)成为了企业提升效率、优化流程的关键技术之一。BPM 提供了一种程序...
2017年jBPM 正式发布了全新的 7版本。jBPM 是一个完全开源的业务流程管理(BPM)和案例管理解决方案。它支持流程和案例的完整生命周期,从编写工具到执行一直到监控和管理。 在核心引擎之上,提供了许多功能和工具来...
JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS 希望对大家有帮助。
jbpm(Java Business Process Management)是一款开源的工作流管理系统,它为业务流程自动化提供了一套全面的解决方案。jbpm不仅支持工作流的建模、执行,还提供了监控和管理功能,使得开发者可以方便地构建和部署...