jbpm5.1介绍(10)
Junit测试异常事件触发
下面的示例中测试在程序中触发异常事件的流程,流程如下
测试程序
public void testTimerBoundaryEventInterrupting() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEventInterrupting.bpmn2");
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
ksession.getWorkItemManager().registerWorkItemHandler("MyTask",
new DoNothingWorkItemHandler());
ProcessInstance processInstance = ksession
.startProcess("TimerBoundaryEvent");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
Thread.sleep(1000);
ksession = restoreSession(ksession, true);
System.out.println("Firing timer");
ksession.fireAllRules();
assertProcessInstanceCompleted(processInstance.getId(), ksession);
}
结果如下
Loading process BPMN2-TimerBoundaryEventInterrupting.bpmn2 Timer handled Firing timer
Junit测试根据规则执行子流程
下面的示例中测试在程序中加入固定规则,然后如果发现符合规则那么向下执行子流程
流程界面如下
规则文件如下
package org.drools.bpmn2
import org.drools.runtime.process.ProcessContext
rule "Auto-activate Hello1" ruleflow-group "Hello"
when
then
System.out.println(drools);
System.out.println(drools.getContext(ProcessContext.class));
System.out.println(drools.getContext(ProcessContext.class).getProcessInstance());
drools.getContext(ProcessContext.class).getProcessInstance().signalEvent("Hello1", null);
end
测试程序
public void testAdHocSubProcess() throws Exception {
System.out.println("Loading process BPMN2-AdHocSubProcess.bpmn2");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
kbuilder.add(ResourceFactory
.newClassPathResource("junit/BPMN2-AdHocSubProcess.bpmn2"),
ResourceType.BPMN2);
kbuilder.add(ResourceFactory
.newClassPathResource("junit/BPMN2-AdHocSubProcess.drl"),
ResourceType.DRL);
KnowledgeBase kbase = kbuilder.newKnowledgeBase();
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
workItemHandler);
ProcessInstance processInstance = ksession
.startProcess("AdHocSubProcess");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
WorkItem workItem = workItemHandler.getWorkItem();
assertNull(workItem);
ksession = restoreSession(ksession, true);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
workItemHandler);
ksession.fireAllRules();
System.out.println("Signaling Hello2");
ksession.signalEvent("Hello2", null, processInstance.getId());
workItem = workItemHandler.getWorkItem();
assertNotNull(workItem);
ksession = restoreSession(ksession, true);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
workItemHandler);
ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
}
执行结果如下
Loading process BPMN2-AdHocSubProcess.bpmn2 org.drools.base.DefaultKnowledgeHelper@1bdb58 org.drools.spi.ProcessContext@1568654 WorkflowProcessInstance1 [processId=AdHocSubProcess,state=1] Hello World 1 Signaling Hello2 Hello World 2 执行test workitemWorkItem 1 [name=Human Task, state=0, processInstanceId=1, parameters{}]
Junit测试根据规则执行子流程并自动完成
下面的示例中测试在程序中如下图
执行流程如下,执行完成之后自动完成并且向下走
测试程序
public void testAdHocSubProcessAutoComplete() throws Exception {
System.out
.println("Loading process BPMN2-AdHocSubProcessAutoComplete.bpmn2");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
kbuilder.add(
ResourceFactory
.newClassPathResource("junit/BPMN2-AdHocSubProcessAutoComplete.bpmn2"),
ResourceType.BPMN2);
kbuilder.add(ResourceFactory
.newClassPathResource("junit/BPMN2-AdHocSubProcess.drl"),
ResourceType.DRL);
KnowledgeBase kbase = kbuilder.newKnowledgeBase();
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
workItemHandler);
ProcessInstance processInstance = ksession
.startProcess("AdHocSubProcess");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
WorkItem workItem = workItemHandler.getWorkItem();
assertNull(workItem);
ksession = restoreSession(ksession, true);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
workItemHandler);
ksession.fireAllRules();
workItem = workItemHandler.getWorkItem();
assertNotNull(workItem);
ksession = restoreSession(ksession, true);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
workItemHandler);
ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
assertProcessInstanceCompleted(processInstance.getId(), ksession);
}
执行结果
Loading process BPMN2-AdHocSubProcessAutoComplete.bpmn2 org.drools.base.DefaultKnowledgeHelper@6833f2 org.drools.spi.ProcessContext@1bdb58 WorkflowProcessInstance1 [processId=AdHocSubProcess,state=1] 执行test workitemWorkItem 1 [name=Human Task, state=0, processInstanceId=1, parameters{}] Goodbye World
Junit测试触发任务
下面的示例中测试在程序中执行并且触发任务
流程如下
测试程序
public void testAdHocProcess() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-AdHocProcess.bpmn2");
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
ProcessInstance processInstance = ksession.startProcess("AdHocProcess");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
ksession = restoreSession(ksession, true);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
new DoNothingWorkItemHandler());
System.out.println("Triggering node");
ksession.signalEvent("Task1", null, processInstance.getId());
assertProcessInstanceActive(processInstance.getId(), ksession);
ksession.signalEvent("User1", null, processInstance.getId());
assertProcessInstanceActive(processInstance.getId(), ksession);
ksession.insert(new Person());
ksession.signalEvent("Task3", null, processInstance.getId());
assertProcessInstanceCompleted(processInstance.getId(), ksession);
}
测试结果
Loading process BPMN2-AdHocProcess.bpmn2 Triggering node Task1 Task3
Junit测试获取异常事件
下面的示例中测试在程序中得到异常事件
流程如图
程序中触发事件
public void testIntermediateCatchEventSignal() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventSignal.bpmn2");
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
new DoNothingWorkItemHandler());
ProcessInstance processInstance = ksession
.startProcess("IntermediateCatchEvent");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
ksession = restoreSession(ksession, true);
// now signal process instance
ksession.signalEvent("MyMessage", "SomeValue", processInstance.getId());
assertProcessInstanceCompleted(processInstance.getId(), ksession);
}
执行结果
Loading process BPMN2-AdHocProcess.bpmn2 Triggering node Task1 Task3
Junit测试获取事件消息
下面的示例中测试在程序中得到事件消息
测试程序
public void testIntermediateCatchEventMessage() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventMessage.bpmn2");
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
new DoNothingWorkItemHandler());
ProcessInstance processInstance = ksession
.startProcess("IntermediateCatchEvent");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
ksession = restoreSession(ksession, true);
// now signal process instance
ksession.signalEvent("Message-HelloMessage", "SomeValue",
processInstance.getId());
assertProcessInstanceCompleted(processInstance.getId(), ksession);
}
执行结果
Loading process BPMN2-IntermediateCatchEventMessage.bpmn2 SomeValue
Junit测试超时事件
下面的示例中测试在流程中超时触发事件
流程如下
测试程序如下
public void testIntermediateCatchEventTimerDuration() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventTimerDuration.bpmn2");
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
new DoNothingWorkItemHandler());
ProcessInstance processInstance = ksession
.startProcess("IntermediateCatchEvent");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
// now wait for 1 second for timer to trigger
Thread.sleep(1000);
ksession = restoreSession(ksession, true);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
new DoNothingWorkItemHandler());
ksession.fireAllRules();
assertProcessInstanceCompleted(processInstance.getId(), ksession);
}
超时触发事件,结果如下
Loading process BPMN2-IntermediateCatchEventTimerDuration.bpmn2 Timer triggered
Junit测试超时事件1
下面的示例中测试在流程中超时触发事件,基本操作同上
示例如果同上,不再贴出
Junit测试超时事件2
下面的示例中测试在流程中执行两次超时事件并且都触发对应的事件执行
测试程序
public void testIntermediateCatchEventTimerCycle2() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventTimerCycle2.bpmn2");
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
new DoNothingWorkItemHandler());
ProcessInstance processInstance = ksession
.startProcess("IntermediateCatchEvent");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
// now wait for 1 second for timer to trigger
Thread.sleep(1000);
assertProcessInstanceActive(processInstance.getId(), ksession);
Thread.sleep(1000);
assertProcessInstanceActive(processInstance.getId(), ksession);
ksession.abortProcessInstance(processInstance.getId());
Thread.sleep(1000);
}
执行结果
Loading process BPMN2-IntermediateCatchEventTimerCycle2.bpmn2 Timer triggered Timer triggered
Junit测试条件触发事件执行
下面的示例中测试在流程中当条件等于jack时触发事件执行
流程如下
测试程序
public void testIntermediateCatchEventCondition() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventCondition.bpmn2");
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
ProcessInstance processInstance = ksession
.startProcess("IntermediateCatchEvent");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
ksession = restoreSession(ksession, true);
// now activate condition
Person person = new Person();
person.setName("Jack");
ksession.insert(person);
assertProcessInstanceCompleted(processInstance.getId(), ksession);
}
执行结果
Loading process BPMN2-IntermediateCatchEventCondition.bpmn2 Condition triggered
Junit测试错误事件
下面的示例中测试错误事件的执行
测试程序
public void testErrorEndEventProcess() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-ErrorEndEvent.bpmn2");
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
ProcessInstance processInstance = ksession
.startProcess("ErrorEndEvent");
assertProcessInstanceAborted(processInstance.getId(), ksession);
}
执行结果
Loading process BPMN2-ErrorEndEvent.bpmn2
执行到错误流程流程自动结束
- Laravel 5.4 及 5.5 中的全新字符串辅助方法
- Laravel 5.5 的自定义验证对象/类
- Laravel 5.5 为响应请求提供的可响应接口
- Laravel 5.5 为 Mailables 类型新增 theme 属性
- Laravel 5.5 的 “vendor:publish” 新增 provider 提示
- 3秒钟,用python破解加密PDF|附工具地址
- [译]Laravel 5.0 之云存储驱动
- [译]Laravel 5.0 之自定义错误页面
- 使用Google的Quickdraw创建MNIST样式数据集!
- CentOS 7 开启 BBR 加速
- 开源项目Minio:提供非结构化数据储存服务
- [译]Laravel 5.0 之事件自动生成
- [译]Laravel 5.0 之 Eloquent 属性转换
- [译]Laravel 5.0 之事件及处理程序
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 数据结构【动态队列】代码实现
- C++抽象工厂
- 数据结构【动态栈】代码实现
- UOS安装chrome谷歌浏览器依赖Fonts-Liberation的问题
- UOS修改盘符名称(像windows的C、D、E盘)
- 【原创】Java并发编程系列29 | ConcurrentLinkedQueue
- UOS系统安装-配置Qt环境
- C++控制台程序接收、解析参数及被如何调用、调试
- C++11标准常用特性---统一初始化
- QPainter的fillRect函数-QGradient-Preset渐变颜色预设值
- 深度学习|Tensorflow2.0进阶
- Mumble——简介及搭建
- 网站开启HSTS增强安全性
- 形式化分析工具(六):HLPSL Tutorial(Example 4,other)
- Typecho回复可见功能