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

执行到错误流程流程自动结束

时间: 2024-08-02 04:55:15

jbpm5.1介绍(10)的相关文章

jbpm5.1介绍(2)

快速开始  首先下载jBPM,http://sourceforge.net/projects/jbpm/files/ 可以有选择性的下载: bin:jBPM的二进制文件和它们的依赖包 src:核心模块的源码 gwt-console:jBPM的控制台,包括服务端和客户端 docs:文档 examples:一些jBPM的例子,可以导入到Eclipse installer: jBPM的安装,下载和安装一个jBPM的示例 installer-full:所有的包括demo,jar包等待的完整工程 一些有用

介绍10个功能强大的开源Web流量分析工具

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   最近在伦敦举行的世界旅游博览会上(World Travel Market),旅游行业的专家们齐聚一堂,对网站流量分析(Web analytics)和看似微不足道的网站观察和调整对业务产生的巨大影响进行了讨论. EXpedia商务发展部总监Cameron JonES,强调了网站的快速反应对业务的重要性:"在2006年,人们愿意花4秒钟等待网页打开.现在他

jbpm5.1介绍(3)

在您好的应用程序中使用一个新的流程 流程处理  (1)你需要建立一个知识库,其中包含过程定义 KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newClassPathResource("MyProcess.bpmn2"),               ResourceType.BPMN2 ); 加入你的进程生成器(可以添加多个

jbpm5.1介绍(5)

看几个jbpm5中带的示例程序吧,包括了很多我们在日常生活中的场景 循环示例 本示例是一个在外部传入的变量,通过传入的变量来判断循环次数的演示程序,看一下流程定义的内容 如图: 初始化的时候设置变量i的值为0,然后进入流程结点,选择的是XOR,就是异或的意思,在循环中输出变量i的值并且加1, 在后面的选择节点上判断变量i的值,如果小于count则循环继续,如果大于i那么就进行完成结点,输出结点中的内容. 运行程序LoopingExample,程序内容如下: public class Loopin

jbpm5.1介绍(12)

GWT是什么 如今,编写网络应用程序是一个单调乏味且易于出错的过程.开发人员可能要花费 90% 的时间来处理浏览器行话.此外,构建.重复使用以及维护大量 JavaScript 代码库和 AJAX 组件可能困难且不可靠.Google Web Toolkit (GWT) 允许开发人员使用 Java 编程语言快速构建和维护复杂而又高性能的 JavaScript 前端应用程序,从而降低了开发难度,尤其是与 Eclipse Google 插件结合使用时,优势更明显. google的官方说的很详细 http

jbpm5.1介绍(4)

eclipse插件 需求Eclipse的3.6或更新版本 Graphiti框架,使用更新站点 可以直接下载更新Graphiti http://download.eclipse.org/graphiti/updates/0.7.1/ 更新bpmn2.0插件 http://codehoop.com/bpmn2 也可以直接从网站上下载后到本地更新,下载地址 https://github.com/droolsjbpm/bpmn2-eclipse-editor 使用eclipse创建hellojbpm 打

jbpm5.1介绍(1)

介绍 jBPM是一个灵活的业务流程管理(BPM)套件.这使得业务分析师和开发人员之间的桥梁.传统的BPM引擎有一个重点,是有限的非技术人员. jBPM的有两个重点:它提供了一种方式,企业用户和开发人员喜欢它的流程管理功能. jBPM是什么 jBPM是以流程图为导向的工作流管理系统. jBPM的核心是一个轻量级,可扩展的工作流引擎在纯Java编写的,可让您执行业务流程,采用最新的BPMN 2.0规范.它可以运行在任何Java环境中,嵌入在您的应用程序或服务. 流程语言 jBPM以BPMN 2.0为

QQ飞车新活动介绍 10倍经验还送13130点券

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;      [ 科技讯]8月5日消息,QQ飞车迎来新一期活动,活动期价最高可领取13130点券+永久精美服饰,8月11日更有全服十倍经验+十倍车队56.html">积分+十倍边境荣誉等你来!下面为大家介绍活动详细内容.     活动时间:8月5日-8月11日      十倍经验乐翻天       连续在线拿点券      周末整点有好礼

jbpm5.1介绍(8)

Junit测试或流程 下面的示例中使用的是或流程,看如下流程图 判断节点的值是大于0,大于10还是大于20 看测试程序 public void testInclusiveSplit() throws Exception {         KnowledgeBase kbase = createKnowledgeBase("BPMN2-InclusiveSplit.bpmn2");         StatefulKnowledgeSession ksession = createKn