关于jBPM流程定义的删除

客户提出一个需求,流程流转到某个节点后,发现需要对流程定义做一点修改,可能是修改处理人,或者节点名称/描述,或者修改某个属性(自定义),但是又不会对流程的结构做变动,能否直接修改流程定义,并让它会这一版本下的流程实例生效呢?我编写测试用例的时候同时发现了几个有趣的问题:
1 能否删除某个中间版本的流程定义,能否添加某个中间版本的流程定义
2 能否删除流程定义但保留流程实例
3 能否update流程定义
now带着问题,let's go!
一般删除流程定义代码如下:
		try {
ProcessDefinition pd = getDefinition(procName, version,jbpm);
if(pd!=null){// throw new Exception("Process not found!");
GraphSession graphSession = jbpm.getGraphSession();
graphSession.deleteProcessDefinition(pd.getId());
}
}finally{
closeContext();
}

这一代码可以删除中间版本的流程定义,删除后可以添加中间版本的流程定义.但是,查看GraphSession的删除代码,会发现在删除流程定义前会自动删除属于该定义的所有流程实例.
  public void deleteProcessDefinition(ProcessDefinition processDefinition) {
if (processDefinition==null) throw new JbpmException("processDefinition is null in JbpmSession.deleteProcessDefinition()");
try {
// delete all the process instances of this definition
List processInstances = findProcessInstances(processDefinition.getId());
if (processInstances!=null) {
Iterator iter = processInstances.iterator();
while (iter.hasNext()) {
deleteProcessInstance((ProcessInstance) iter.next());
}
}

// then delete the process definition
session.delete(processDefinition);

} catch (Exception e) {
log.error(e);
jbpmSession.handleException();
throw new JbpmException("couldn't delete process definition '" + processDefinition.getId() + "'", e);
}
}

由于jBPM的流程实例表定义的关联流程定义表的外键,所以无法自己编程删除流程定义而不删除流程实例,这样会报错.同样的,流程定义表和节点表也有外键关联,不能采用update的方法试图更新流程定义.
这样是否就无法"更新"流程定义了呢,不是,如果你的修改不涉及jBPM的节点,连接和变量等关键数据(因为这些数据都解析后保存到数据库中),如果你的修改只涉及一些"非关键"的属性甚至自定义属性时,可以读取附件表的processdefinition.xml附件并修改(附件的获取可以参照我的另外一篇文章[url]http://shappy1978.iteye.com/blog/422054[/url]),如果你的修改不遵守前面说的前提,那么流程流转后则可能带来一些不可预料的后果.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值