JBPM4.4开发(二)-------------决策节点decision
来源:互联网 发布:好听的淘宝收件人名字 编辑:程序博客网 时间:2024/06/07 03:05
decision
decision活动会运行并判断其中的每一个transition元素里的转移条件。当遇到一个transition的condition为true时,那么流程立即流向这个transition。流程引擎不会等待decision活动,它会马上执行这个decision。
expr属性:用一个三目运算符来判断到底要流向拿个transition。
transition元素的condition子元素:用expr来判断是否流向这个transition。
decision活动的handler子元素:如果以上两种方法还是不能满足我们的要求,就可以通过实现DecisionHandler接口来在Java代码中决定到底要流向哪个transition。
1.条件
决策节点会顺序执行并判断每一个transition里的条件。当遇到一个条件为true或者没有设置判断条件的transition时,这个transition就会被执行。
demo如下:
decision01.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?><process name="decision01" xmlns="http://jbpm.org/4.4/jpdl"> <start g="20,135,48,48" name="start1"> <transition g="-42,-14" name="to exclusive1" to="exclusive1"/> </start> <decision g="130,134,48,48" name="exclusive1"> <transition g="154,83:24,-16" name="to readbook" to="readbook"> <condition expr="#{reason == 'work'}"></condition> </transition> <transition g="-40,-14" name="to watchgames" to="watchgames"> <condition expr="#{reason == 'football'}"></condition> </transition> <transition g="156,246:41,-14" name="to sleep" to="sleep"/> </decision> <state g="282,56,92,52" name="readbook"/> <state g="280,135,92,52" name="watchgames"/> <state g="284,218,92,52" name="sleep"/></process>
测试代码如下:
package com.itstudio.jbpm.decision.demo;import java.util.HashMap;import java.util.Map;import javax.rmi.PortableRemoteObject;import org.jbpm.api.Configuration;import org.jbpm.api.ExecutionService;import org.jbpm.api.HistoryService;import org.jbpm.api.ProcessEngine;import org.jbpm.api.ProcessInstance;import org.jbpm.api.RepositoryService;import org.jbpm.api.TaskService;public class TestDecisionDemo01 {public static final Configuration configuration = new Configuration();public static final ProcessEngine processEngine=configuration.buildProcessEngine();public static final RepositoryService repositoryService= processEngine.getRepositoryService();public static final ExecutionService executionService=processEngine.getExecutionService();/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubTestDecisionDemo01 t = new TestDecisionDemo01();t.deploy();t.test();}public void deploy(){repositoryService.createDeployment().addResourceFromClasspath("com/itstudio/jbpm/decision/demo/decision01.jpdl.xml").deploy();System.out.println("发布成功!");}public void test(){Map<String , Object> map = new HashMap<String , Object>();map.put("reason", "work");ProcessInstance processInstance = executionService.startProcessInstanceByKey("decision01",map);System.out.println("流程实例ID---->"+processInstance.getId());System.out.println("流程定义ID---->"+processInstance.getProcessDefinitionId());ProcessInstance instance = executionService.signalExecutionById(processInstance.getId());System.out.println("是否位于readbook节点----->"+instance.isActive("readbook"));System.out.println("是否位于watchgames节点----->"+instance.isActive("watchgames"));System.out.println("是否位于sleep节点----->"+instance.isActive("sleep"));System.out.println("流程是否结束------>"+instance.isEnded());}}
运行结果:
2.表达式
decision02.jpdl.xml 如下:
<?xml version="1.0" encoding="UTF-8"?><process name="decision02" xmlns="http://jbpm.org/4.4/jpdl"> <start name="start1" g="7,161,48,48"> <transition name="to exclusive1" to="exclusive1" g="-42,-14"/> </start> <decision name="exclusive1" g="134,161,48,48" expr="#{reason}"> <transition name="to readbook" to="readbook" g="158,109:17,-19"/> <transition name="to watchgames" to="watchgames" g="-41,-16"/> <transition name="to sleep" to="sleep" g="158,262:31,-21"/> </decision> <state name="readbook" g="280,81,92,52"/> <state name="watchgames" g="273,161,92,52"/> <state name="sleep" g="279,235,92,52"/></process>
测试类:TestDecisionDemo02
package com.itstudio.jbpm.decision.demo;import java.util.HashMap;import java.util.Map;import org.jbpm.api.Configuration;import org.jbpm.api.ExecutionService;import org.jbpm.api.ProcessEngine;import org.jbpm.api.ProcessInstance;import org.jbpm.api.RepositoryService;public class TestDecisionDemo02 {public static final Configuration configuration = new Configuration();public static final ProcessEngine processEngine=configuration.buildProcessEngine();public static final RepositoryService repositoryService= processEngine.getRepositoryService();public static final ExecutionService executionService=processEngine.getExecutionService();/** * @param args */public void deploy(){repositoryService.createDeployment().addResourceFromClasspath("com/itstudio/jbpm/decision/demo/decision02.jpdl.xml").deploy();System.out.println("发布成功!");}public void test(){Map<String , Object> map = new HashMap<String , Object>();map.put("reason", "to watchgames");ProcessInstance processInstance = executionService.startProcessInstanceByKey("decision02",map);System.out.println("流程实例ID---->"+processInstance.getId());System.out.println("流程定义ID---->"+processInstance.getProcessDefinitionId());ProcessInstance instance = executionService.signalExecutionById(processInstance.getId());System.out.println("是否位于readbook节点----->"+instance.isActive("readbook"));System.out.println("是否位于watchgames节点----->"+instance.isActive("watchgames"));System.out.println("是否位于sleep节点----->"+instance.isActive("sleep"));System.out.println("流程是否结束------>"+instance.isEnded());}public static void main(String[] args) {// TODO Auto-generated method stubTestDecisionDemo02 demo2 = new TestDecisionDemo02();demo2.deploy();demo2.test();}}
运行结果如下图:
3. 决策处理器
decision03.jpdl.xml 如下:
<?xml version="1.0" encoding="UTF-8"?><process name="decision03" xmlns="http://jbpm.org/4.4/jpdl"> <start name="start1" g="45,146,48,48"> <transition name="to exclusive1" to="exclusive1" g="-43,-19"/> </start> <decision name="exclusive1" g="164,144,48,48"> <handler class="com.itstudio.jbpm.decision.demo.Decision03HandlerTest"></handler> <transition name="to readbook" to="readbook" g="187,99:2,-14"/> <transition name="to watchgames" to="watchgames" g="-50,-17"/> <transition name="to sleep" to="sleep" g="189,235:26,-16"/> </decision> <state name="readbook" g="314,75,92,52"/> <state name="watchgames" g="316,140,92,52"/> <state name="sleep" g="314,212,92,52"/></process>
决策处理类Decision03HandlerTes 如下:
package com.itstudio.jbpm.decision.demo;import org.jbpm.api.jpdl.DecisionHandler;import org.jbpm.api.model.OpenExecution;public class Decision03HandlerTest implements DecisionHandler {@Overridepublic String decide(OpenExecution execution) {// TODO Auto-generated method stubString reason = (String) execution.getVariable("reason");if(reason.equals("work")){return "to readbook";}else if(reason.equals("have a game")){return "to watchgames";}else{return "to sleep";}}}
测试类TestDecisionDemo03 如下:
package com.itstudio.jbpm.decision.demo;import java.util.HashMap;import java.util.Map;import org.jbpm.api.Configuration;import org.jbpm.api.ExecutionService;import org.jbpm.api.ProcessEngine;import org.jbpm.api.ProcessInstance;import org.jbpm.api.RepositoryService;public class TestDecisionDemo03 {public static final Configuration configuration = new Configuration();public static final ProcessEngine processEngine=configuration.buildProcessEngine();public static final RepositoryService repositoryService= processEngine.getRepositoryService();public static final ExecutionService executionService=processEngine.getExecutionService();public void deploy(){repositoryService.createDeployment().addResourceFromClasspath("com/itstudio/jbpm/decision/demo/decision03.jpdl.xml").deploy();System.out.println("发布成功!");}/** * @param args */public void test(){Map<String , Object> map = new HashMap<String , Object>();map.put("reason", "have a game");ProcessInstance processInstance = executionService.startProcessInstanceByKey("decision03",map);System.out.println("流程实例ID---->"+processInstance.getId());System.out.println("流程定义ID---->"+processInstance.getProcessDefinitionId());ProcessInstance instance = executionService.signalExecutionById(processInstance.getId());System.out.println("是否位于readbook节点----->"+instance.isActive("readbook"));System.out.println("是否位于watchgames节点----->"+instance.isActive("watchgames"));System.out.println("是否位于sleep节点----->"+instance.isActive("sleep"));System.out.println("流程是否结束------>"+instance.isEnded());}public static void main(String[] args) {// TODO Auto-generated method stubTestDecisionDemo03 demo = new TestDecisionDemo03();demo.deploy();demo.test();}}
运行结果:
By Mr.Z
- JBPM4.4开发(二)-------------决策节点decision
- jBPM4.4开发(五)-----------custom节点
- jBPM4.4开发(六)-----------fork节点
- 增强学习(二)----- 马尔可夫决策过程Markov Decision
- jBPM4.4开发(一)------------start,end,state活动节点
- jBPM4.4开发(三)-----------task任务节点
- jBPM4.4开发(四)-----------sub-process节点
- jBPM4.4开发(九)-----------HQL,SQL节点
- JBPM4之decision节点:1、好学生 | 坏学生
- 增强学习(二)----- 马尔可夫决策过程Markov Decision Process,MDP
- 【基础篇】工作流技术JBPM4.4开发入门(二)
- JBPM4.4节点详解(常用)
- jbpm4.4 java节点
- 【代码篇】JBPM4.4开发流程节点(动态代理实现流程管理业务)
- JBPM4各节点说明之二
- JBPM4.4之JAVA节点
- JBPM4.4(2)-state结点和decision结点
- JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人
- 使用OTP原理构建一个非阻塞的TCP服务器
- NYOJ 479 Coprimes
- 将从1到n*n的n的平方个数,按顺时针方向从小到大排列成阵列
- bitmap size exceeds VM budget 的解决办法分享
- 激活MS Office2010(截图)
- JBPM4.4开发(二)-------------决策节点decision
- JAVA面向对象编程基础复习(一)面向对象基本概念
- 通过Jersey客户端API调用RestFul风格的Web服务
- Basics of Template Monster's Flash Site: data storage & utility function of data accessing
- CGPoint CGSize CGRect UIWindow UIScreen UIView UIColor
- 文件的切割流和合并流
- 第十二周实验报告(二)
- 反射
- 链表-简易学生成绩管理