`

JBPM3中文用户手册——第三章:教程(5)

阅读更多

3.5    自定义动作示例

动作(action)是一种机制,它将你自定义的Java代码绑定到jbpm流程中去。动作能够与持有它的节点相关联(如果它们在流程的图形表示中相应地关联),或者也可以被置于事件中,如选择一个迁移、离开或进入一个节点。对于后一种情形,动作不作为图形表示的一部分,但会在流程执行的过程中于事件触发时执行。

 

我们先看一个动作实现:MyActionHandler,它在下面的例子中会用到。这个动作处理器实现的确没有做什么惊天动地的事。。。它只是设置的布尔变量isExecutedtrue。这个变量是静态的,因此即可以在动作处理器内部访问,在可以直接通过动作类访问来验证它的值。

 

更多关于动作的信息,参见10.5 动作

 

// MyActionHandler represents a class that could execute

// some user code during the execution of a jBPM process.

public class MyActionHandler implements ActionHandler {

 

  // Before each test (in the setUp), the isExecuted member

  // will be set to false.

  public static boolean isExecuted = false; 

 

  // The action will set the isExecuted to true so the

  // unit test will be able to show when the action

  // is being executed.

  public void execute(ExecutionContext executionContext) {

    isExecuted = true;

  }

}

 

就像前面提到的,在测试前,我们设置了静态字段MyActionHandler.isExecutedfalse

  // Each test will start with setting the static isExecuted

  // member of MyActionHandler to false.

  public void setUp() {

    MyActionHandler.isExecuted = false;

  }

 

我们将在一个迁移上启动这个动作:

public void testTransitionAction() {

    // The next process is a variant of the hello world process.

    // We have added an action on the transition from state 's'

    // to the end-state.  The purpose of this test is to show

    // how easy it is to integrate java code in a jBPM process.

    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(

      "<process-definition>" +

      "  <start-state>" +

      "    <transition to='s' />" +

      "  </start-state>" +

      "  <state name='s'>" +

      "    <transition to='end'>" +

      "      <action class='org.jbpm.tutorial.action.MyActionHandler' />" +

      "    </transition>" +

      "  </state>" +

      "  <end-state name='end' />" +

      "</process-definition>"

    );

   

    // Let's start a new execution for the process definition.

    ProcessInstance processInstance =

      new ProcessInstance(processDefinition);

   

    // The next signal will cause the execution to leave the start

    // state and enter the state 's'

    processInstance.signal();

 

    // Here we show that MyActionHandler was not yet executed.

    assertFalse(MyActionHandler.isExecuted);

    // ... and that the main path of execution is positioned in

    // the state 's'

    assertSame(processDefinition.getNode("s"),

               processInstance.getRootToken().getNode());

   

    // The next signal will trigger the execution of the root

    // token.  The token will take the transition with the

    // action and the action will be executed during the 

    // call to the signal method.

    processInstance.signal();

   

    // Here we can see that MyActionHandler was executed during

    // the call to the signal method.

    assertTrue(MyActionHandler.isExecuted);

  }

 

 

下面这个例子,使用了相同的动作,但现在是分别放在了“进入节点”和“离开节点”事件上。注意,与只有一种事件类型的迁移相比,节点的事件类型有多种,因此在节点上事件动作,需要放到一个事件元素中去。

ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(

  "<process-definition>" +

  "  <start-state>" +

  "    <transition to='s' />" +

  "  </start-state>" +

  "  <state name='s'>" +

  "    <event type='node-enter'>" +

  "      <action class='org.jbpm.tutorial.action.MyActionHandler' />" +

  "    </event>" +

  "    <event type='node-leave'>" +

  "      <action class='org.jbpm.tutorial.action.MyActionHandler' />" +

  "    </event>" +

  "    <transition to='end'/>" +

  "  </state>" +

  "  <end-state name='end' />" +

  "</process-definition>"

);

 

ProcessInstance processInstance =

  new ProcessInstance(processDefinition);

 

assertFalse(MyActionHandler.isExecuted);

// The next signal will cause the execution to leave the start

// state and enter the state 's'.  So the state 's' is entered

// and hence the action is executed.

processInstance.signal();

assertTrue(MyActionHandler.isExecuted);

 

// Let's reset the MyActionHandler.isExecuted 

MyActionHandler.isExecuted = false;

 

// The next signal will trigger execution to leave the 

// state 's'.  So the action will be executed again.

processInstance.signal();

// Voila. 

assertTrue(MyActionHandler.isExecuted);

 

 

分享到:
评论

相关推荐

    JBPM采购申请系统——08_JBPM流程节点.7z

    JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...

    jBPM4.1中文用户手册.pdf

    jBPM4.1中文用户手册.pdf

    JBPM采购申请系统——05_构建JBPM数据库.7z

    JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM数据库.7z JBPM采购申请系统——05_构建JBPM...

    JBPM采购申请系统——02_Eclipse与JBPM.7z

    JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z JBPM采购申请系统——02_Eclipse与JBPM.7z ...

    JBPM采购申请系统——06_JBPM版本控制及Token对象.7z

    JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z ...

    jBPM5_用户手册-中文版

    jBPM5_用户手册-中文版

    jBPM 4.4中文用户手册

    jBPM 4.4用户手册 翻译官方文档 JBoss jBPM Teams 4.4 译者: Lingo 首页: http://www.family168.com/ 论坛: http://old.family168.com/bbs EMAIL: lingosurf168@gmail.com 2009年11月1日 1. 导言 1.1. 许可...

    JBPM采购申请系统——12_JBPM异步(一).7z

    JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM采购申请系统——12_JBPM异步(一).7z JBPM...

    JBPM采购申请系统——13_JBPM异步(二).7z

    JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM采购申请系统——13_JBPM异步(二).7z JBPM...

    JBPM采购申请系统——07_JBPM中的脚本语言.7z

    JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM...

    JBPM采购申请系统——20_JBPM4.0使用及特性.7z

    JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_JBPM4.0使用及特性.7z JBPM采购申请系统——20_...

    JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二).7z

    JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二).7z JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二).7z JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二).7z JBPM采购申请系统——22_JBPM4.0与JBPM3.0差异(二)...

    JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一).7z

    JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一).7z JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一).7z JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一).7z JBPM采购申请系统——21_JBPM4.0与JBPM3.0差异(一)...

    JBPM采购申请系统——11_讲任务调度.7z

    JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请...

    JBPM采购申请系统——19_JBPM采购申请系统(三).7z

    JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请系统——19_JBPM采购申请系统(三).7z JBPM采购申请...

    JBPM采购申请系统——15_JBPM开发报销系统(二).7z

    JBPM采购申请系统——15_JBPM开发报销系统(二).7z JBPM采购申请系统——15_JBPM开发报销系统(二).7z JBPM采购申请系统——15_JBPM开发报销系统(二).7z JBPM采购申请系统——15_JBPM开发报销系统(二).7z JBPM采购申请...

    JBPM采购申请系统——16_JBPM开发报销系统(三).7z

    JBPM采购申请系统——16_JBPM开发报销系统(三).7z JBPM采购申请系统——16_JBPM开发报销系统(三).7z JBPM采购申请系统——16_JBPM开发报销系统(三).7z JBPM采购申请系统——16_JBPM开发报销系统(三).7z JBPM采购申请...

    JBPM采购申请系统——17_JBPM采购申请系统(一).7z

    JBPM采购申请系统——17_JBPM采购申请系统(一).7z JBPM采购申请系统——17_JBPM采购申请系统(一).7z JBPM采购申请系统——17_JBPM采购申请系统(一).7z JBPM采购申请系统——17_JBPM采购申请系统(一).7z JBPM采购申请...

    JBPM采购申请系统——18_JBPM采购申请系统(二).7z

    JBPM采购申请系统——18_JBPM采购申请系统(二).7z JBPM采购申请系统——18_JBPM采购申请系统(二).7z JBPM采购申请系统——18_JBPM采购申请系统(二).7z JBPM采购申请系统——18_JBPM采购申请系统(二).7z JBPM采购申请...

    JBPM采购申请系统——14_JBPM开发报销系统(一).7z

    JBPM采购申请系统——14_JBPM开发报销系统(一).7z JBPM采购申请系统——14_JBPM开发报销系统(一).7z JBPM采购申请系统——14_JBPM开发报销系统(一).7z JBPM采购申请系统——14_JBPM开发报销系统(一).7z JBPM采购申请...

Global site tag (gtag.js) - Google Analytics