当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>J2EE

jBPM-4.0中文开发指南-第13章 执行模式

    第 13 章 执行模式

    这里有三种基本的流程执行模式:对象,持久化和嵌入。 对于持久化和嵌入执行模式, 流程执行必须在一个事务中执行。在那种情况, 流程执行必须放在一个环境的内部。 环境将用来绑定流程执行,更新到一个应用事务的事务中。 环境可以被用来绑定,比如一个JDBC连接, JTA,BMT,Spring事务等等。

    13.1. 对象执行模式

    对象执行模式是使用流程虚拟机的最简单形式。 这意味着通过客户端API直接使用流程定义和执行对象。 让我们通过一个例子演示这个。 我们通过创建一个ClientProcessDefinition开始,看起来像这样:

    对象执行模式是使用流程虚拟机的最简单形式。 这意味着通过客户端API直接使用流程定义和执行对象。 让我们通过一个例子演示这个。 我们通过创建一个ClientProcessDefinition开始,看起来像这样:

    贷款流程

    图 13.1. 贷款流程

ClientProcessDefinition processDefinition = ProcessFactory.build("loan")
  .activity("submit loan request").initial().behaviour(AutomaticActivity.class)
    .transition().to("evaluate")
  .activity("evaluate").behaviour(WaitState.class)
    .transition("approve").to("wire money")
    .transition("reject").to("end")
  .activity("wire money").behaviour(AutomaticActivity.class)
    .transition().to("archive")
  .activity("archive").behaviour(WaitState.class)
    .transition().to("end")
  .activity("end").behaviour(WaitState.class)
.done();

    ProcessFactory是一个帮助类, 为构建一个表现为流程定义的对象图提供方便。 AutomaticActivity是一个通过活动, 没有任何操作发生,WaitState会等到外部signal发生。 这两个活动实现都会在后面讨论更深。

    processDefinition对象作为一个工厂,为流程实例对象。 一个流程实例表现为流程定义的一个执行。 更准确的说,流程实例是执行的主路径。

ClientExecution execution = processDefinition.startProcessInstance();

    一个流程实例自己也是一个Execution. 潜在的,一个执行可以拥有子执行 表现执行的同步路径。

    execution可以看做是一个状态机, 在流程定义里像描述一样操作。启动一个流程实例意思是 流程定义的初始节点被执行。 因为这是一个自动活动,执行会执行到evaluate活动。 evaluate活动是一个等待状态。 当执行到达evaluate活动,startProcessInstance方法 会返回并等待一个外部signal使用signal方法提供。 所以在startProcessInstance之后,我们可以证实 如果执行定位在evaluate活动。

assertEquals("evaluate", execution.getActivityName());

    为了让流程执行得更远,我们提供一个外部触发器使用 signal方法。执行的结果会被作为 signalName参数给与,像这样:

execution.signal("approve");

    WaitState活动实现会根据给出的signalName 选择转移。所以执行将首先执行自动活动wire money 然后在进入等待状态archive后 返回。

assertEquals("archive", execution.getActivityName());

    当执行在archive活动等待时,默认的signal会让它 选择第一个未命名的转移。

execution.signal();
assertEquals("end", execution.getActivityName());

    流程执行在客户端的线程中。 startProcessInstance方法只在到达evaluate活动时返回。 换句话说,ClientProcessDefinition.startProcessInstance和 ClientExecution.signal方法会一直堵塞直到 下一个等待状态的到来。

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接