`

jBPM中的变量浅析

    博客分类:
  • jBPM
阅读更多
在jbpm主要有两类变量, 一种是流程实例范围的变量, 另一种是任务实例范围的变量. 而在流程实例氛围中的变量又分为两种:一种是瞬时变量(transient variable), 另一种是普通的变量, 瞬时变量通过setTransientVariable()方法来设置, 该变量不会持久化到jbpm_variableinstance表中, 它只能在当前流程实例的整个生命周期中存在, 一旦流程实例结束之后, 该变量将不复存在. 而另一种是通过setVariable()和setVariableLocally()方法进行保存,通过getVariable()访问的变量, 这种变量是在整个流程实例中都可访问的, 因为它会保存到jbpm_variableinstance表中.

流程实例变量还是很好理解的, 任务实例变量则相对复杂一些.
任务实例变量还可以直接访问实例变量, 这可以按照java程序中变量的作用范围来理解, 任务实例变量相当于局部变量, 仅在当前流程实例中可见, 流程实例变量相当于全局变量, 在整个流程中可见. 当通过任务实例查找一个流程时, 如果在当前的任务实例中没有找到, 将继续到流程实例中去找. 比如通过ContextInstance.setVariable("foo", "foo")创建的流程实例变量, 那么任务实例可以直接通过TaskInstance.getVariable("foo")访问到.

而如果要在TaskInstance中修改流程实例变量, 则需要通过Task Controller. 在定义流程文件的时候, 我们会在task节点下使用这样的配置:
<controller>
	<variable access="read,required" name="foo"></variable>
</controller>

Task Controller会在创建一个任务实例时, 根据Controller下配置的variable, 先找是否存在同名的流程实例变量, 如果存在, 那么将用流程实例变量的值来创建属于当前任务实例变量, 在任务结束的时候, 将任务实例变量的值保存到同名的流程实例变量中.如果在流程实例中不存在同名的流程变量, 那么会创建一个同名的流程变量, 比如上面的配置, 将同时创建一个名为foo的流程实例变量和任务实例变量.如果指定了mapped-name属性, 那么name指的是流程实例变量名, mapped-name指的是任务实例变量名,比如:
<controller>
	<variable access="read,required" name="foo" mapped-name = "bar"></variable>
</controller>

该配置将在任务实例变量bar和流程实例变量foo之间建立映射关系, 变量值将在这两个变量之间传递.至于access属性, 我自己试验了一下, 设置为read, required, write不同的组合值好像没有什么区别.

流程实例变量的设置也有一些要注意的地方, 如果变量没有在task controller中作映射, 当使用TaskInstance.setVariable("foo", "bar")的时候, 则保存到jbpm_variableinstance表中的taskinstance_字段是空的, 也就是只能做为流程实例变量访问, 而无法通过任务实例变量访问到, 如何才能通过任务实例来访问该变量呢? 回答是使用TaskInstance.setVariableLocally("foo", "bar")来设置流程实例变量, 这样保存到jbpm_variableinstance表会同时任务实例id设置为taskinstance_字段的值, 同时它还创建了一个同名的流程实例变量(不知道jbpm为什么要这么做).

其实关于变量的内容还有很多, 目前的项目中还没有碰到, 这里不做一一分析.
9
1
分享到:
评论
6 楼 naiyi 2009-12-17  
macrochen 写道
那时好像是3.1.x那个版本, 难道现在的版本去掉了这两个方法?

一直没有去掉,这两个方法不在TaskInstance里定义的,而是继承自VariableContainer。
楼主在原文中提到“设置为read, required, write不同的组合值好像没有什么区别.
”,我的理解是这几个变量是为我们前台页面提供方便的,比如例子里面的<h:inputText value="#{formParameter.value}" readonly="#{formParameter.readOnly}" />
TaskFormParameter类中:
public boolean isReadOnly() {
     return !isWritable;
}
这样就可以通过判断isReadable,isWritable,isRequired这几个标志位来决定jsp页面可以赋予用户的操作类型
5 楼 taga 2009-04-14  
写的还是比较清楚,文章解决呢两个问题:
一个是如何设定PI的变量
二个是如何将TI中的变量和PI中的变量关联起来

还有一个问题,就是如何设定一个TI中的变量,这个变量不和PI中的变量相关联??

按照lz的说法,TaskInstance.setVariable("foo", "bar")和TaskInstance.setVariableLocally("foo", "bar")都是不可以的,前一个设定的是PI的变量,后一个设定的时候也PI变量关联的TI的变量
4 楼 taga 2009-04-11  
我用的3.2.1,taskInstance中依然有setv和setvl这两个方法
3 楼 macrochen 2009-03-17  
那时好像是3.1.x那个版本, 难道现在的版本去掉了这两个方法?
2 楼 jimandtom 2009-03-15  
老大,我怎么TaskInstance没有setVariable()和setVariableLocally()方法,请问你说的这么或者你用的 jbpm的哪个版本???/
1 楼 ycyk_168 2008-09-23  
为什么我每次使用setTransientVariable()方法设置的临时变量无效啊?每次取得时候都是NULL,能不能给个例子呢?

相关推荐

    jbpm中文用户指南

    BPMN是一种图形化表示业务流程的方法,jbpm的用户指南会详细介绍如何使用BPMN符号来设计流程图,包括开始事件、结束事件、任务、网关、事件和数据对象等,以及它们在jbpm中的具体实现。 3. **jbpm工作流** 工作流...

    jbpm中文教程-详细

    4. 变量(Variable):在流程中,可以设置和修改变量,它们用于存储流程运行过程中的数据。 5. 工作流引擎(Workflow Engine):jbpm的工作流引擎负责解析流程定义,调度任务,并管理流程实例的生命周期。 二、...

    JBPM深入解析之变量设计

    JBPM中的变量有不同作用域,包括流程变量(process variables)、任务变量(task variables)和执行变量(execution variables)。流程变量在整个流程实例中可见,任务变量仅在特定任务实例中有效,而执行变量则关联...

    jbpm中文用户手册

    在"jBPM4.1中文用户手册"中,读者可以找到关于这些特性和功能的详细解释,包括如何创建和部署BPMN模型、配置工作流引擎、使用任务服务、集成规则引擎等操作步骤。此外,手册可能还会涵盖错误处理、性能调优、安全...

    jBPM4.3中文开发手册

    - **实体管理**: 包括任务、流程实例、变量等,这些实体在jbPM中都有对应的管理模型。 - **规则集成**: jbPM与Drools规则引擎紧密集成,允许在流程中嵌入决策逻辑。 ### 2. 设计与部署 - **流程建模**: 使用jbPM ...

    jbpm 数据库jbpm 数据库

    在jbpm中,流程定义(Process Definition)是流程模板,描述了流程的结构和规则。流程实例(Process Instance)则是流程定义在特定时间的执行副本,每个实例都有唯一标识符。 3. **任务管理** jbpm中的任务(Task...

    jBPM4.1中文开发指南

    jBPM4.1允许在流程定义中声明变量,并且可以在活动之间传递这些变量的值。 **6. 任务(Task)**:任务是活动的一种形式,通常涉及到人工参与。jBPM4.1提供了强大的任务管理功能,包括任务分配、监控和报告等。 ###...

    JBPM采购申请系统——07_JBPM中的脚本语言.7z

    JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM中的脚本语言.7z JBPM采购申请系统——07_JBPM...

    jbpm中文文档--英文文档

    2. **安装与配置**:详述如何在开发环境中安装jbpm,包括设置环境变量、导入依赖库和配置数据库连接等步骤。 3. **流程设计**:介绍使用jbpm设计工具(如eclipse插件或Guvnor)来创建、编辑和管理流程模型,包括...

    JBPM中的脚本语言代码例子

    在JBPM中,脚本语言的运用是实现动态行为和灵活逻辑的重要手段,而BeanShell作为其中之一,扮演了关键角色。 BeanShell是Java的一个轻量级、开源的脚本引擎,它的语法和Java极其相似,甚至可以直接运行Java代码。这...

    jbpm中文指南(包括3和4的)

    6. **监控与管理**:jbpm3提供了一套管理工具,用于查看流程实例的状态、跟踪变量变化和进行异常处理。 ### jbpm4 知识点 1. **架构升级**:jbpm4采用了全新的服务导向架构(SOA),增强了可扩展性和灵活性,引入...

    jbpm中文开发指南+用户手册+demo源码+学习笔记等

    jbpm不仅适合大型企业,也适合中小型企业,因为它具有高度可扩展性和灵活性。 jbpm中文开发指南是针对中国开发者编写的,旨在帮助他们更好地理解和使用jbpm进行业务流程开发。这份指南可能涵盖了jbpm的基础概念,如...

    jbpm4jbpm5

    jbpm4.3表结构和表字段说明文档通常会详细介绍jbpm4中涉及的数据库表,包括实体如任务实例(TaskInstance)、流程实例(ProcessInstance)、工作项(WorkItem)等的表结构和字段。这些信息对于开发者来说至关重要,...

    JBPM中文开发技术文档

    核心工作流和BPM 功能被封状作为一个简单的Java库.这个库包括在jBPM数据库中存储,更新和检索流程信息的服务

    jbpm3.1中文文档

    3. **工作流定义**:jbpm中的流程定义文件(.bpmn或.jpdl)描述了流程的各个步骤、决策点、事件和任务。学习如何编写和解析这些文件对于定制流程至关重要。 4. **任务管理**:jbpm允许用户分配和管理任务,包括任务...

    JBPM4.3中文表结构详解,中文名称、长度等

    5. **JBPM4_HIST_DETAIL**:流程历史详细表,保存流程执行过程中变量的变更记录。 6. **JBPM4_HIST_PROCINST**:流程实例历史表,记录流程实例的完整生命周期信息。 7. **JBPM4_HIST_TASK**:流程任务实例的历史表...

    jbpm教程+中文用户指南

    在jbpm教程中,你将学习到如何使用jbpm的工作流设计器,它提供了一个图形化的界面,使得非技术人员也能轻松设计和修改流程。此外,教程还将涵盖如何创建和配置流程定义(process definition),以及如何与Java代码...

    JBPM工作原理及表结构详解

    - **持久化存储**:JBPM将流程实例和变量等数据存储在数据库中,保证了数据的可靠性和可恢复性。 - **集成能力**:它可以轻松地与Java EE、Spring框架和其他企业级系统集成。 - **事件驱动**:JBPM支持异步事件...

Global site tag (gtag.js) - Google Analytics