JBPM 工作流引擎 JBPM指南 例子:客户动作(action)例子(3.5)

7 篇文章 0 订阅
5 篇文章 0 订阅

3.5. 客户动作(action)例子

声明:

本人EVeryVeryPoor,又是刚刚开始学习JBPM工作流引擎,对原文及概念等理解不当的地方,请网友不吝赐教,吾将及时修改和更正。

本文仅是本人自己学习JBPM,对JBPM指南的学习理解过程。

还望可以对入门者有所帮助。共享之。

需要中英文对照Word文档者请联系:gutengcom@hotmail.com或留下邮件地址。

 

  动作是绑定客户代码到jBPM业务中的一种机制。动作能和它自己的节点联合起

来(如果在业务的图形表示中他们是相关的)或动作能被编入到例子的事件中。

取得一个转换(transition),离开一个节点或进入一个节点。如果是那样的话,

动作不但是图形表示中的一部分,而且他们在执行触发了运行业务执行时的事件

时被执行。

 

我们以着眼于动作的实现开始,我们正在使用的例子:MyActionHandler.这个动

作处理执行不能做到真正的引人入胜的东西它只是设置boolean变量

isExecuted true.这个变量isExecutedstatic类型因此它可以被来自内部动作的处理访问也是动作验证它的值。

关于动作的更多信息可以在Section 7.4, “Actions”查找。

/*
       
       
MyActionHandler 代表了一个类,一个在jBPM业务执行期间能够执行一些用户 
        
代码的类。 
        
*/
     
     
public class MyActionHandler implements ActionHandler {
     
     

   
   
    
     
   
   
/*
       
       
在每个测试前(在设置里),isExecuted的成员将被设置为false. 
        
*/
     
     
  public static boolean isExecuted = false;  
     
     

   
   
    
     
   
   /*
       
       
这个动作将设置isExecutedtrue,因此当动作被执行时,这单元测试将能够 
        
被展示。 
        
*/
     
     
  public void execute(ExecutionContext executionContext) {
     
     
    isExecuted = true;
     
     
  }
     
     
}
     
     

As mentioned before, before each test, we'll set the static field MyActionHandler.isExecuted to false;

  
       
       
/*
       
       
每个测试都是由设置MyActionHandler的静态成员变量isExecutedfalse 
        
开始。 
        
*/
     
     
  public void setUp() {
     
     
    MyActionHandler.isExecuted = false;
     
     
  }
     
     

We'll start with an action on a transition.

public void testTransitionAction() {
     
     
    
       
       
/*
       
       
下面的过程是hello world业务的一个变量。我们从状态’s’end-state 
        
转换添加个动作。这个测试的目的是展示了整合java代码到jBPM业务中是如何容易。 
        
*/
     
     
    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>"
     
     
    );
     
     
    
     
     
//让我们为过程定义启动一个新的执行。
     
     
    ProcessInstance processInstance = 
     
     
      new ProcessInstance(processDefinition);
     
     
    
     
     
    
       
       
/*
       
       
下面的signal将引起离开启动状态到进入状态‘s’的执行. 
        
*/
     
     
    processInstance.signal();
     
     

   
   
    
     
   
   
//这展现了MyActionHandler仍没被执行。
     
     
    assertFalse(MyActionHandler.isExecuted);
     
     
   
       
       
/*
       
       
这个主要的执行路径被定位到状态’s’ 
        
*/
     
     
    assertSame(processDefinition.getNode("s"), 
     
     
               processInstance.getRootToken().getNode());
     
     
    
     
     
    
       
       
/*
       
       
下面的signal将触发root token的执行。Token将取得动作的转换,在 
        
调用signal的方法期间,动作将被执行。 
        
*/
     
     
    processInstance.signal();
     
     
    
     
     
   
       
       
/*
       
       
这里我们能看到在调用 signal方法期间MyActionHandler被执行。 
        
*/
     
     
    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);
     
     
 
       
       
/*
       
       
下面的signal将引起离开启动状态到进入状态‘s’的执行.因此状态’s’ 
        
被输入,因此这个动作被执行。 
        
*/
     
     
processInstance.signal();
     
     
assertTrue(MyActionHandler.isExecuted);
     
     

   
   
    
     
   
   

     
     
      
       
     
     
//我们重新设置MyActionHandler.isExecuted false
     
     
MyActionHandler.isExecuted = false;
     
     

   
   
    
     
   
   
/*
       
       
下面的signal将触发离开状态’s’的执行。因此动作将再次被执行。 
        
*/
     
     
processInstance.signal();
     
     
// Voila.  
     
     
assertTrue(MyActionHandler.isExecuted);
     
     

待续……

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值