JBPM-Decision的用法

转载 2007年09月26日 10:55:00
Decision决定状态。Decision和Node一样,都是即时状态,而不是等待状态。Decision的多个离开转向transition中可以设置条件。业务程序实例执行到Decision状态时,会依次计算所有的离开转向的条件,遇到条件为真的转向时,就会立即执行这个转向。如果没有为转向设置条件,那么这个转向的条件值就是true。Decision是功能最强大的即时状态。

processdefinition.xml

<?xml version="1.0" encoding="UTF-8"?>

<process-definition
  
xmlns="urn:jbpm.org:jpdl-3.1"  name="example_8">
   
<start-state name="考试">
      
<transition name="" to="评判"/>
   
</start-state>
   
<decision name="评判">
         
<handler class="com.wide.example8.JudgeDecisionHandler"/>
      
<transition name="升学" to="进大学深造"/>
      
<transition name="复习" to="复习备考"/>
      
<transition name="辍学" to="闯荡江湖"/>
   
</decision>
   
<state name="进大学深造">
      
<transition name="" to="End"/>
   
</state>
   
<state name="复习备考">
      
<transition name="" to="End"/>
   
</state>
   
<state name="闯荡江湖">
      
<transition name="" to="End"/>
   
</state>
   
<end-state name="End"></end-state>
</process-definition>
JudgeDecisionHandler.java
package com.wide.example8;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.node.DecisionHandler;

public class JudgeDecisionHandler implements DecisionHandler {

    
public String decide(ExecutionContext executionContext) throws Exception {
        
int score = (Integer)executionContext.getContextInstance().getVariable("score");
        
        
if(score < 30)
            
return "辍学";
        
else if(score < 60)
            
return "复习";
        
else
            
return "升学";
    }


}

测试(JUnit4)

 

package com.sample;

import static org.junit.Assert.assertEquals;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.junit.Before;
import org.junit.Test;

public class Example8 {
    
private ProcessDefinition processDefinition = null;

    @Before
    
public void init() {
        processDefinition 
= ProcessDefinition
                .parseXmlResource(
"example_8/processdefinition.xml");
    }


    @Test
    
public void process1() {
        ProcessInstance processInstance 
= new ProcessInstance(processDefinition);

        Token token 
= processInstance.getRootToken();
        processInstance.getContextInstance().setVariable(
"score"80);
        token.signal();
        assertEquals(
"进大学深造", token.getNode().getName());
        token.signal();
        assertEquals(
"End", token.getNode().getName());
    }


    @Test
    
public void process2() {
        ProcessInstance processInstance 
= new ProcessInstance(processDefinition);

        Token token 
= processInstance.getRootToken();
        processInstance.getContextInstance().setVariable(
"score"50);
        token.signal();
        assertEquals(
"复习备考", token.getNode().getName());
        token.signal();
        assertEquals(
"End", token.getNode().getName());
    }


    @Test
    
public void process3() {
        ProcessInstance processInstance 
= new ProcessInstance(processDefinition);

        Token token 
= processInstance.getRootToken();
        processInstance.getContextInstance().setVariable(
"score"10);
        token.signal();
        assertEquals(
"闯荡江湖", token.getNode().getName());
        token.signal();
        assertEquals(
"End", token.getNode().getName());
    }

}

 

java this 3种常见用法 详解

this 关键字 1.区分成员变量和局部变量 2.代表当前对象 3.构造器之间调用
  • u012176204
  • u012176204
  • 2017年01月17日 09:41
  • 3046

关键字enum的用法

关键字enum的用法小结
  • A09211008
  • A09211008
  • 2014年06月16日 09:15
  • 1224

C/C++中*和&的用法

在C++中*与&的用法的简单总结。
  • caozixuan98724
  • caozixuan98724
  • 2017年06月17日 23:27
  • 4469

session的基本用法--留给自己看

  • vipzjh
  • vipzjh
  • 2016年09月22日 07:20
  • 5913

Calendar的用法

[java] view plain copy package cn.outofmemory.codes.Date;      import java.util.Calendar;   i...
  • qweqwruio
  • qweqwruio
  • 2016年10月08日 18:21
  • 918

cookie和session的基本用法小结

这两天初步看了下cookie和session的用法,就个人理解,总结如下: 总结这些之前,先说下一次会话的概念,一次会话可以简单的认为是一个进程,也就是打开一个浏览器,只要不点那个×,都是一次会话,...
  • u010242979
  • u010242979
  • 2014年05月24日 23:13
  • 862

C/C++——const用法完整总结

C/C++——const用法完整总结
  • Linux_ever
  • Linux_ever
  • 2016年05月08日 10:49
  • 1146

string 的基础用法

string的用法 定义和初始化string 对象 直接初始化和拷贝初始化 直接初始化,利用小括号来完成,推荐使用,可以提高程序的效率拷贝初始化,利用等号的初始化,以后使...
  • fioletfly
  • fioletfly
  • 2016年12月30日 13:47
  • 856

SQL语句基本用法

把SQL的一些常用语句复习了一遍。整理如下:1增1.1【插入单行】 insert [into] (列名) values (列值) 例:insert into Strdents (姓名,性别,出生...
  • Army_Jun
  • Army_Jun
  • 2016年03月11日 10:22
  • 1498

scanf()函数的用法和实践

scanf()函数的用法和实践 daizh 摘要: 本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策。...
  • lh842824672
  • lh842824672
  • 2013年09月24日 13:11
  • 1991
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JBPM-Decision的用法
举报原因:
原因补充:

(最多只允许输入30个字)