点击这里给我发消息 点击这里给我发消息

jBPM-4.0中文开发指南-第5章 实现基本活动

添加时间:2013-12-7
    相关阅读: 开发 系统

    第 5 章 实现基本活动

    这一章解释了流程定义的基础,流程虚拟机给予的功能 以及活动实现是如何构建的。 同时,客户端API被用来执行包含了那些活动实现的流程。

    5.1. ActivityBehaviour

    PVM库没有包含完整的流程结构。 作为替代的是,活动的运行时行为被委派给一个ActivityBehaviour. 换句话讲,ActivityBehaviour是一个接口, 它用来在纯java环境实现流程结构的运行时行为。

public interface ActivityBehaviour extends Serializable {

  void execute(ActivityExecution execution) throws Exception;

}

    当一个活动行为被调用时,它就处于执行传播的全部控制中。 换句话说,一个活动行为可以决定下一步应该执行什么执行。 比如,可以使用execution.take(Transition)获得一个转移, 或者使用execution.waitForSignal()进入等待阶段。 万一活动行为没有调用任何上述的执行传播方法, 执行将 按默认方式执行。

    5.2. ActivityBehaviour实例

    我们会启动一个非常原始的hello world例子。 一个Display活动会将一条信息打印到控制台:

public class Display implements ActivityBehaviour {

  String message;

  public Display(String message) {
    this.message = message;
  }

  public void execute(ActivityExecution execution) {
    System.out.println(message);
  }
}

    让我们使用这个活动构建我们第一个流程定义:Display实例流程

   

    图 5.1. Display实例流程

    TODO add ProcessBuilder example code

    现在我们可以像下面这样执行流程:

Execution execution = processDefinition.startExecution();

    startExecution的调用会在控制台打印hello world:

    hello

    world

    一个总是值得提醒的事情是活动可以使用属性进行配置。 在Display例子中,你可以看到message属性在两种使用方法中配置的不同。 通过配置属性,我们可以写出可复用的活动。 它们可以在以后每次使用在流程中都进行不同的配置。 这是一个基本的部分, 将流程语言构建在流程虚拟机之上。

    其他需要解释的部分是 这个活动实现没有包含任何执行传播的功能。 当一个新流程实例启动时, 执行会定位到初始活动,那个活动会被执行。 Display.execute方法用来决定默认的执行传播。 具体的,这意味着活动自己 没有调用任何执行传播的方法。 那种情况下,默认的传播会执行。默认传播会选择第一个转移,如果这个转移存在的话。 如果没有,它会结束这个执行。 这揭示了为什么a活动和b活动都被执行, 而在b活动执行完执行会停止。

    关于默认流程行为的更多细节可以 在第 7.3 节 “默认执行行为”找到。

    5.3. ExternalActivityBehaviour

    外部活动是负责流程执行由外部转移进来的活动, 外部的意思是来自流程系统的外部。 这意味着这个执行流程对于系统来说,这是一个等待状态。 这个执行会一直等待到外部触发器调用。

    为了处理外部触发器,ExternalActivityBehaviour 为ActivityBehaviour添加了一个方法:

public interface ExternalActivity extends Activity {

  void signal(Execution execution,
              String signal,
              Map<String, Object> parameters) throws Exception;

}

    就像普通的活动,当一个执行到达一个活动, 外部活动行为的execute方法会被调用。 在外部活动中,execute方法会传递另一个系统的响应, 然后通过调用execution.waitForSignal() 进入等待状态。 比如在execute方法中,响应可能是由一个人传入, 通过在任务管理系统中创建一个任务入口, 然后等待到这个人完成这个任务。

    一旦活动行为已经处于等待状态, 然后执行会等待到调用signal方法。 执行会委派signal给ExternalActivityBehaviour对象 分配给当前的活动。

    所以活动的signal方法 会在等待期间,在执行获得一个外部触发器的时候调用。 signal方法中,响应会传递给后面的流程执行。 比如,当一个人完成了一个任务,任务管理系统 会在执行中调用signal方法。

    一个signal可选择使用signal名字和一个参数map. 活动行为拦截signal和参数的最常用方式是 signal对应选择的外出转移, 参数作为执行中的变量。但那些只是例子, 它一直等到活动使用singal和它期望的参数。

[1] [2] [3] [4] [5] 下一页

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册