技术开发 频道

java开源工作流(workflow)---jBPM学习心得总结

  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接口

0
相关文章