jBPM中的变量浅析
来源:互联网 发布:tekla软件多少钱 编辑:程序博客网 时间:2024/05/15 06:38
在jbpm主要有两类变量, 一种是流程实例范围的变量, 另一种是任务实例范围的变量. 而在流程实例氛围中的变量又分为两种:一种是瞬时变量(transient variable), 另一种是普通的变量, 瞬时变量通过setTransientVariable()方法来设置, 该变量不会持久化到jbpm_variableinstance表中, 它只能在当前流程实例的整个生命周期中存在, 一旦流程实例结束之后, 该变量将不复存在. 而另一种是通过setVariable()和setVariableLocally()方法进行保存,通过getVariable()访问的变量, 这种变量是在整个流程实例中都可访问的, 因为它会保存到jbpm_variableinstance表中.
流程实例变量还是很好理解的, 任务实例变量则相对复杂一些.
任务实例变量还可以直接访问实例变量, 这可以按照java程序中变量的作用范围来理解, 任务实例变量相当于局部变量, 仅在当前流程实例中可见, 流程实例变量相当于全局变量, 在整个流程中可见. 当通过任务实例查找一个流程时, 如果在当前的任务实例中没有找到, 将继续到流程实例中去找. 比如通过ContextInstance.setVariable("foo", "foo")创建的流程实例变量, 那么任务实例可以直接通过TaskInstance.getVariable("foo")访问到.
而如果要在TaskInstance中修改流程实例变量, 则需要通过Task Controller. 在定义流程文件的时候, 我们会在task节点下使用这样的配置:
Task Controller会在创建一个任务实例时, 根据Controller下配置的variable, 先找是否存在同名的流程实例变量, 如果存在, 那么将用流程实例变量的值来创建属于当前任务实例变量, 在任务结束的时候, 将任务实例变量的值保存到同名的流程实例变量中.如果在流程实例中不存在同名的流程变量, 那么会创建一个同名的流程变量, 比如上面的配置, 将同时创建一个名为foo的流程实例变量和任务实例变量.如果指定了mapped-name属性, 那么name指的是流程实例变量名, mapped-name指的是任务实例变量名,比如:
该配置将在任务实例变量bar和流程实例变量foo之间建立映射关系, 变量值将在这两个变量之间传递.至于access属性, 我自己试验了一下, 设置为read, required, write不同的组合值好像没有什么区别.
流程实例变量的设置也有一些要注意的地方, 如果变量没有在task controller中作映射, 当使用TaskInstance.setVariable("foo", "bar")的时候, 则保存到jbpm_variableinstance表中的taskinstance_字段是空的, 也就是只能做为流程实例变量访问, 而无法通过任务实例变量访问到, 如何才能通过任务实例来访问该变量呢? 回答是使用TaskInstance.setVariableLocally("foo", "bar")来设置流程实例变量, 这样保存到jbpm_variableinstance表会同时任务实例id设置为taskinstance_字段的值, 同时它还创建了一个同名的流程实例变量(不知道jbpm为什么要这么做).
其实关于变量的内容还有很多, 目前的项目中还没有碰到, 这里不做一一分析.
流程实例变量还是很好理解的, 任务实例变量则相对复杂一些.
任务实例变量还可以直接访问实例变量, 这可以按照java程序中变量的作用范围来理解, 任务实例变量相当于局部变量, 仅在当前流程实例中可见, 流程实例变量相当于全局变量, 在整个流程中可见. 当通过任务实例查找一个流程时, 如果在当前的任务实例中没有找到, 将继续到流程实例中去找. 比如通过ContextInstance.setVariable("foo", "foo")创建的流程实例变量, 那么任务实例可以直接通过TaskInstance.getVariable("foo")访问到.
而如果要在TaskInstance中修改流程实例变量, 则需要通过Task Controller. 在定义流程文件的时候, 我们会在task节点下使用这样的配置:
- <controller>
- <variable access="read,required" name="foo"></variable>
- </controller>
- <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>
- <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为什么要这么做).
其实关于变量的内容还有很多, 目前的项目中还没有碰到, 这里不做一一分析.
- jBPM中的变量浅析
- JBPM (四) 浅析JBPM中的实例变量和任务变量
- jbpm中的流程变量
- 浅析python中的变量
- JBPM 变量
- jbpm中的一个关于流程变量的最佳实践
- 浅析JBPM工作流引擎
- 浅析JBPM工作流引擎
- 浅析JBPM工作流引擎
- 浅析JBPM工作流引擎
- 浅析JBPM工作流引擎
- 浅析JBPM工作流引擎
- 浅析C++中的简单变量--整型
- JBPM流程变量
- Jbpm 流程变量
- jbpm设置流程变量
- 浅析python中的类变量和对象变量
- 浅析c语言中的变量(局部变量,外部变量,静态变量,寄存器变量)
- Sql Server数据库定时自动备份
- 企业或网吧用路由器一般有两个解决方案:软路由解决及硬路由解决
- SQL2005导入到SQL2000的方法
- 虚拟现实
- B/S 与C/S
- jBPM中的变量浅析
- Eric S. Raymond 五部曲 之 《Hacker 文化简史》
- MyEclipse下配置Websphere6
- 面试时自我介绍最强参考卷
- RouterOS网吧双线路由策略
- C++中虚函数的作用
- 《搜索引擎原理、技术与系统》读书笔记(2)——分词算法
- report service 生成报表文件
- 九型性格问卷 – 请圈出你认为对的句子