第 5 章 实现基本活动
这一章解释了流程定义的基础,流程虚拟机给予的功能 以及活动实现是如何构建的。 同时,客户端API被用来执行包含了那些活动实现的流程。
5.1. ActivityBehaviour
PVM库没有包含完整的流程结构。 作为替代的是,活动的运行时行为被委派给一个ActivityBehaviour。 换句话讲,ActivityBehaviour是一个接口, 它用来在纯java环境实现流程结构的运行时行为。
public interface ActivityBehaviour extends Serializable {
void execute(ActivityExecution execution) throws Exception;
}
当一个活动行为被调用时,它就处于执行传播的全部控制中。 换句话说,一个活动行为可以决定下一步应该执行什么执行。 比如,可以使用execution.take(Transition)获得一个转移, 或者使用execution.waitForSignal()进入等待阶段。 万一活动行为没有调用任何上述的执行传播方法, 执行将 按默认方式执行。
5.2. ActivityBehaviour实例
我们会启动一个非常原始的hello world例子。 一个Display活动会将一条信息打印到控制台:
public class Display implements ActivityBehaviour {
String message;
public Display(String message) {
this.message = message;
}
public void execute(ActivityExecution execution) {
System.out.println(message);
}
}
让我们使用这个活动构建我们第一个流程定义:
Display实例流程
图 5.1. Display实例流程
TODO add ProcessBuilder example code
现在我们可以像下面这样执行流程:
Execution execution = processDefinition.startExecution();
startExecution的调用会在控制台打印hello world:
hello
world
一个总是值得提醒的事情是活动可以使用属性进行配置。 在Display例子中,你可以看到message属性在两种使用方法中配置的不同。 通过配置属性,我们可以写出可复用的活动。 它们可以在以后每次使用在流程中都进行不同的配置。 这是一个基本的部分, 将流程语言构建在流程虚拟机之上。
其他需要解释的部分是 这个活动实现没有包含任何执行传播的功能。 当一个新流程实例启动时, 执行会定位到初始活动,那个活动会被执行。 Display.execute方法用来决定默认的执行传播。 具体的,这意味着活动自己 没有调用任何执行传播的方法。 那种情况下,默认的传播会执行。默认传播会选择第一个转移,如果这个转移存在的话。 如果没有,它会结束这个执行。 这揭示了为什么a活动和b活动都被执行, 而在b活动执行完执行会停止。
关于默认流程行为的更多细节可以 在第 7.3 节 “默认执行行为”找到。
5.3. ExternalActivityBehaviour
外部活动是负责流程执行由外部转移进来的活动, 外部的意思是来自流程系统的外部。 这意味着这个执行流程对于系统来说,这是一个等待状态。 这个执行会一直等待到外部触发器调用。
为了处理外部触发器,ExternalActivityBehaviour 为ActivityBehaviour添加了一个方法:
public interface ExternalActivity extends Activity {
void signal(Execution execution,
String signal,
Map<String, Object> parameters) throws Exception;
}
就像普通的活动,当一个执行到达一个活动, 外部活动行为的execute方法会被调用。 在外部活动中,execute方法会传递另一个系统的响应, 然后通过调用execution.waitForSignal() 进入等待状态。 比如在execute方法中,响应可能是由一个人传入, 通过在任务管理系统中创建一个任务入口, 然后等待到这个人完成这个任务。
一旦活动行为已经处于等待状态, 然后执行会等待到调用signal方法。 执行会委派signal给ExternalActivityBehaviour对象 分配给当前的活动。
所以活动的signal方法 会在等待期间,在执行获得一个外部触发器的时候调用。 signal方法中,响应会传递给后面的流程执行。 比如,当一个人完成了一个任务,任务管理系统 会在执行中调用signal方法。
一个signal可选择使用signal名字和一个参数map。 活动行为拦截signal和参数的最常用方式是 signal对应选择的外出转移, 参数作为执行中的变量。但那些只是例子, 它一直等到活动使用singal和它期望的参数。
5.4. ExternalActivity实例
这里是一个简单等待状态实现的第一个例子:
public class WaitState implements ExternalActivity {
public void execute(ActivityExecution execution) {
execution.waitForSignal();
}
public void signal(ActivityExecution execution,
String signalName,
Map<String, Object> parameters) {
execution.take(signalName);
}
}
execute方法调用execution.waitForSignal()。 execution.waitForSignal()的调用 会使流程执行进入等待状态, 直到一个外部触发器出现。
signal方法使用signal参数对应的转移名称 来选择转移。所以当一个执行获得一个外部触发器, signal名称被拦截,作为外部转移的名称, 执行会被传播到那个转移上。
这里是从a到b有一个转移的相同的流程。 这时候,两个活动的行为都是WaitState。
外部活动实例流程
图 5.2. 外部活动实例流程
ClientProcessDefinition processDefinition = ProcessFactory.build()
.activity("a").initial().behaviour(new WaitState())
.transition().to("b")
.activity("b").behaviour(new WaitState())
.done();
让我们为流程定义启动一个新流程实例:
ClientExecution execution = processDefinition.startProcessInstance();
启动这个流程会执行a中的WaitState活动。 WaitState.execute会调用 ActivityExecution.waitForSignal。 所以当processDefinition.startProcessInstance()返回, 执行会一直处在a活动。
assertEquals("a", execution.getActivityName());
然后我们提供了外部触发器, 通过调用signal方法。
execution.signal();
execution.signal()会委派给当前活动。 所以在这种情况下就是a活动里的 WaitState活动。WaitState.signal会调用 ActivityExecution.take(String transitionName)。 当我们没有提供一个signal名称,第一个名字是null会被选中。 我们指定的a的唯一转移没有名字,所以会选中这个。 然后这个转移指向b。 当执行到达b活动, b活动中的WaitState活动会被执行。 就像我们上面看到的,执行会在b一直等待, 这时signal会返回, 离开的执行指向b活动。
assertEquals("b", execution.getActivityName());
jBPM4.0开发指南完整版
http://family168.com/tutorial/jbpm4devguide/html/index.html
- 大小: 1.1 KB
分享到:
相关推荐
### jBPM4.1中文开发指南 #### jBPM4简介 jBPM(Java Business Process Model)是JBoss的一个开源项目,提供了一个灵活的工作流引擎,支持业务流程建模、执行和管理。jBPM4.1版本在原有基础上进行了多项改进,包括...
【jbpm中文开发指南.chm】是一份专为中文用户设计的JBoss Business Process Management (jbpm) 开发教程,采用CHM(Compiled Help Manual)格式,这种格式以压缩包的形式存储了大量HTML文档,便于离线查阅和快速检索...
总的来说,"工作流JBPM中文开发指南"是学习和掌握JBPM的重要资源,无论你是刚接触工作流管理的新手,还是寻求深化JBPM应用的资深开发者,都能从中受益匪浅。通过深入阅读和实践,你可以熟练地运用JBPM来设计、实施和...
总结来说,"JBPM4.4中文开发指南"是一本非常实用的资源,它帮助开发者理解和掌握如何在Java环境中设计、实现和管理业务流程。通过学习本书,你可以了解到如何使用JBPM来自动化和优化企业的业务操作,提高效率并确保...
**jbpm开发指南_中文** 是一份专门针对Java平台的工作流管理系统jbpm的详细教程,旨在帮助开发者深入了解和掌握jbpm的使用。jbpm是一款开源的业务流程管理(BPM)和工作流引擎,它提供了从设计、部署到执行整个业务...
通过《jBPM中文用户指南》的学习,初学者可以掌握jBPM的基本概念和操作,进一步提升到能够设计和实施复杂的业务流程。这份指南详细介绍了每个知识点,并且以中文呈现,降低了学习门槛,对于中国用户来说是一份非常有...
JBPM工作流开发指南是针对使用JBPM框架进行工作流应用开发的专业参考资料,该指南以中文形式详细介绍了如何利用JBPM来设计、实现和管理业务流程。JBPM是一款开源的工作流管理系统,它允许开发者集成业务流程到应用...
"jBPM中文用户指南"则可能深入到更具体的使用场景,例如如何定义和管理用户任务,如何设置流程变量,以及如何处理流程异常。此外,用户指南通常还会介绍jbpm提供的监控工具,如流程实例的可视化跟踪,以及如何通过...
【jbpm中文教程-详细】 Java Business Process Management(jbpm)是开源社区提供的一款强大的业务流程管理系统,它允许开发者设计、执行和管理业务流程。jbpm不仅提供了完整的BPM(Business Process Management)...
### JBoss jBPM jPDL中文指南知识点详解 #### 一、引言 JBoss jBPM(Java Business Process Management)是一个开源的工作流引擎,主要用于实现业务流程管理和任务协调。jPDL(jBPM Process Definition Language)...
《jBPM4.4开发指南》与《jBPM4.4中文用户手册》是深入理解jBPM4.4这一开源工作流管理系统的重要参考资料。jBPM,全称Java Business Process Management,是一个用于执行业务流程的轻量级、灵活的开源框架,它为业务...
《jbpm中文用户指南》.chm文件是jbpm的中文版用户手册,为开发者提供了全面的指导。这个文档通常会涵盖以下内容: 1. **jbpm概述**:解释jbpm的基本概念,包括工作流引擎、流程定义语言(JPDL)以及它在企业应用中...
jBPM5 用户手册 jBPM5 是一个开源的工作流和业务流程管理(BPM)框架,专注于灵活、可扩展且与Java平台紧密结合的解决方案。...无论是开发人员还是业务分析师,都可以借助 jBPM5 来实现更高效、灵活的业务流程自动化。
jbpm教程3.0中文版是针对这个早期版本的详细指南,旨在帮助开发者和业务分析师理解并掌握jbpm的核心功能和用法。 jbpm的主要特性包括: 1. **流程建模**:jbpm支持BPMN 2.0标准,这是一种业务流程建模语言,允许...
### jBPM4.4 API 详解:工作流自动化的核心技术 ...以上步骤不仅为jBPM4.4的开发环境搭建提供了详实的指南,同时也深入解析了工作流自动化的基本原理与jBPM4.4的工作机制,为IT从业者及开发者提供了宝贵的参考资料。
这个文档是JBPM的开发指南,旨在帮助开发者理解和应用JBPM进行工作流开发。 一、概述 JBPM的核心功能是通过JPDL(JBoss Process Definition Language)来定义和管理业务流程。JPDL是一种XML格式的语言,用于描述...
"jbpm开发指南.pdf"则可能进一步深入到jBPM的高级特性和最佳实践。这份文档可能会探讨如何使用jBPM与Spring、Hibernate等其他框架集成,实现更复杂的业务逻辑。它也可能包含如何编写自定义工作流监听器、事件处理器...
首先,"jBPM中文用户指南.chm"是针对中文使用者的官方文档,它详细介绍了jbpm的基本概念、安装步骤、配置方法以及如何使用jbpm来设计和执行工作流。用户指南通常会涵盖流程定义、任务管理、事件处理、异常处理等核心...
根据提供的文件信息,可以归纳出以下关于JBPM 4.3中文用户手册的相关知识点: ### JBPM 4.3 概述 - **JBPM**(JBoss Business Process Management)是一个开源的工作流引擎,用于创建、管理和执行业务流程。 - **...