谈谈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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值