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)
分享到:
相关推荐
用户可以通过导入这些示例到 Kie Workbench 中,查看它们的结构,甚至运行它们来理解 form modeler 的工作原理和使用方法。 Kie Workbench 是 Red Hat 的一款基于浏览器的开发环境,用于创建、测试和部署 jBPM 和 ...
- **使用方法**:介绍了如何使用表单来收集任务相关信息。 - **表单格式**:规定了表单的设计和布局规范。 - **实例迁移** - **简单迁移**:基本的流程实例迁移操作。 - **结束运行中的实例**:如何终止正在进行...
- 获取`JbpmContext`对象,可使用`JbpmConfiguration`的`getCurrentJbpmContext()`或`createJbpmContext()`方法。 ### 4. 使用流程图与API 利用jBPM的API,开发者可以: - 创建和启动流程实例:通过`JbpmContext`...
本文主要围绕jbpm3.2在开发过程中的关键概念、组件、API使用以及配置等知识点进行总结。 首先,了解jbpm3.2需要掌握Java语言,J2EE技术栈,特别是Hibernate,因为在jbpm3.2中,流程定义、任务实例等数据的持久化是...
很典型的用法是,当进入这个节点时(通过绑定一个action到node-enter event),发送一条消息到外部的系统,然后流程就处于等待状态。外部系统完成一些操作后返回一条消息,这个消息触发一个signal 到token,然后流程...
需要注意的是,jbPM设计器对中文的支持有限,可能会出现乱码问题,解决方法是在MyEclipse启动参数中指定-Dfile.encoding=UTF-8,确保jVM使用UTF-8编码。 开发流程图时,可以利用gpd.xml文件存储节点的位置信息。...
它还介绍了jBPM的几个关键服务,包括ProcessEngine流程引擎、TaskService任务服务、HistoryService历史服务和ManagementService管理服务,并且提供了查询API的使用方法。 核心的jPDL(jBPM Process Definition ...
最后,我们使用 signalExecutionById 方法来继续执行流程到下一个节点。 五、总结 本文详细介绍了 JBPM4 中的 State、Decision 和 Task 活动的概念、特点和应用。这些活动是构建复杂业务流程的基础,每种活动都有...
通过深入研究这个jbpm3.2.2入门例子,你不仅可以了解jbpm的基本概念和使用方法,还能掌握如何在实际项目中应用工作流管理,提升你的企业级应用开发能力。这个例子为你提供了一个动手实践的平台,通过运行和修改代码...
- **持久化存储(Persistence)**:jbpm4.4使用Hibernate进行数据持久化,保存流程实例、任务、变量等信息。 - **工作流服务(WorkItemHandler)**:处理特定任务,如调用外部服务、发送邮件等。 - **任务服务...
这个工具提供了丰富的图形化界面,用于开发、测试和部署规则流(Rule Flows)、决策表(Decision Tables)、工作流(Workflows)等。在安装kie-drools-wb时,需要一系列的jar包来支持其运行,这些jar包主要包含了...
### jbpm教程(工作流引擎) #### 概述 JBPM是一个开源的工作流引擎,完全由Java语言开发,其持久层使用Hibernate实现,...通过深入了解其架构、特性和使用方法,可以充分利用JBPM的能力,提升业务流程的自动化水平。
你可以通过 ProcessEngine 获取 RepositoryService,然后使用其方法进行流程资源的管理,例如部署新的流程定义、查看已部署的流程或者删除不再需要的流程定义。 3. **ExecutionService对象**:ExecutionService ...
### JBPM 开发指南知识点概览 #### 一、概述 **JBPM** 是一个完全由 Java 语言编写的开源工作流管理...以上内容涵盖了《JBPM 开发指南》的主要知识点,希望能帮助读者更好地理解和掌握 JBPM 的基本概念和使用方法。
**JBPM 6.0.1 API:流程自动化与业务规则管理详解** ...综上,JBPM 6.0.1 API是开发人员在构建流程自动化系统时的重要工具,通过深入理解和熟练使用这些API,可以构建出高效、灵活且适应性强的业务流程管理系统。