jBPM建模语言jpdl分析

文章来源:matinnn的博客http://blog.csdn.net/matinnn

1             swimlane

具有流程角色的意思。一种多个任务由同一个actor执行的机制。swimlane中的第一个任务实例创建后分派时,会为该swimlane记住actor,后续的任务分派时将使用该actorswimlane中的任务不能指定assignmentswimlane中的任务实例分派时,将由swimlane指定的assignment进行分派。swimlane中的第一个任务实例创建时,调用AssignmentHandler,此时传给AssignmentHandlerAssignable是一个SwimlaneInstance

public interface AssignmentHandler extends Serializable {

  void assign( Assignable assignable, ExecutionContext executionContext );

}

public interface Assignable {

  public void setActorId(String actorId);

  public void setPooledActors(String[] pooledActors);

}

TaskInstanceSwimlaneInstance都实现了Assignable

 

 

2             assignment

用于任务分派的元素。

actor-id:执行该任务的actor

pooled-actors:可以执行该任务的actors

两种分派模型:pushpull

push:流程执行分派,调用Assignable.setActorId决定将该任务push到哪个user的任务列表。任务列表的获取:TaskMgmtSession.findTaskInstances(String actorId).

pull:该任务具有多个候选actor。由pool中的actor将任务pull进自己的任务列表。在pull之前任务对pool中的所有actor可见,pull后,actor-id变为pullactor,并在pool中不可见。将actor-id置为null可以将该任务实例重新放回poll。调用Assignable.setPooledActors分派给pooledActors

 

 

3             expression

分派表达式。

identity comoponent:用户、组和许可权的管理,包括组织模型信息。

 

分派表达式示例:

<process-definition>

  ...

  <task-node name='a'>

    <task name='laundry'>

      <assignment expression='previous --> group(hierarchy) --> member(boss)' />

    </task>

    <transition to='b' />

  </task-node>

  ...

 

分派表达式语法:

first-term --> next-term --> next-term --> ... --> next-term

 

其中:

 

first-term ::= previous |

               swimlane(swimlane-name) |

               variable(variable-name) |

               user(user-name) |

               group(group-name)

 

next-term ::= group(group-type) |

              member(role-name)

 

还可在actiondelegationdecision condition中使用类似于JSP/JSF EL的表达式语言,如expression="#{myVar.handler[assignments].assign}"

 

 

4             delegation

用来在流程执行过程中运行用户自定义代码的机制。可用于任务代理。

class(必需):完整类名。

config-type(可选):指定如何实例化和配置delegation对象。若没有则用默认constructor,并忽略配置信息。

fieldconfiguration中的elementnames对应delegation中的域名;

示例:

public class MyAction implements ActionHandler {

  // access specifiers can be private, default, protected or public

  private String city;

  Integer rounds;

  ...

}

对应的配置文件:

...

<action class="org.test.MyAction">

  <city>Atlanta</city>

  <rounds>5</rounds>

</action>

...

 

beanconstructorconfiguration-property

configuration(可选):xml文件,delegation配置信息。

 

 

5             start-state

特殊node:启动节点。可以包含tasktransitioneventexception-handler

 

 

6             transition

源节点是包含该transition的节点,目标节点由to指出。transition的名字是可选的。jBPM的路由功能依赖于transition名字的唯一性。但如果多个transition有相同的名字,将选择第一个。节点transition list中的第一个是其default transition

 

 

7             task

任务定义,指出如何创建和分派任务实例。可以在task-node,也可以在process-definition中定义。process-definition范围内task name必须唯一。

任务可以指定优先级。任务实例可以修改此优先级。

该任务可以属于一个swimlane,此时它的分派由对应的swimlane执行。

duedate指出任务的超时日期。

tasksignalling属性指出当该任务实例完成时,可以发送一个signal给其token来继续流程的执行。taskblocking属性指出当该任务实例没完成之前,与之相关的token不能离开该task-node。默认设置是signallingnon-blocking

 

 

8             task-controller

可选。

任务创建时,可以用controller来移植任务实例变量;任务实例完成时,可以通过controller来向流程实例变量提交任务实例变量。

并不强迫一定要使用controller,仅当有下列需求时使用controller

1)              创建流程实例变量在任务实例中的副本,使得对任务实例变量的改变不会影响流程实例变量。直到流程完成再将任务实例变量提交。

2)              流程实例变量与任务实例变量不是一一对应关系。例如三个流程变量“sales in january”、“sales in februry”和“sales in march”,在任务中可能需要用到的是这三个变量的平均值。

controller在流程变量(process context)和用户接口应用程序之间起一个桥的作用(如下图所示)。当创建任务实例时,controller负责从流程变量中摘录信息来创建任务变量。这些变量作为用户输入提供给用户接口应用。外部输入也存储在任务变量中。当任务结束时,controller负责用任务实例数据更新流程变量。

 

简单的一对一映射的例子如下:

<task name="clean ceiling">

  <controller>

    <variable name="a" access="read" mapped-name="x" />

    <variable name="b" access="read,write,required" mapped-name="y" />

    <variable name="c" access="read,write" />

  </controller>

</task>

name属性指流程变量名,mapped-name指任务中的变量名。access属性指出是否在任务创建时复制变量,或是否在任务结束后写回流程,或是否是必须的。access是可选的,默认值是"read,write"

如果简单的一一映射不能满足需要,可以自定义TaskControllerHandler接口的实现:

public interface TaskControllerHandler extends Serializable {

void initializeTaskVariables(TaskInstance taskInstance, ContextInstance contextInstance, Token token);

void submi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值