`

谈谈JBPM几种节点的不同用法及适合的应用场景

阅读更多

     最近都在学习JBPM的东西,发现用起来还真不是那么的简单。先别说怎么用JBPM来处理流程,单单在建立流程定义的时候就大有学问所在。我们究竟是选择何种节点呢,Node,Task Node,State?

  这就要看你的具体应用而定了,因为每种节点的特点不同。先看看各种节点的说明:

state(状态):
State节点也叫手工节点,进入到这种节点,整个流程的执行就会中断。直到系统外参与者发起继续执行的命令,即调用signal或end方法,业务程序实例的执行才能够继续下去。

node(自动节点):

这种节点和State相反,也称自动节点。当业务程序实例执行到这个节点,不会停止执行。而是会继续往下执行。如果该节点存在多个离开转向。那么,就会执行其中的第一个离开转向,在Node状态中,不需要外部参与者的参与,业务流程的这个部分是自动的、即时完成的。

task-node (任务节点):
其性质和node节点一样,在没有task的时候,也都是自动执行,不等待。task-node被归类为一个等待节点,是指在task-node中的task列表中的task没有全部执行完之前,它会一直等待。Task可以在task-node节点下定义,也可以挂在process-definition节点下。最普遍的方式是在task-node节点下定义一个或多个任务。默认情况下,流程在task-node节点会处于等待状态,直到所有的任务被执行完毕。Task的执行是按顺序执行的,任务都完成后,token仍然不会指向后面的节点;需要自己手动调用processInstance.signal()才会驱动流程到下面的节点

 

   一般在实际应用场景中,通常只有上面三种节点选择上不好确定,通过上面三种节点的特点的认识。应该就大致有了注意了吧。

  比如前几篇博文中介绍的那个文章审批系统,有几个朋友问我为什么用<state>节点而不用node,task node?下面我把图也附上来说明下问题吧:

&lt;state>适合的应用场景

如图的业务,我们来分析下,文章审批,就是文章的层层审批,一审完成到二审,二审完成到三审。。。,每个过程用一个<state>来表示。文章到达一个审批级别时,审批员进行审批,然后调用signal();使流程到达下一个<state>.然后下一个审批也同样处理。假设我们把<state>换成<node>或<task node>(无委派任务的task node),那么,因为他们都是自动节点了,流程一起动就一口气的自动执行到了结束节点,我们怎么来实现层层审批啊?

      正好在网上看到了个请假的审批程序。download下来研究了一下,发现写的的确不错。把JBPM 60%的精髓都用上了,里面用到的是<task node>节点。对于来理解几种节点的用法很有启发。记得好像是在CSDN上下的代码,里面也没有详细的说明,没有jar。我也小小的修改了下,同时写了个演示如何显示流程图的页面(很简单的例子,惭愧)。把项目上传到附件中供下载学习。

   我看过代码后,跟踪了整个流程的执行。正好也应征了<task node>的特点。因为项目里的每个<task node>中都定义了<task>,所以<task node>中的任务执行完成后,就会停止来等待外部的触发使流程继续执行。

   下面是我分析的图:

 红色的横线就是任务执行完停止的地方,然后外部调用相应的触发动作,才继续往下执行的。

    因为本人也刚刚研究JBPM不久,对JBPM也不是很熟悉。以上仅仅为个人的理解,写下博文只是记录下自己的学习感想。

    O(∩_∩)O ~

10
2
分享到:
评论
5 楼 sdm_seven 2013-01-05  
这个没数据库
4 楼 lukun_java 2011-09-21  
运行测试一下看看结果,上面讲的确实通俗易懂
3 楼 zpchen 2009-01-06  
darvsum 写道

zpchen 你好!这段时间一直在研究你的这几篇文章,仍然有些地方不明白,请指导一下.下面是QingJiaWeb项目的工作流定义片段: &lt;decision name="Deci_IsChiefHere"&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;handler class="com.myrequest.decision.IsChiefHereDecisionHandler"/&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;transition name="Tr_Chief" to="TN_ChiefDecide"&gt;&lt;/transition&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;transition name="Tr_Boss" to="TN_BossDecide"&gt;&lt;/transition&gt; &nbsp;&nbsp; &lt;/decision&gt; 这段好明白,在IsChiefHereDecisionHandler中有判断知道应该执行"Tr_Chief",还是执行"Tr_Boss"。但在fork 和 task-node中并没有判断啊,那这么确定流程的转向呢? &lt;fork name="Fork_request"&gt; &nbsp;&nbsp;&nbsp;&nbsp; &lt;transition name="Tr_Cancel"to="TN_RequesterCancel"&gt; &lt;/transition&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;transition name="Tr_Request" to="Deci_IsChiefHere"&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action name="Ac_GetChiefState" class="com.myrequest.action.GetChiefStateActionHandler"&gt;&lt;/action&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/transition&gt; &lt;/fork&gt; 这里怎么判断是执行"Tr_Cancel"还是执行"Tr_Request"呢? &nbsp;&nbsp; &lt;task-node name="TN_ChiefDecide"&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;task name="Task_ChiefDecide"&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;assignment class="com.myrequest.task.ChiefDecideAssignmentHandler"&gt;&lt;/assignment&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/task&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;transition name="Tr_ChiefApprove" to="Deci_NeedBossDecide"&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action name="Ac_ChiefApprove" class="com.myrequest.action.ChiefApproveActionHandler"&gt;&lt;/action&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/transition&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;transition name="Tr_ChiefNotApprove" to="Join_Request"&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action name="Ac_ChiefNotApprove" class="com.myrequest.action.ChiefNotApproveActionHandler"&gt;&lt;/action&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/transition&gt; &nbsp;&nbsp; &lt;/task-node&gt; 这里怎么判断是执行"Tr_ChiefApprove"还是执行"Tr_ChiefNotApprove"呢? 等待解答。谢谢了

  fork就相当于程序的分支,会分开去执行。当两个分支都执行完成后汇集到某以节点。
2 楼 darvsum 2009-01-04  
zpchen 你好!这段时间一直在研究你的这几篇文章,仍然有些地方不明白,请指导一下.下面是QingJiaWeb项目的工作流定义片段:

<decision name="Deci_IsChiefHere">
      <handler class="com.myrequest.decision.IsChiefHereDecisionHandler"/>
      <transition name="Tr_Chief" to="TN_ChiefDecide"></transition>
      <transition name="Tr_Boss" to="TN_BossDecide"></transition>
   </decision>
这段好明白,在IsChiefHereDecisionHandler中有判断知道应该执行"Tr_Chief",还是执行"Tr_Boss"。但在fork 和 task-node中并没有判断啊,那这么确定流程的转向呢?
<fork name="Fork_request">
     <transition name="Tr_Cancel"to="TN_RequesterCancel">
</transition>
      <transition name="Tr_Request" to="Deci_IsChiefHere">
         <action name="Ac_GetChiefState" class="com.myrequest.action.GetChiefStateActionHandler"></action>
      </transition>
</fork>
这里怎么判断是执行"Tr_Cancel"还是执行"Tr_Request"呢?

   <task-node name="TN_ChiefDecide">
      <task name="Task_ChiefDecide">
         <assignment class="com.myrequest.task.ChiefDecideAssignmentHandler"></assignment>
      </task>
      <transition name="Tr_ChiefApprove" to="Deci_NeedBossDecide">
         <action name="Ac_ChiefApprove" class="com.myrequest.action.ChiefApproveActionHandler"></action>
      </transition>
      <transition name="Tr_ChiefNotApprove" to="Join_Request">
         <action name="Ac_ChiefNotApprove" class="com.myrequest.action.ChiefNotApproveActionHandler"></action>
      </transition>
   </task-node>
这里怎么判断是执行"Tr_ChiefApprove"还是执行"Tr_ChiefNotApprove"呢?
等待解答。谢谢了
1 楼 crabboy 2008-11-27  
简单明了,jbpm的好文章啊。期待有更好的jbpm方面的文章啊

相关推荐

    JBPM采购申请系统——08_JBPM流程节点.7z

    JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...

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

    - **案例分析:** 提供一些真实应用场景的案例分析,帮助开发者理解和掌握jBPM4在实践中的应用。 - **调试与优化:** 介绍流程设计的调试技巧,以及性能优化的方法,帮助开发者提高工作效率。 jBPM4工作流应用开发...

    jbpm安装及使用方法

    很典型的用法是,当进入这个节点时(通过绑定一个action到node-enter event),发送一条消息到外部的系统,然后流程就处于等待状态。外部系统完成一些操作后返回一条消息,这个消息触发一个signal 到token,然后流程...

    工作流jbpm应用的实例

    1. **流程设计**:使用jbpm提供的BPMN编辑器(如Eclipse插件或Web表单),绘制业务流程图,定义各个活动、任务和决策节点。 2. **部署流程**:将设计好的流程模型打包成jbpm可识别的格式,然后部署到jbpm服务器上。...

    jbpm4jbpm5

    jbpm4jbpm5是关于jbpm流程管理框架的专题,涵盖了jbpm4和jbpm5两个主要版本。jbpm是一个开源的工作流管理系统,用于帮助开发者实现业务流程自动化。以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. *...

    jbpm简介\jbpm简介

    4. **支持多种流程定义语言**:除了默认支持的jPDL、WS-BPEL和Seam框架的Pageflow外,jBPM还计划支持更多流程定义语言,以适应不同的业务场景需求。 5. **严格的流程版本控制**:jBPM提供了严格的版本控制机制,...

    jboss --JBPM介绍及应用

    ### jBoss --JBPM介绍及应用 #### 一、引言与概述 JBoss jBPM(Job Business Process Management)是JBoss提供的一个强大的工作流引擎,它支持业务流程管理和自动化,尤其适用于Java环境中开发WS(Web Services)...

    不错的JBPM学习资料,从初级到高级

    基于jBPM的应用开发 ——jBPM实 ...各种类型节点的用法及应用场景 JBPM实现原理 系统架构和数据结构 基于JBPM的工作流应用平台开发 工作流应用平台介绍 设计和实现策略 现策略 基于jBPM的应用开发 高级特性

    JBPM4 学习使用总结

    1. **官方文档**:JBPM4的官方文档详尽介绍了其架构、API和使用方法,是学习的重要参考资料。 2. **示例项目**:通过官方提供的示例项目,可以快速理解JBPM4的基本用法。 3. **社区与论坛**:如ITEYE博客中的...

    jbpm学习资料,jbpm教程

    jPDL(jBPM Process Definition Language)是jbpm使用的一种基于XML的语言,用于描述业务流程。它提供了一系列的元素和指令,让开发者能够清晰地定义流程的各个阶段、任务分配、决策逻辑以及流程间的交互。在jBPM-...

    jBPM工作流应用开发指南

    《jBPM工作流应用开发指南》是一本面向初学者的文档,旨在帮助开发者快速掌握jBPM工作流系统的开发技巧。jBMP,全称Java Business Process Management,是开源组织JBoss提供的一款用于业务流程管理(BPM)的框架,它...

    JBPM4.4实现一种无需指定上一节点(previous activity)的流程驳回(回退)

    标题中的“JBPM4.4实现一种无需指定上一节点(previous activity)的流程驳回(回退)”是指在使用JBPM(Java Business Process Management)4.4版本时,设计了一个特殊的流程控制机制,允许用户在执行流程过程中进行回...

    JBPM7基础开发

    "JBPM7基础开发" JBPM7 基础开发是基于流程引擎的开发方式和实现方式的简单说明。流程引擎是一个自动化管理和优化流程的工具,旨在提高不同部门之间业务的整合效率,降低开发和维护成本。 概念1:BPM(业务流程...

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

    本指南将深入探讨jBPM4的特性和使用方法,帮助开发者实现高效的工作流应用开发。 **1. jBPM4概述** jBPM4基于Java平台,遵循JSR-350标准,提供了业务流程建模、执行、监控和管理等功能。它的核心特性包括流程定义、...

    jBPM 4使用手记

    本篇将深入探讨jBPM 4的关键特性和使用方法。 ### 1. jBPM概述 jBPM 4是基于Java的业务流程管理框架,它支持BPMN 2.0标准,使得业务流程的表示更加直观和通用。jBPM 4的核心特性包括流程建模、流程执行、持久化、...

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

    你可以通过阅读这个文档,深入了解jbPM 3.2的使用方法,解决在实际项目中遇到的问题。 总的来说,jbPM 3.2是一个强大的工作流管理系统,通过深入理解和实践,开发者可以构建出高效、灵活的业务流程,提高企业的业务...

    jbpm-2.0-beta1.zip_java 工作流引擎_jbpm_jbpm-demo_工作流_工作流引擎

    "jbpm-demo"是指包含的示例项目,用于演示jbpm的功能和使用方法。"工作流"和"工作流引擎"则明确了jbpm的主要应用场景,即流程管理和自动化。 在jbpm-2.0-beta1的压缩包中,www.pudn.com.txt可能是一个包含下载链接...

Global site tag (gtag.js) - Google Analytics