`

JBPM-Decision的用法

    博客分类:
  • JBPM
阅读更多

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());
    }
}

 

文章出处:DIY部落(http://www.diybl.com/course/3_program/java/javajs/2007927/74805.html)

分享到:
评论
2 楼 nneverwei 2011-08-24  
xl6861989 写道
晕,怎么都是这个例子啊,这个是jbpm几啊?没有那个token的包包啊,我的是jbpm4.3

兄弟,我上面注明了是转载的啦,而且是那么多年前的了。现在的话,上JBPM官网找官方资料看看会更清晰吧。。。
1 楼 xl6861989 2011-08-23  
晕,怎么都是这个例子啊,这个是jbpm几啊?没有那个token的包包啊,我的是jbpm4.3

相关推荐

    jbpm-form-modeler-examples-repo:包含 jbpm-form-modeler-examples-src 上示例的存储库以在您的 Kie-wb 上运行

    用户可以通过导入这些示例到 Kie Workbench 中,查看它们的结构,甚至运行它们来理解 form modeler 的工作原理和使用方法。 Kie Workbench 是 Red Hat 的一款基于浏览器的开发环境,用于创建、测试和部署 jBPM 和 ...

    jBPM-4.3开发手册.pdf

    - **使用方法**:介绍了如何使用表单来收集任务相关信息。 - **表单格式**:规定了表单的设计和布局规范。 - **实例迁移** - **简单迁移**:基本的流程实例迁移操作。 - **结束运行中的实例**:如何终止正在进行...

    jBPM2-流程图与JBPM API.ppt

    - 获取`JbpmContext`对象,可使用`JbpmConfiguration`的`getCurrentJbpmContext()`或`createJbpmContext()`方法。 ### 4. 使用流程图与API 利用jBPM的API,开发者可以: - 创建和启动流程实例:通过`JbpmContext`...

    jbpm3.2开发总结.pdf

    本文主要围绕jbpm3.2在开发过程中的关键概念、组件、API使用以及配置等知识点进行总结。 首先,了解jbpm3.2需要掌握Java语言,J2EE技术栈,特别是Hibernate,因为在jbpm3.2中,流程定义、任务实例等数据的持久化是...

    jbpm安装及使用方法

    很典型的用法是,当进入这个节点时(通过绑定一个action到node-enter event),发送一条消息到外部的系统,然后流程就处于等待状态。外部系统完成一些操作后返回一条消息,这个消息触发一个signal 到token,然后流程...

    斯坦福特jbpm培训ppt

    需要注意的是,jbPM设计器对中文的支持有限,可能会出现乱码问题,解决方法是在MyEclipse启动参数中指定-Dfile.encoding=UTF-8,确保jVM使用UTF-8编码。 开发流程图时,可以利用gpd.xml文件存储节点的位置信息。...

    JBPM流程引擎资料

    它还介绍了jBPM的几个关键服务,包括ProcessEngine流程引擎、TaskService任务服务、HistoryService历史服务和ManagementService管理服务,并且提供了查询API的使用方法。 核心的jPDL(jBPM Process Definition ...

    JBPM4之State、Decision 、Task活动.doc

    最后,我们使用 signalExecutionById 方法来继续执行流程到下一个节点。 五、总结 本文详细介绍了 JBPM4 中的 State、Decision 和 Task 活动的概念、特点和应用。这些活动是构建复杂业务流程的基础,每种活动都有...

    jbpm3.2.2工作流入门例子

    通过深入研究这个jbpm3.2.2入门例子,你不仅可以了解jbpm的基本概念和使用方法,还能掌握如何在实际项目中应用工作流管理,提升你的企业级应用开发能力。这个例子为你提供了一个动手实践的平台,通过运行和修改代码...

    jbpm4.4 简单请假流程

    - **持久化存储(Persistence)**:jbpm4.4使用Hibernate进行数据持久化,保存流程实例、任务、变量等信息。 - **工作流服务(WorkItemHandler)**:处理特定任务,如调用外部服务、发送邮件等。 - **任务服务...

    kie-drools-wb安装所需jar包

    这个工具提供了丰富的图形化界面,用于开发、测试和部署规则流(Rule Flows)、决策表(Decision Tables)、工作流(Workflows)等。在安装kie-drools-wb时,需要一系列的jar包来支持其运行,这些jar包主要包含了...

    jbpm教程(工作流引擎)

    ### jbpm教程(工作流引擎) #### 概述 JBPM是一个开源的工作流引擎,完全由Java语言开发,其持久层使用Hibernate实现,...通过深入了解其架构、特性和使用方法,可以充分利用JBPM的能力,提升业务流程的自动化水平。

    jbpm4.4基本语法

    你可以通过 ProcessEngine 获取 RepositoryService,然后使用其方法进行流程资源的管理,例如部署新的流程定义、查看已部署的流程或者删除不再需要的流程定义。 3. **ExecutionService对象**:ExecutionService ...

    JBPM 开发指南

    ### JBPM 开发指南知识点概览 #### 一、概述 **JBPM** 是一个完全由 Java 语言编写的开源工作流管理...以上内容涵盖了《JBPM 开发指南》的主要知识点,希望能帮助读者更好地理解和掌握 JBPM 的基本概念和使用方法。

    JBPM_6.0.1_API(最新API)

    **JBPM 6.0.1 API:流程自动化与业务规则管理详解** ...综上,JBPM 6.0.1 API是开发人员在构建流程自动化系统时的重要工具,通过深入理解和熟练使用这些API,可以构建出高效、灵活且适应性强的业务流程管理系统。

Global site tag (gtag.js) - Google Analytics