`

从JBPM3到JBPM4,兼谈其他

阅读更多

从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在内的,不少开源框架的通病;而像SpringHibernate这样框架能够成为主流,跟丰富的配套文档、教程、以及市售的铺天盖地的书籍是分不开的。虽然JBPM应用广泛,但文档太少、市场上相关书籍缺失,是限制其继续向前发展的一个不小的障碍。在翻译JBPM文档的同时,我也对其源代码进行了分析,其中就发现有一些功能,代码里已经实现,但文档中却并未提及。

 

20097月,JBPM正式发布了的4.0,与3.X相比,整个项目几乎重写:新的流程定义语言、新的引擎实现、新颖的PVM概念、新的配置方式、全新的开发接口、全新的数据库结构。。。。。。放眼看去,几乎JBPM4JBPM3压根就没什么关系。另外,文档方面似乎也终于得到了更大的支持,新的官方文档分成了两部分:userguidedevguide,前者关注如何直接上手、接口使用以及流程开发,后者关注对整个架构的设计、更高级复杂的扩展开发。

 

8月发布的最新4.1版的devguide里,说到了开发JBPM4的两个目标:

1、  改进可支持性:通过持续集成,对所支持的产品环境、配置提供更好、更长期的支持保证。

2、  降低门槛,提升应用率:区分公共基础型应用和高级定制化应用两种应用模式,让前者上手更快,后者也能减少开发难度。

 

其实,如果从这两个目的出发,可以发现,JBPM4的变化的确是遵从了这两点,而且进一步深入的分析可以得出这样的结论:尽管整个项目几乎重写,但JBPM的核心机制没有变,即本质未变。下面是devguide中列出的JBPM3JBPM4的一些变更对照表。

 

通用名称的变化

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发布包的内容,可以发现,从JBPM3JBPM4,真正的变化仅仅是:

1、  流程定义语言的模型没有改变,只是部分元素的命名发生变化

2、  流程执行引擎的算法没有改变,只是对原有引擎进行了优化,去掉了冗余的root tokenJBPM4出来后,包括在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年初,参考JBPM3PetriNet原理,自己实现了一套新的工作流引擎,它就像一个消除了各种冗余、并增加了历史表等功能的JBPM3。在消除冗余后,除掉增加的历史表,数据库结构上比JBPM3的运行表数量减少了一半。在JBPM4发布后,我惊奇的发现,JBPM4的改动方向,跟我的方式非常相似:合并了root token和流程实例、去掉了流程定义相关表、增加了一些历史表等等。除掉历史表和集成的用户表,JBPM4的运行表数量也只有JBPM3的一半左右。可谓之殊途同归,不过虽然设计思路上类似,但实现方式还是有很大不同,因此也不能算是简单的“重复建设”或仅仅是一个“新的轮子”。对于自己实现的这个东西,希望以后进一步成熟后,有机会能够拿出来。

 

虽然JBPM4延续了JBPM3的内在,但是毕竟是一个从新设计并实现的新框架,而且JBPM4中还承载了一个更新的思想:流程虚拟机(PVM)。JBPM4虽然已经发布了两个版本4.04.1,但是个人认为其依然还不太成熟。而目前还存在大量的JBPM3应用,由于JBPM43完全不兼容,因此迁移的成本很高,跟重新开发没什么差别,所以我相信JBPM3的还会有持续使用,所以我想之前翻译的JBPM3文档应该还是有用的,或许现在已经有了一些翻译版本存在,不过没关系,只要是有用的文档,应该越多越好。如果有时间,希望能够继续翻译下JBPM4devguide,更能多写一点实际应用的体会,以及其他任何能够有用的文章(说实在话,翻译水平还是有限,很多时候只能生硬的直译)。

 

时间,永恒之矢。技术的发展,有如奔流不息的江涛。但是总有些藏在背后的本质,引起变化的原因,推动发展的规律等等,那些我们未显见的,但却有意义的东西,是相对恒定的,要我们去把握。我们不能只盲目的求新、求变,而要看到,每一天,在太阳升起的时刻,这个世界,99%跟已经过去的一天相比,是几乎完全一样的。而持续引起和支配世界那1%变化的各种定律,从来就没有改变过。

 

是为记。

 

liuu

2009-10-01

 

1
0
分享到:
评论
3 楼 ixu 2009-10-21  
可以联系我 liuu9(a)163.com
不过可能不能及时回复邮件,见谅
2 楼 xjeren 2009-10-20  
我的邮箱wangliquan@git.com.cn
1 楼 xjeren 2009-10-20  
我们也在用JBPM3,感觉性能不是很理想,
看了JBPM4,可是它是一个重新设计并实现的新框架,对我们需要做的改动太大,还是决定优化JBPM3,希望能得到你的指导。

相关推荐

    jbpm4jbpm5

    开发者可以从中学到如何在实际项目中有效地运用jbpm,以及如何解决开发过程中遇到的问题。 总的来说,这个主题资料包提供了jbpm4和jbpm5的基础知识、实战经验和用户操作指导,对于想要学习或深化jbpm流程管理框架...

    jbpm jbpm3 jbpm4 用户和开发指南+教程+最佳实践全套

    "jBPM4.0.pdf"很可能是jbpm4的官方用户手册,详细阐述了新版本的改进、特性以及如何迁移从旧版本到新版本。这会帮助用户和开发者理解jbpm4的新特性和最佳实践。 "jBPM Developers Guide.txt"和"jBPM User Guide.txt...

    【转载 见附件】纵观jBPM:从jBPM3到jBPM5以及Activiti5

    "【转载 见附件】纵观jBPM:从jBPM3到jBPM5以及Activiti5" 这个标题表明这是一个关于jBPM发展历程的综合分析,涵盖了从jBPM3到jBPM5的变迁,并且提到了Activiti5,这是一款与jBPM相关的流程管理框架。标题暗示了文章...

    JBPM4环境搭建

    2. **下载JBPM4.4**:你可以从JBPM的官方网站或者通过给定的压缩包文件"jbpm-4.4"获取JBPM4.4的源码和相关库。解压后,你会看到包括jbpm-all、jbpm-console、jbpm-gwt-console等目录,这些都是JBPM的不同组件。 3. ...

    jbpm3中文文档.rar

    4. **任务管理**:jbpm3提供了一个任务服务,用于处理任务的创建、分配、完成和撤销。它支持用户界面与任务服务的交互,使得用户可以方便地查看和处理待办事项。 5. **规则集成**:jbpm3能够与规则引擎(如Drools)...

    jBPM3的学习心得

    另外,jBPM3还支持集成其他系统,如数据库、EJB、Web服务等。通过服务任务(Service Task),我们可以将外部服务嵌入到流程中,实现业务逻辑的无缝对接。这使得jBPM3不仅仅是一个流程管理工具,还能作为企业应用集成...

    jbpm4案例源码

    在阅读《jBPM4工作流应用开发指南.pdf》这本书时,你可以学习到如何使用jbpm4的API进行流程设计、部署和执行,以及如何进行流程实例的查询和管理。书中可能还会涉及如何处理异常、分支和合并逻辑,以及如何进行流程...

    jBPM3 2 3数据库表说明 pdf

    本文将详细介绍jBPM3.2.3版本中涉及到的关键数据库表及其字段,帮助读者更好地理解jBPM的工作原理及数据库存储机制。 #### 二、关键数据库表说明 ##### 2.1 JBPM_PROCESSDEFINITION:流程模版表 - **ID_**:流程...

    jBPM3.2.rar_JBPM3.2_jbpm_jbpm 3.2_jbpm3_jbpm3.2教程

    3. **jbPM库**:下载jbPM 3.2的库文件,包括jar包和其他依赖,这些可以通过Maven的pom.xml文件或Ant的build.xml文件来管理。 4. **数据库连接**:jbPM需要一个数据库来存储流程实例、任务等信息,你可以选择MySQL、...

    jbpm4web-JBPM4的一个web版本的Demo

    【jbpm4web - JBPM4的Web版Demo详解】 JBPM4是一个开源的工作流管理系统,它提供了强大的业务流程管理(BPM)功能,包括流程设计、执行、监控和优化。"jbpm4web"是基于JBPM4开发的一个Web版本的示例项目,旨在帮助...

    jbpm中文指南(包括3和4的)

    4. **持久化**:jbpm3支持JPA(Java Persistence API)进行持久化,可以将流程实例和相关数据存储到数据库中,方便后续查询和恢复。 5. **API与服务**:jbpm3提供了丰富的Java API,以及基于HTTP的服务接口,允许...

    jBPM4完整例子

    3. **流程建模**:使用jBPM4的流程建模工具,如eclipse的jbpm plugin,创建请假流程模型,定义各个活动(如申请、审批等)及它们之间的流转规则。 4. **部署流程**:将建好的流程模型部署到jBPM4的工作流引擎中,使...

    jbpm jbpm4.3.jar

    jbpm jbpm4.3.jar DDDDDDDD

    jBPM4工作流应用开发指南.pdf

    - **开发指南:** 该指南是为开发者提供的一份实用手册,涵盖了从安装配置、环境搭建、流程设计、编码实践到调试优化等jBPM4工作流应用开发的各个方面。 ### 描述知识点: - **胡奇:** 虽然对于胡奇的具体身份未...

    JBPM4 表 详细介绍

    ### JBPM4 表结构详解 JBPM (JBoss Business Process Management) 是一款开源的工作流管理系统,被广泛应用于业务流程管理领域。JBPM4作为其一个版本,具有丰富的功能及特性,尤其在流程管理和任务分配方面表现突出...

    jbpm3基本资料和代码总结

    - **部署流程定义**: 首先,你需要将流程定义(JPDL文件)部署到jbpm3的工作流引擎中,以便引擎能够识别并执行。 - **启动流程**: 调用`ProcessEngine`的`startProcessInstanceById`方法,传入流程定义的ID,即可...

    JBPM3学习笔记

    4. **持久化(Persistence)**:JBPM3使用Hibernate进行数据持久化,确保流程实例在服务器重启后可以恢复。 **三、JBPM3的主要功能** 1. **流程建模**:JBPM3提供了一个基于Eclipse的图形化建模工具,用户可以通过...

    JBPM4 java源代码分包详解JBPM4

    在深入研究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 JBPM4 SSH EXTJS JBPM SSH EXTJS 希望对大家有帮助。

Global site tag (gtag.js) - Google Analytics