一步一步学JBPM(2)——JPDL流程定义语言 .

什么是JPDL
jPDL(JBoss jBPMProcess Definition Language)是构建于jBPM框架上的流程语言之一。在jPDL中提供了任务(tasks)、待处理状态 (waitstates)、计时器(timers)、自动处理(automated actions)…等术语,并通过图型化的流程定义,很直观地描述业务流程。



JPDL其实是一套XML语言,这套语言有特定的节点,每个节点代表不同的流程定义规则。通过XML对流程进行描述,JBPM去解析这套XML语言,然后把得到的信息存储到数据库中。



JPDL常用结点
1. Process-definition(流程定义节点)
   它是所有节点的父节点,是流程定义的根节点,它代表了一个流程定义文件。该节点和许多xml文件一样,可以包 含子节点,可以有自己的属性,其中name属性是必须有的,它标识了流程定义的名称,是流程定义的标志,通过name来操作流程定义。其它节点比如task node event等都可以自由的添加,以让流程定义满足我们的要求。

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

task节点就是任务节点,进入这个节点,业务会继续下去。当task节点下的所有任务执行完成以后,流程才可以走下去。

为什么拿它们两个一起来说呢,因为它们有一定的可比性,state是中断任务,需要有人审批才能通过,task相当于增加一个任务,下面可以有很多的任务,也可以是java代码或者js代码。需要这些执行完成以后才可以继续。这里面的执行完成是一般情况,通过设置task的属性,可以选择任务执行的方式,和继续的条件。

3 .  fork和join节点
一个 fork 把一个执行路线分割成多个执行路线.默认分支的行为是为每个离开分支转换建立一个子令牌,在令牌要到达的分支之间建立一个父母-子女关系。

联合(join)假设所有来自同一个父母的子令牌联合,当在上使用fork(分支)这个

情形就出现了并且所有令牌分支建立,并且到达同一个联合(join)。当全部令牌都进入联合的时候联合就结束了,然后联合将检查父母-子女, 当所有兄弟令牌到达联合(join),父母令牌将传播(唯一的)离开转换,当还有兄弟令牌活动时,联合的行为将作为等待状态。

这两个节点是一对成对的节点,有分支必然有联合。

4. Decision(决策)
个decision 用以决定在多个执行路径中哪个才可以被执行。如果你是一个程序员,把它可以理解成 switch case 结构即可,一个 decision能够具有许多离开的 transition。

decision就像是我们编程语言中的switch case一样,是一个选择路径的过程。根据不同的条件,选择任务的流向。

5. Transition(转换)
转换节点是流程中最多的节点,它在设计器中用一条有向线段表示,表示从一个节点到达另一个节点。它的to属性就是标明它的目的节点的。

    上面介绍的就是jpdl的常用节点,当然还有很多其它节点。帮助我们实现更加复杂的功能。




JPDL事件、动作、脚本
jPDL不光有节点,节点只是标明流程的流向的,那么如何控制流行,就需要jpdl的其它三个节点了。

event(事件)
BPM定义了一系列与工作流节点元素相关联的事件,例如,流程实例运行过程中,可

以触发节点进入(node-enter)、节点离开(node-leave)、流程启动(process-start)、流程结束(process-end)、任务创建(task-create)、任务分派(task-assign)、任务启动(task-start)等事件。 在流程定义时,JBPM 的事件均与 action 绑定。事件的触发将导致相应actions 的执行。

这个事件我个人感觉它就像是我们VB中经常用到的键盘事件,鼠标事件一样,其实都是一个动作触发一段代码。你可以自定义这段代码而已。

action(动作)
一个 action 是一段 java代码。在流程执行期间在一些事件之上定义,这样会在相关事件触发时自动在工作流引擎上执行。

action会继承jbpm自定义的org.jbpm.graph.def.ActionHandler 接口。这样再触发时间的时候,就可以执行这个action动作了。

Script(脚本)
Script里是动作执行的beanshell脚本.

JBPM中使用Script的例子


[html] view plaincopyprint?
01.<event type="node-enter"> 
02.        <script> 
03.            <![CDATA[
04.     System.out.println("Hello " + name);
05.     ]]> 
06.        </script> 
07.    </event> 
   <event type="node-enter">
           <script>
               <![CDATA[
        System.out.println("Hello " + name);
        ]]>
           </script>
       </event>


脚本就相当于在xml中书写java语句。在执行过程中执行java语句。



流程设计器
上面基本上说明了jbpm基本的节点,有了这些节点就可以定义流程执行文件。这些节点都是使用xml定义的。对于开发人员来说,jBoss给我们提供了一个eclipse插件,让我们以图像的方式设计流程定义,在eclipse使用拖拽的方式就可以实现。

下面就是jbpm4.4的流程设计界面:






当然,这个节目只有程序设计人员才能接触到,这样就大大制约了对流程的不断改进,所以现在很多地方已经采取web客户端的方式设计流程,它们提供了良好的设计器,我们这次也要研究这个设计器,准备使用Flex开发设计器界面。期待中。

猜你喜欢

转载自liuruirui1986.iteye.com/blog/1603332