alartin 的个人资料Windows Live 共享空间照片日志列表更多 ![]() | 帮助 |
|
|
1月22日 JBPM: 上下文概述 上下文Context其实就是处理流程变量的地方。流程变量使用键值对来维护流程实例相关的信息。上下文必须要存储到数据库中。 访问变量 我们通过上下文实例(ContextInstance)来和流程变量打交道,上下文实例就是一个中央接口,位于org.jbpm.context.exe包中,从流程实例ProcessInstance中获得上下文实例: ProcessInstance processInstance = ...; ContextInstance contextInstance = (ContextInstance) processInstance.getInstance(ContextInstance.class); 常见的对上下文实例的操作包括:设置变量,获得变量: 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); 变量的名字是String类型的。默认情况下,JBPM支持多种变量值的类型:
Null值也支持,也可持久化。其他类型的也可以存储在流程变量中,只是会抛出异常。当流程变量的值为hibernate存储的类的时候需要配置JBPM. 流程变量的生命周期 流程变量无需在流程文件中声明,在运行时,你可以将任意Java对象设为变量。如果该变量不存在的话,变量会被创建,就象Map一样。 删除变量也很简单: ContextInstance.deleteVariable(String variableName); ContextInstance.deleteVariable(String variableName, Token token); JBPM现在支持自动改变类型。这意味着你可以使用不同类型的值来覆盖一个变量。当然你应该严格控制类型改变的次数,毕竟这需要额外的数据库通讯。 流程变量的持久化 流程变量是流程实例的一部分。将流程实例保存在数据库中,意味着数据库和流程实例同步。流程变量的创建更新删除是通过流程实例的更新来实现的。 流程变量的范围 每个token,也就是每个流程执行的路径都有一套自己的变量。请求变量总是在token上发生的。流程实例拥有一个token树。在请求变量的时候,当你没有指定token参数的话,默认的是root token作为参数。 变量的查询是在给定的token的父token们中递归查找的。类似编程语言中的变量范围。 如果你在一个token上设置一个并不存在的变量,那么这个变量将在root token上创建。这意味这每个变量的默认范围是流程范围。 如果你需要限定变量的范围,则需要显式地指定Token: ContextInstance.createVariable(String name, Object value, Token token); 变量的过载overloading 变量的过载指的是流程执行的每个路径都可以有相同一套名字的变量,也就是说不同的token中变量的名字可以一样,值和类型可以不一样。token之间是独立的。这在流程跨越同一个转移,启动不同的并发路径时很有用。 区别不同执行路径的就靠它们各自的这些变量。 变量的重载overriding 引用通告此日志的引用通告 URL 是: http://alarnan.spaces.live.com/blog/cns!819CBC613DE169EF!178.trak 引用此项的网络日志
|
|
|