Activiti Flowable transient变量
Activiti Flowable transient变量
Activiti6 增加了瞬时变量( transient
变量)。接下来展示如何使用 Activiti6 提供的 transient
变量。
Activiti6 版本之前所有的变量都会持久化到数据库表( act_ru_variable 或者 act_hi_varinst ),变量存储于 act_hi_varinst 表前提是开启了历史数据的归档开关。瞬时变量使用起来跟持久化的变量一样一样的。唯一的区别是他不会持久化到数据库表。下面对瞬时变量进行一些说明:
瞬时变量可以存活下来知道下一步的等待状态,前提是流程实例的数据可以存储到数据库。
瞬态变量隐藏具有相同名称的持久性变量。
1.1 瞬时变量的操作
void setTransientVariable(String variableName, Object variableValue);
void setTransientVariableLocal(String variableName, Object variableValue);
void setTransientVariables(MaptransientVariables);
void setTransientVariablesLocal(MaptransientVariables);
Object getTransientVariable(String variableName);
Object getTransientVariableLocal(String variableName);
MapgetTransientVariables();
MapgetTransientVariablesLocal();
void removeTransientVariable(String variableName);
void removeTransientVariableLocal(String variableName);
接下来演示瞬时变量的使用过程,操作起来非常的简单。
首先定义一个流程文档(名称process.bpmn20.xml),该流程图如下所示:
部署流程文档如下代码所示:
public void addInputStreamTest() throws Exception {
//定义的文件信息的流读取
InputStream inputStream = DeploymentBuilderTest.class.getClassLoader().getResourceAsStream("com/shareniu/activiti6/transientvars/process.bpmn20.xml");
//流程定义的分类
String category="variabletypeTest";
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment().category(category).addInputStream("variabletype.bpmn", inputStream);
//部署
Deployment deploy = deploymentBuilder.deploy();
}
启动流程实例时,我们传递的变量是定期的变量。他们将保留和审核历史记录会保留,因为实在没有理由为什么这不应该是这样。
流程实例启动完毕之后,会首先执行‘execute HTTP call’,那么会立刻触发ExecuteHttpCallDelegate类中的逻辑,该类的定义如下所示:
public class ExecuteHttpCallDelegate implements JavaDelegate {
public void execute(DelegateExecution execution) {
execution.setTransientVariable("response", "分享牛(shareniu.com)");
execution.setTransientVariable("responseStatus",200);
}
}
上述的两个变量response和responseStatus都为瞬时变量。
接下来看一下ProcessResponseExecutionListener类的定义如下所示:
public class ProcessResponseExecutionListener implements ExecutionListener {
public void notify(DelegateExecution execution) {
Listlist=new ArrayList<>();
list.add("shareniu1");
list.add("shareniu2");
execution.setTransientVariable("searchResults",list );
}
}
Ok,上述工作完毕之后直接启动新的流程实例如下所示:
public void startProcessInstanceById() throws Exception{
runtimeService.startProcessInstanceById("transient-vars:1:37504");
}
act_ru_variable表的变化如下所示:
看到上图可知response、responseStatus这两个瞬时变量没有被存储,但是searchResults瞬时变量被存储了,那么问题来了,什么时候瞬时变量会转化为持久化变量呢?关于这一点可以参考随后的章节。
No Comments