技术类-流程变量

流程变量

定义流程变量

分成3种流程变量

全局变量(全局流程变量)

全局临时变量(全局流程临时变量)

局部变量(流程某个接点内有效的变量)

see org.jbpm.context.exe.ContextInstance

目前还没有使用过局部变量(流程某个接点内有效的变量)

流程变量的定义

1.           流程变量的类型

·         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

 所有基本类型的包裹类型,以及实现了Serializable的类型都可以作为流程参数变量使用,注意参数类不能是一个类的内部类或者属性类(除非包含参数类的类实现了Serializable接口)

参考 org.jbpm.context.exe.VariableInstance

2.          流程变量的使用

l         变量的定义和获取

void ContextInstance.setVariable(String variableName, Object value);

void ContextInstance.setVariable(String variable Name, Object value, Token token);

Object ContextInstance.getVariable(String variableName);

Object ContextInstance.getVariable(String variableName, Token token);

l        Variables can be deleted with

ContextInstance.deleteVariable(String variableName);

ContextInstance.deleteVariable(String variableName, Token token);

 

3.           Variable lifetime

   一个变量在被定义后,在变量从ContextInstance删除前,都可以被访问。当变量被删除后,去获取该变量将返回为空。

4.         自定义类的实例作为流程变量

   如果一个类的实例要作为流程变量使用,该类需要实现java.io.Serializable接口,并且定义序列化版本.

 

//一个可以作为流程变量使用的类

class Wdz implements Serializable{

    //为类指定序列化版本号

    private static final long serialVersionUID = 1L ;    

       private String name="wdz";

       private int age=10;

       public String toString(){

              return "name="+name+",age="+age;    

       }    

}

上面的例子中,如果把类Wdz作为类WdzParent内部类使用,然后当成流程变量使用,那类WdzParent必须 也实现Serializable接口,否则会有问题.

5.         Transient variables

流程的历史变量是不能持久化的,作用范围是对整个流程全局有效的。

ContextInstance类内部,采用的是一个Map来存储TransientVariable的信息

参考代码

org.jbpm.context.exe.ContextInstance 的源代码。

主要的相关方法

public void deleteTransientVariable(java.lang.String name)

public void setTransientVariable(java.lang.String name,

                                 java.lang.Object value)

public java.lang.Object getTransientVariable(java.lang.String name)

 

6.        Variables overloading

 当一个变量和流实例关联(变量名字=”wdz”,value=”test”),如果在设置一个变量

(变量名字=”wdz”,value= new Integer(10)) ,那最后变量(变量名字=”wdz)的值是Integer(10)

这称之为overload.

 

7.       Variables overriding

 如果父流程有变量A(=”value 1” ),子流程又定义了变量A=”value 2” ,那在子流程范围内,获取变量A的值,那结果是值=”value 2” 。这是遵循一般语言的局部变量在它的局部范围内override上级变量。

 

8.      流程变量的持久化

它依赖于流程实例的持久化,非TransientVariable随流程实例的持久化一起被保存。

保存在数据表jbpm_variableinstance

参考 org.jbpm.context.exe.VariableInstance

9.          Customizing variable persistence (可以进一步了解)

User java object <---> converter <--->  variable instance

也就是自定义类的持久化需要定义自己的converter和变量实例类

converter和变量实例类需要继承org.jbpm.context.exe.VariableInstance

converter需要实现org.jbpm.context.exe.Converter接口

 

    jBPM 之前是一个开源软件,后加入 JBoss 组织。正好我们公司也是用 JBoss 的。不过 jBPM 并没有绑定在 JBOSS 上, Tomcat 等也可以使用它。

注:本文使用的 jBPM 版本为 3.1.1

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值