`
shappy1978
  • 浏览: 704512 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于jBPM流程定义的删除

    博客分类:
  • 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附件并修改(附件的获取可以参照我的另外一篇文章http://shappy1978.iteye.com/blog/422054),如果你的修改不遵守前面说的前提,那么流程流转后则可能带来一些不可预料的后果.
分享到:
评论

相关推荐

    JBPM流程引擎资料

    文档《JBPM流程引擎资料》详细介绍了如何利用JBPM开发流程应用,涵盖了从框架构造到节点处理的方方面面。 首先,文档提到了jBPM的基本概念。jBPM是一个轻量级流程引擎,它允许开发者以模块化的方式管理业务流程。...

    jbpm4.4 在线设计流程图 ext + raphael

    XML文件是jbpm4.4的标准格式,可以方便地在不同的系统之间共享和迁移流程定义。 另一方面,jbpm4.4也支持导入XML文件来恢复已有的流程设计。通过此功能,团队成员可以方便地协作开发,或者在升级或调试流程时恢复到...

    JBPM Web流程设计器

    【JBPM Web流程设计器】是一种基于Web的工具,它允许用户设计、管理和执行业务流程,类似于Eclipse中的jbpm插件。这个设计器采用JavaScript(js)和ExtJS库来构建,提供了一个直观的图形化界面,使得非技术人员也能...

    Jbpm4常用操作.doc

    需要注意的是,Jbpm4不允许直接根据流程定义的ID来删除流程定义,因为还要删除其它配置数据。 3. 获取全部流程定义 获取全部流程定义是将所有已部署的流程定义从Jbpm4服务器中获取。可以使用...

    JBPM4介绍开发步骤简介

    1. **RepositoryService**:流程资源服务接口,用于管理流程定义的生命周期,包括部署、查询和删除流程定义。 2. **ExecutionService**:流程执行服务接口,负责启动、推进流程实例,以及设置流程变量等操作。 3. ...

    jbpm4 中文文档教程

    - 删除流程定义:`repositoryService.deleteDeploymentCascade(deploymentId);` - `deploymentId`为流程定义部署时得到的ID。 2. **ExecutionService**:用于操作流程实例。 - 启动流程实例:`executionService....

    jbpm学习笔记jbpm学习笔记

    在本篇jbpm学习笔记中,我们将深入探讨如何安装jbpm插件,配置运行环境,发布流程定义以及查看流程定义。 首先,下载jbpm的最新版本可以从官方指定的源获取,例如在SourceForge上...

    Jbpm4提一个web项目

    开发者可以通过研究这些源码,了解如何整合JBPM4与web应用,实现流程定义、发布、查看和删除等功能。 总结来说,JBPM4提供了一套强大的工具,用于管理和执行业务流程。在"Jbpm4Web"项目中,我们可以看到如何将这些...

    jbpm数据库表结构详解

    1. **JBPM4_DEPLOYMENT**:这是流程定义表,记录了部署到jbpm中的所有流程定义。DBID字段作为主键标识每个流程模版,NAME_CLOB字段存储流程模版的名称,TIMESTAMP字段记录部署的时间戳,STATE字段表示流程模版的可用...

    jbpm4.3学习笔记及请假流程代码

    4. **删除流程**:如果需要移除不再使用的流程定义,可以通过管理工具进行删除,但这会同时删除所有相关的流程实例。 ### 管理流程实例 1. **启动流程**:根据已部署的流程定义启动新的实例,可以设置初始参数和...

    jbpm开发实例详解

    jbpm实例的开发涉及流程定义、数据库配置、事务管理等多个方面,需要对Java、Eclipse插件、数据库管理和事务处理有一定的了解。通过实践,你可以更好地掌握jbpm的使用,从而在项目中实现灵活、高效的工作流管理。

    jbpm4.4基本语法

    你可以通过 ProcessEngine 获取 RepositoryService,然后使用其方法进行流程资源的管理,例如部署新的流程定义、查看已部署的流程或者删除不再需要的流程定义。 3. **ExecutionService对象**:ExecutionService ...

    jbpm4.4+servlet

    - **流程定义**: jbpm使用BPMN(Business Process Model and Notation)2.0标准进行流程定义,它是一种图形化语言,用于描述业务流程的逻辑。 - **流程实例**: 每个流程定义可以启动多个实例,每个实例代表一次...

    jbpm4服务接口方法汇总

    - 删除流程定义: - 使用`deleteDeployment`方法直接删除指定的部署ID: ```java reporsityService.deleteDeployment("deploymentId"); ``` - 或者使用带有级联选项的删除方法,确保所有相关联的实体都被清除...

    jbpm4web-JBPM4的一个web版本的Demo

    这个Demo涵盖了业务流程的创建、发起、驳回和删除等关键操作,为初学者提供了一个实践平台。 1. **流程设计**: 在jbpm4web中,你可以通过图形化的流程建模工具设计业务流程。这些工具通常支持BPMN(Business ...

    JBPM4之基础学习及接口

    通过RepositoryService,可以发布流程定义、删除流程定义、查看流程定义等。 发布流程定义的示例代码如下: ```java repositoryService.createDeployment().addResourceFromClasspath("demo.jpdl.xml").deploy(); `...

    MyEclipse 10 JBPM 配置

    3. 编写Java代码实现业务逻辑,与流程定义进行交互。 4. 运行和调试流程,观察流程实例的执行情况。 5. 利用JBPM提供的监控和管理工具,查看流程实例的状态,进行性能分析和优化。 通过以上步骤,你已经在MyEclipse...

    jbpm 4.3 pvm的使用

    在JBPM 4.3版本中,PVM (Process Virtual Machine) 是其核心组件之一,负责执行流程定义并管理流程实例的状态变迁。 #### 二、获取DbSession和TaskImpl 在JBPM中,`DbSession` 和 `TaskImpl` 都是非常重要的概念。...

    JBPM视屏教程共9节 jBPM 4视频教程07组织机构

    在jBPM 4的这一节教程中,可能涵盖了如何创建和管理组织单元,添加和删除用户,分配和调整角色,以及如何将这些组织结构应用到工作流程实例中。这包括使用jBPM提供的工具如Guvnor进行图形化的组织机构设置,以及通过...

Global site tag (gtag.js) - Google Analytics