6.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接口,否则会有问题.
6.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.6. Variables overloading
当一个变量和流实例关联(变量名字=”wdz”,value=”test”),如果在设置一个变量
(变量名字=”wdz”,value= new Integer(10)) ,那最后变量(变量名字=”wdz)的值是Integer(10)。
这称之为overload.
6.7. Variables overriding
如果父流程有变量A(值=”value1”),子流程又定义了变量A值=”value2”,那在子流程范围内,获取变量A的值,那结果是值=”value2”。这是遵循一般语言的局部变量在它的局部范围内override上级变量。
6.8. 流程变量的持久化
它依赖于流程实例的持久化,非TransientVariable随流程实例的持久化一起被保存。
保存在数据表jbpm_variableinstance
参考 org.jbpm.context.exe.VariableInstance
6.9. Customizing variable persistence (可以进一步了解)
User java object <---> converter <---> variable instance
也就是自定义类的持久化需要定义自己的converter和变量实例类
converter和变量实例类需要继承org.jbpm.context.exe.VariableInstance
converter需要实现org.jbpm.context.exe.Converter接口