第 7 章  上下文


阅读本章,了解 进程变量。进程变量是维护进程实例相关信息的键值对。
注意
为了可以将 上下文 存储在数据库中,需要有一些小的限制。

7.1.  访问进程变量

org.jbpm.context.exe.ContextInstance 作为进程变量的核心接口。以这种方式从进程实例获取 ContextInstance
ProcessInstance processInstance = ...;
ContextInstance contextInstance = 
	(ContextInstance) processInstance.getInstance(ContextInstance.class);
Copy to Clipboard Toggle word wrap
以下是基本操作:
void ContextInstance.setVariable(String variableName, Object value);
void ContextInstance.setVariable(
	String variableName, Object value, Token token);

Object ContextInstance.getVariable(String variableName);
Object ContextInstance.getVariable(String variableName, Token token);
Copy to Clipboard Toggle word wrap
变量名称为 java.lang.String。默认情况下,Business Process Manager 支持以下值类型:(还支持任何其他可通过 Hibernate 保留的类。)
java.lang.Stringjava.lang.Boolean
java.lang.Characterjava.lang.Float
java.lang.Doublejava.lang.Long
java.lang.Bytejava.lang.Integer
java.util.Datebyte[]
java.io.Serializable 
注意
未输入的 null 值 也可以永久存储。
警告
如果进程变量中存储了任何其他类型,则不要保存进程实例,因为这会导致异常错误。

7.2.  变量的实时

变量不必在进程存档中声明。在运行时,只需将任何 Java 对象放在变量中。如果变量不存在,它将创建,其方式与普通 java.util.Map 相同。请注意,也可以删除变量。
ContextInstance.deleteVariable(String variableName);
ContextInstance.deleteVariable(String variableName, Token token);
Copy to Clipboard Toggle word wrap
类型可以自动更改。这意味着,允许类型覆盖具有不同类型值的变量。务必要始终尝试限制类型更改的数量,因为这会产生比普通列更新更多的与数据库通信。

7.3.  变量 Persistence

变量是进程实例的一部分。将进程实例保存到数据库中,会将数据库与进程实例同步。(通过此操作创建、更新和删除变量。) 如需更多信息,请参阅 第 4 章 Persistence

7.4.  变量范围

执行的每个路径(也称为 令牌)都有自己的进程变量集合。变量始终在执行路径上请求。进程实例有这些路径的树。如果请求了变量但没有指定路径,则默认使用 root 令牌
变量查找递归发生。它运行在给定执行路径的父项上。(这与使用编程语言限制变量的方式类似。)
当在执行路径上设置不存在的变量时,会在 root 令牌 上创建变量。(默认情况下,每个变量都有一个进程范围。) 要使变量令牌"本地",请明确创建它,如下例所示:
ContextInstance.createVariable(String name, Object value, Token token);
Copy to Clipboard Toggle word wrap

7.4.1.  变量过载

变量过载 意味着执行的每个路径都可以拥有具有相同名称的变量的副本。这些副本都是相互独立处理的,可以是不同的类型。如果一个正在通过同一转换启动多个执行并发路径,则可能会注意变量过载。这是因为,将区分这些路径的唯一操作就是它们自己的一组变量。

7.4.2.  变量覆盖

变量覆盖 意味着在更全局 执行路径中执行嵌套路径 的变量。通常,"嵌套执行路径"与并发相关: fork 和 join 之间的执行路径是到达 fork 中的执行路径的子项(嵌套)。例如,您可以在进程实例范围内使用此变量覆盖执行发送 和计费 路径中的名为 contact 的变量。

7.4.3.  任务实例变量范围

要了解任务实例变量,请阅读 第 8.4 节 “ 任务实例变量 ”

7.5.  临时变量

当进程实例保留在数据库中时,因此也是正常的变量。但是,有时可能需要在委派类中使用变量,而不将其存储在数据库中。这可以通过 临时变量 来实现。
注意
临时变量的生命周期与 ProcessInstance Java 对象的生命周期相同。
注意
由于它们的性质,临时变量与执行路径无关。因此,进程实例对象将只有一个映射。
临时变量可通过上下文实例中自己的一组方法访问。它们不需要在 进程definition.xml 文件中声明。
Object ContextInstance.getTransientVariable(String name);
void ContextInstance.setTransientVariable(String name, Object value);
Copy to Clipboard Toggle word wrap
本章详细介绍了进程变量。现在,读者应确信自己或她了解这个主题。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat