从JBPM3到JBPM4,兼谈其他
——兼作后续相关文章序
liuu
liuu9(a)163.com
JBPM是一个优秀的开源工作流框架,核心引擎算法源自PetriNet理论,并深度了集成了Hibernate作为引擎的持久框架。
2006年底,我开始关注JBPM,并准备作实际应用,但是当时关于JBPM的中文资料比较少,于是打算翻译JBPM官方的user guide,翻译初稿在07年上半年完成,对应的版本是V3.1.2,打算在年底利用假期完善后发出来。不过JBPM后来发布了3.2版,其文档也做了相应更新,增加了一些章节,后来工作较忙,没有继续翻译,于是也就一直没有发布。
后续JBPM又发布了3.3版,不过文档并没有更新,仍然采用3.2.3的版本,虽然小版本变化不大,但是这样的做法还是不值得提倡。可以说,,缺少优秀、全面的文档,一直是包括JBPM在内的,不少开源框架的通病;而像Spring、Hibernate这样框架能够成为主流,跟丰富的配套文档、教程、以及市售的铺天盖地的书籍是分不开的。虽然JBPM应用广泛,但文档太少、市场上相关书籍缺失,是限制其继续向前发展的一个不小的障碍。在翻译JBPM文档的同时,我也对其源代码进行了分析,其中就发现有一些功能,代码里已经实现,但文档中却并未提及。
2009年7月,JBPM正式发布了的4.0,与3.X相比,整个项目几乎重写:新的流程定义语言、新的引擎实现、新颖的PVM概念、新的配置方式、全新的开发接口、全新的数据库结构。。。。。。放眼看去,几乎JBPM4与JBPM3压根就没什么关系。另外,文档方面似乎也终于得到了更大的支持,新的官方文档分成了两部分:userguide和devguide,前者关注如何直接上手、接口使用以及流程开发,后者关注对整个架构的设计、更高级复杂的扩展开发。
在8月发布的最新4.1版的devguide里,说到了开发JBPM4的两个目标:
1、 改进可支持性:通过持续集成,对所支持的产品环境、配置提供更好、更长期的支持保证。
2、 降低门槛,提升应用率:区分公共基础型应用和高级定制化应用两种应用模式,让前者上手更快,后者也能减少开发难度。
其实,如果从这两个目的出发,可以发现,JBPM4的变化的确是遵从了这两点,而且进一步深入的分析可以得出这样的结论:尽管整个项目几乎重写,但JBPM的核心机制没有变,即本质未变。下面是devguide中列出的JBPM3与JBPM4的一些变更对照表。
通用名称的变化
JBPM3
|
JBPM4
|
备注
|
Node(节点)
|
Activity(活动)
|
根执行(root execution)和流程实例(proces instance)已经是同一个对象了;而在JBPM3里,在流程实例里有一个指向根令牌(root token)的指针。而且,跟JBPM3不同的是,即使逻辑上只有一条执行路径,在JBPM4中,该执行也可以创建一个子执行,并把自己停下来,而让子执行继续。
|
Token(令牌)
|
Execution(执行)
|
Action(动作)
|
EventListener(事件监听器)
|
JPDL XML的变化
JBPM3
|
JBPM4
|
process-defintion
|
process
|
event type=”...”
|
on event=”...”
|
action
|
event-listener
|
node
|
custom
|
process-state
|
sub-process
|
super-state
|
group(尚在考虑)
|
(事件机制的)默认变化
JBPM3
|
JBPM4
|
默认情况下,事件传播会触发外部流程元素的动作
|
默认情况下,事件传播只调用在该元素上订阅了的事件监听器,而不会调用外部元素的监听器
|
从这些变更表中,再结合新的JBPM4.1发布包的内容,可以发现,从JBPM3到JBPM4,真正的变化仅仅是:
1、 流程定义语言的模型没有改变,只是部分元素的命名发生变化
2、 流程执行引擎的算法没有改变,只是对原有引擎进行了优化,去掉了冗余的root token。JBPM4出来后,包括在JavaEye里,有不少的文档探讨了JBPM引擎的变化,有的文章分析说其核心引擎的调度机制完全不同了,这是不对的,因为还是Token机制,只是换了个名字(Execution),加上一定的优化(或称简化)。
3、 流程引擎的事件机制没有改变,只是改变了默认的事件触发范围
4、 整个数据库结构完全改变,甚至前缀变成了JBPM4,目的是希望能够跟JBPM3的表不发生冲突,甚至能够两个版本并行运行。其实数据库结构的巨大变化,是第2点变化、以及其他冗余消除的自然结果
5、 接口的变化,文档的调整和重写,只是为了更好的针对公共普通型应用和高级定制型应用,降低二者的开发难度。
这里提到的第2点和第4点,我有深刻的体会,因为在当时应用JBPM3的过程中,在分析JBPM3引擎的时候,也逐渐意识到其引擎存在的几个类似问题:
1、 root token其实是冗余,完全可以合并到流程实例里
2、 module instance 也是冗余的
3、 流程定义相关的表也是冗余的
4、 没有历史表
5、 。。。
于是从08年底到09年初,参考JBPM3和PetriNet原理,自己实现了一套新的工作流引擎,它就像一个消除了各种冗余、并增加了历史表等功能的JBPM3。在消除冗余后,除掉增加的历史表,数据库结构上比JBPM3的运行表数量减少了一半。在JBPM4发布后,我惊奇的发现,JBPM4的改动方向,跟我的方式非常相似:合并了root token和流程实例、去掉了流程定义相关表、增加了一些历史表等等。除掉历史表和集成的用户表,JBPM4的运行表数量也只有JBPM3的一半左右。可谓之殊途同归,不过虽然设计思路上类似,但实现方式还是有很大不同,因此也不能算是简单的“重复建设”或仅仅是一个“新的轮子”。对于自己实现的这个东西,希望以后进一步成熟后,有机会能够拿出来。
虽然JBPM4延续了JBPM3的内在,但是毕竟是一个从新设计并实现的新框架,而且JBPM4中还承载了一个更新的思想:流程虚拟机(PVM)。JBPM4虽然已经发布了两个版本4.0和4.1,但是个人认为其依然还不太成熟。而目前还存在大量的JBPM3应用,由于JBPM4对3完全不兼容,因此迁移的成本很高,跟重新开发没什么差别,所以我相信JBPM3的还会有持续使用,所以我想之前翻译的JBPM3文档应该还是有用的,或许现在已经有了一些翻译版本存在,不过没关系,只要是有用的文档,应该越多越好。如果有时间,希望能够继续翻译下JBPM4的devguide,更能多写一点实际应用的体会,以及其他任何能够有用的文章(说实在话,翻译水平还是有限,很多时候只能生硬的直译)。
时间,永恒之矢。技术的发展,有如奔流不息的江涛。但是总有些藏在背后的本质,引起变化的原因,推动发展的规律等等,那些我们未显见的,但却有意义的东西,是相对恒定的,要我们去把握。我们不能只盲目的求新、求变,而要看到,每一天,在太阳升起的时刻,这个世界,99%跟已经过去的一天相比,是几乎完全一样的。而持续引起和支配世界那1%变化的各种定律,从来就没有改变过。
是为记。
liuu
2009-10-01
分享到:
相关推荐
开发者可以从中学到如何在实际项目中有效地运用jbpm,以及如何解决开发过程中遇到的问题。 总的来说,这个主题资料包提供了jbpm4和jbpm5的基础知识、实战经验和用户操作指导,对于想要学习或深化jbpm流程管理框架...
"jBPM4.0.pdf"很可能是jbpm4的官方用户手册,详细阐述了新版本的改进、特性以及如何迁移从旧版本到新版本。这会帮助用户和开发者理解jbpm4的新特性和最佳实践。 "jBPM Developers Guide.txt"和"jBPM User Guide.txt...
"【转载 见附件】纵观jBPM:从jBPM3到jBPM5以及Activiti5" 这个标题表明这是一个关于jBPM发展历程的综合分析,涵盖了从jBPM3到jBPM5的变迁,并且提到了Activiti5,这是一款与jBPM相关的流程管理框架。标题暗示了文章...
2. **下载JBPM4.4**:你可以从JBPM的官方网站或者通过给定的压缩包文件"jbpm-4.4"获取JBPM4.4的源码和相关库。解压后,你会看到包括jbpm-all、jbpm-console、jbpm-gwt-console等目录,这些都是JBPM的不同组件。 3. ...
4. **任务管理**:jbpm3提供了一个任务服务,用于处理任务的创建、分配、完成和撤销。它支持用户界面与任务服务的交互,使得用户可以方便地查看和处理待办事项。 5. **规则集成**:jbpm3能够与规则引擎(如Drools)...
另外,jBPM3还支持集成其他系统,如数据库、EJB、Web服务等。通过服务任务(Service Task),我们可以将外部服务嵌入到流程中,实现业务逻辑的无缝对接。这使得jBPM3不仅仅是一个流程管理工具,还能作为企业应用集成...
在阅读《jBPM4工作流应用开发指南.pdf》这本书时,你可以学习到如何使用jbpm4的API进行流程设计、部署和执行,以及如何进行流程实例的查询和管理。书中可能还会涉及如何处理异常、分支和合并逻辑,以及如何进行流程...
本文将详细介绍jBPM3.2.3版本中涉及到的关键数据库表及其字段,帮助读者更好地理解jBPM的工作原理及数据库存储机制。 #### 二、关键数据库表说明 ##### 2.1 JBPM_PROCESSDEFINITION:流程模版表 - **ID_**:流程...
3. **jbPM库**:下载jbPM 3.2的库文件,包括jar包和其他依赖,这些可以通过Maven的pom.xml文件或Ant的build.xml文件来管理。 4. **数据库连接**:jbPM需要一个数据库来存储流程实例、任务等信息,你可以选择MySQL、...
【jbpm4web - JBPM4的Web版Demo详解】 JBPM4是一个开源的工作流管理系统,它提供了强大的业务流程管理(BPM)功能,包括流程设计、执行、监控和优化。"jbpm4web"是基于JBPM4开发的一个Web版本的示例项目,旨在帮助...
4. **持久化**:jbpm3支持JPA(Java Persistence API)进行持久化,可以将流程实例和相关数据存储到数据库中,方便后续查询和恢复。 5. **API与服务**:jbpm3提供了丰富的Java API,以及基于HTTP的服务接口,允许...
3. **流程建模**:使用jBPM4的流程建模工具,如eclipse的jbpm plugin,创建请假流程模型,定义各个活动(如申请、审批等)及它们之间的流转规则。 4. **部署流程**:将建好的流程模型部署到jBPM4的工作流引擎中,使...
jbpm jbpm4.3.jar DDDDDDDD
- **开发指南:** 该指南是为开发者提供的一份实用手册,涵盖了从安装配置、环境搭建、流程设计、编码实践到调试优化等jBPM4工作流应用开发的各个方面。 ### 描述知识点: - **胡奇:** 虽然对于胡奇的具体身份未...
### JBPM4 表结构详解 JBPM (JBoss Business Process Management) 是一款开源的工作流管理系统,被广泛应用于业务流程管理领域。JBPM4作为其一个版本,具有丰富的功能及特性,尤其在流程管理和任务分配方面表现突出...
- **部署流程定义**: 首先,你需要将流程定义(JPDL文件)部署到jbpm3的工作流引擎中,以便引擎能够识别并执行。 - **启动流程**: 调用`ProcessEngine`的`startProcessInstanceById`方法,传入流程定义的ID,即可...
4. **持久化(Persistence)**:JBPM3使用Hibernate进行数据持久化,确保流程实例在服务器重启后可以恢复。 **三、JBPM3的主要功能** 1. **流程建模**:JBPM3提供了一个基于Eclipse的图形化建模工具,用户可以通过...
在深入研究JBPM4的源代码时,我们可以从其包结构中了解到框架的核心功能和设计理念。 1. **org.jbpm.pvm.internal.ant**: 此包包含与Ant构建工具集成的相关类,主要用于发布流程和辅助启动JBoss服务器的任务。这...
JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS 希望对大家有帮助。