信息化 频道

jBPM4的高级图形执行 流程构建

  【IT168 信息化】

  活动可以实现循环,基于转移或活动组合。 循环可以包含等待状态。

  为了支持多次自动循环执行,流程虚拟机 把执行的传播从尾部递归转换成while循环。

  子流程

  TODO: 子流程

  默认执行行为

  当一个Activity被用作活动行为, 它可以使用下面的方法从外部控制流程:

  ◆waitForSignal()

  ◆take(Transition)

  ◆end(*)

  ◆execute(Activity)

  ◆createExecution(*)

  当Activity实现用做活动行为, 没有调用任何下面的流程传播方法,然后在活动执行时,执行会使用默认执行行为。

  默认执行行为定义在下面:

  ◆如果当前活动有一个默认向外转移,选择它。

  ◆如果当前活动有一个父活动,回退到父活动。

  ◆否则,结束这个执行。

  流程语言可以重写默认执行行为, 通过重写ExecutionImpl中的 proceed方法。

  功能活动

  活动也可以用作事件监听器,被称作功能活动。 自动活动的例子是发送邮件,执行数据库更新, 生成pdf,计算平均数,等等。 所有这些都是自动活动,没有改变执行流向。 这里是这些活动如何实现:

  以下是引用片段:
  public class FunctionalActivity implements Activity, EventListener {
  public void execute(ActivityExecution execution) {
  perform(execution);
  }       
  public void notify(EventListenerExecution execution) {
  perform(execution);
  }       
  void perform(OpenExecution execution) { 
  ...do functional work...       }
  }  


  perform方法获得一个OpenExecution, 这是ActivityExecution和 EventListenerExecution的超类。 OpenExecution没有提供任何特定目的的方法, 但是依旧是当前状态,流程定义可以通过变量检验, 这包含了环境信息 对应流程执行。

  这些方法其实都不能调用执行传播方法。 所以在perform方法完成后,执行会 执行默认的方式。

  执行和线程

  这一章解释流程虚拟机如何通过客户端的线程, 把一个执行从一个等待状态带到另一个。

  当一个客户调用一个执行的一个方法(比如signal方法)。 默认,流程虚拟机会使用线程执行流程 直到它到达一个等待状态。一旦下一个等待状态到达, 这个方法会返回,客户端的线程就会返回。 这是流程虚拟机操作的默认方式。 两个更多的异步执行可以补充默认行为: 异步继续 和异步命令服务。

  下一个流程会展示基本理论。 它有三个等待状态和四个自动活动。

 

  图 1. 有很多顺序自动活动的流程。

  这里是如何构建流程:

  以下是引用片段:
  ClientProcessDefinition processDefinition = ProcessFactory.build("automatic")
  .activity("wait 1").initial().behaviour(new WaitState())
  .transition().to("automatic 1")
  .activity("automatic 1").behaviour(new Display("one"))
  .transition().to("wait 2")
  .activity("wait 2").behaviour(new WaitState())
  .transition().to("automatic 2")
  .activity("automatic 2").behaviour(new Display("two"))
  .transition().to("automatic 3")
  .activity("automatic 3").behaviour(new Display("three"))
  .transition().to("automatic 4")
  .activity("automatic 4").behaviour(new Display("four"))
  .transition().to("wait 3")
  .activity("wait 3").behaviour(new WaitState())
  .done(); 

0
相关文章