jBPM开发:上下文(Context)和流程变量
3:08 am in Java开源 by aronezhang
上下文同流程变量有关,流程变量是同流程实例相关的key-value对信息,在jBPM流程开发过程中需要频繁的存取变量。
1,存取变量
org.jbpm.context.exe.ContextInstance 作为流程变量服务的中央接口,可以从ProcessInstance 获得ContextInstance:
1 2 | ProcessInstance processInstance = ...; ContextInstance contextInstance = (ContextInstance) processInstance.getInstance(ContextInstance.class); |
基本的操作有:
1 2 3 4 | 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); |
变量名字是字符串java.lang.String类型;jBPM支持下列变量值类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 | java.lang.String java.lang.Boolean java.lang.Character java.lang.Float java.lang.Double java.lang.Long java.lang.Byte java.lang.Short java.lang.Integer java.util.Date byte[] java.io.Serializable classes that are persistable with hibernate(可以进行持久化的类) |
2,变量的生命周期
在运行期间,可以把任何java object放到变量里,如果变量不存在,它将会被创建;变量可以被删除:
1 2 | ContextInstance.deleteVariable(String variableName); ContextInstance.deleteVariable(String variableName, Token token); |
在jBPM3.2.3版本之前,不支持类型的自动转换。就是不允许用不同类型的值来覆盖变量,要想这样做,必须首先删除老变量。而jBPM3.2.3之后支持不同数据类型值的覆盖。
3,变量的持久化
变量是流程实例的一部分,流程实例保存在数据库中,保持数据库同流程实例同步。保存流程实例到数据库时创建、更新和删除变量
4,变量的范围
每个执行路线都有它自己的一套流程变量,变量请求总是在令牌上发生,流程实例有令牌树,当请求一个变量没有指明令牌,那么默认的令牌就是根令牌。
当在令牌上设置不存在变量,那么变量就在根令牌root-token上被建立,这就是说每个变量默认就是整个流程范围,如果想建立一个令牌的局部变量,必须使用:
1 | ContextInstance.createVariable(String variableName, Token token); |
5,临时变量
当流程实例持久化到数据库中,正常变量也作为流程实例的一部分被持久化了,某些状态下可能希望在委托类里用使用变量,但是又不想把它储存到数据库中。临时变量的生命周期同ProcessInstance java object一样。由于这个自然特性,临时变量同令牌无关,因此只有一个流程实例object的临时变量的map。
临时变量在上下文实例中可以从它们自己的变量组访问, 不需要在processdefinition.xml中声明
1 2 | Object ContextInstance.getTransientVariable(String name); void ContextInstance.setTransientVariable(String name, Object value); |
下一篇文章将描述任务管理的内容。
–
相关文章:
哈哈,终于有人也发现了那个妇科医院的广告。。。
这个页面帅呆了,显得更专业了!!!!,这个“妇科医院”广告好!!!