jBPM学习(五)----面向图的程序设计

来源:互联网 发布:国外网络炒作事件 编辑:程序博客网 时间:2024/06/05 13:27
五、面向图的程序设计
Jbpm的流程设计语言是面向图的,下面介绍一些面向图程序设计的概念。
1.         图的结构
1)        Node和transition
首先,图的结构由node和transition组成。每个transition都是有向的,所以node可以有一个leaving transition或者arriving transition。每个node是可以看成一项任务,每个node都有execute方法。Node的子类必须重载这个方法来为该类型的node实现特定的任务。
2)        Execution
在图结构中定义的execution模型和有限自动机还有uml状态图相似。一个execution(也可称为token,下面我们称其为令牌)具有对当前node的一个引用。
 
Transition通过take方法可以将一个令牌(token)从源node传递到目标node。
 
当一个令牌到达一个node的时候,这个node就被执行(通过execute方法)。Node的execute方法也可以经行繁殖。繁殖在这里的意思是一个node可以将到达的令牌通过该node中的一个transition传向下一个node。
当一个node的execute方法没有传递令牌的时候,它就处于等待(wait)状态。同样的,当一个令牌在开始节点创建的时候,它就处于等待状态,等待一些事件(event)。令牌的一个事件可以触发令牌进行传递。如果事件是指向当前节点的一个leaving transition的话,那么令牌将沿着这个transition传递。令牌将不断的传递,知道遇到下个状态为wait的节点。
3)        流程定义语言
在wait状态下,一个令牌指向图中的一个node。此时,流程图和令牌都可以进行持久话,例如通过hibernate将其存入数据库。流程定义语言就是一个Node-implementation的集合。每个Node-implementation对应一个流程结构。
这里我们给出一个例子,该流程语言由4个process组成:一个start state,一个decision,一个task和一个end state。
我们可以通过上面定义的语言来具体描述一个流程,其中冒号前为该节点的描述,冒号后为该节点的具体类型:
当为该流程创建一个新的实例的时候,我们通过将令牌放入该过程的开始节点(start node)。当令牌没有接收到一个事件的时候,这个令牌将一直留在次节点中。
       现在我们来看看当一个事件发生(事件点燃)时,会出现什么情况。在初始情况下,我们通过调用令牌的event方法来点燃一个默认事件,它和默认transition相对应。Event方法可以找到默认的leaving transition,然后通过调用transition的take方法将令牌沿着该tranistion传递。
       这个transition将令牌传递到decision节点并且调用该节点的execute方法。我们假设decision的execute方法通过计算后向令牌传递了一个yes事件。这将使令牌继续沿着’yes’ transition进行传递,之后令牌将到达doublieCheck节点。
       我们假设doubleCheck任务节点的execute方法向checker的任务列表中添加一个实体,然后等待checher的输入,而并不将令牌继续传递。
       现在令牌将在doubleCheck节点停留。
4)        Action
一个Acition同样也有一个execute方法。Action可以和event相联系。在节点被执行的时候有两个基本的事件被触发:node leave和node enter。
每一个event都可以和一系列action相联系,当事件被触发的时候,这些action也将被执行。