`
xyz20003
  • 浏览: 293262 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

寻求重现jbpm4.3中executionId映射错误的场景

阅读更多

目前测试的结果是hibernate-3.2.1.ga以及之前的版本下,都会出现dbid和id混淆的问题

hibernate-3.2.2.ga以及之后的版本下就不存在问题了。


自从研究jbpm4以后,经常碰到一个莫名其妙的问题,问题描述起来很简单,就是调用executionService.findExecutionById()时,执行的sql语句应该是
select * from JBPM4_EXECUTION where id_=?

但很多人确说,他们的环境里,实际执行的sql是
select * from JBPM4_EXECUTION where dbid_=?

实际上JBPM4_EXECUTION表的主键是dbid_,id_只是一个拥有唯一索引的列。在jbpm4.execution.hbm.xml中,写明了映射的sql语句是
  <query name="findExecutionById">
    <![CDATA[
     select execution
     from org.jbpm.pvm.internal.model.ExecutionImpl as execution
     where execution.id = :id
    ]]>
  </query>

本来不可能出现的问题,一而再,再而三的被人遇到,就说明这是个大问题了,可惜的是,虽然这个问题被很多人碰到,但是直到现在也没人可以为我提供一个可以重现问题场景的testcase。对自己问题描述的最清楚的人也只是说自己用了spring和jbpm4整合,其他就什么都没有了。

因此我诚挚的向遇到此类问题的人征询测试场景,附件中提供了一个配置好的spring整合jbpm4的测试用例,希望有人能够在此基础上重现这个问题。多谢了。

目前在杭州做项目,如果离杭州这边近的同志遇到这类问题,请直接call me,周六日我可以直接跑过去调试。再次多谢。
分享到:
评论
6 楼 xyz20003 2010-04-27  
多谢xinjunhu澄清了这个问题,这个问题终于算告一段落了,以后再有人遇到这个问题,我会建议他使用jbpm4自带的hibernate3.jar的,多谢。
5 楼 xijunhu 2010-04-27  
问题解决了
果然是hibernate的问题。
我先导入我工程项目的包,然后导入jbpm4下的包,就有这个问题,如果我先导入jbpm4下的包,再导入工程下的包就有问题,查了一下原来是hibernate的问题,用jbpm4下的hibernate包没有这个问题,用了hibernate3.jar这个包就会有这个问题。
谢谢xyz20003
4 楼 xyz20003 2010-04-27  
使用xinjunhu提供的代码进行测试,依然没有出现问题。修整后的测试用例如下。

再次呼吁:
如果大家不会用maven2,或者不愿意在以提供的maven2项目上重现场景,那么请提供一个完整的,包含配置,包含依赖信息的,可以重现错误场景的项目,如果使用了外部数据库,请提供外部数据库的配置以及对应版本号。谢谢。
package test;

import org.springframework.context.support.*;
import junit.framework.*;
import org.jbpm.api.*;
import org.jbpm.api.task.*;
import java.util.*;

public class JbpmTest extends TestCase {


    public void testJbpm() {
        flowStart("Lingo", "dbid");
    }

    public void flowStart(String userId,String flowId){
        ClassPathXmlApplicationContext applicationContext
            = new ClassPathXmlApplicationContext("applicationContext.xml");
        applicationContext.start();

        ProcessEngine processEngine = (ProcessEngine)applicationContext.getBean("processEngine");
        RepositoryService repositoryService = processEngine.getRepositoryService();

        String deploymentDbid = repositoryService.createDeployment()
                                                 .addResourceFromClasspath("jpdl/dbid.jpdl.xml")
                                                 .deploy();
        ExecutionService executionService = processEngine.getExecutionService();

        ProcessInstance processInstance = executionService.startProcessInstanceByKey(flowId);

        TaskService taskService = processEngine.getTaskService();
        String id = processInstance.getId();
        List<Task> taskList = taskService.findPersonalTasks(userId);
        Task task = taskList.get(0);

        taskService.completeTask(task.getId());

        Execution execution = executionService.findExecutionById(task.getExecutionId());
        assertNull(execution);
    }
}


3 楼 xyz20003 2010-04-27  
多谢,我这就测试一下。
2 楼 xijunhu 2010-04-27  
不好意思代码有点乱
public class JbpmTest{
	public static void main(String[] args)  {
		JbpmTest test = new JbpmTest();
		// 启动流程
		test.flowStart("1","leave","0002");
        
    }
// 发起流程
public void flowStart(String userId,String flowId,String getvalue){
		 ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
	        applicationContext.start();
	        
	        ProcessEngine processEngine = (ProcessEngine)applicationContext.getBean("processEngine");
	        ExecutionService executionService = processEngine.getExecutionService();
	        
	    ProcessInstance processInstance = executionService.startProcessInstanceByKey(flowId);

	    TaskService taskService = processEngine.getTaskService();
	    String id = processInstance.getId();
	    List<Task> taskList = taskService.findPersonalTasks("johndoe");
	    Task task = taskList.get(0);
	    
        taskService.completeTask(task.getId());

        Execution execution = executionService.findExecutionById(task.getExecutionId());

	   
	}


配置文件差不多。
1 楼 xijunhu 2010-04-27  
我想应该跟我写的测试类有关系,发给你看看
public class JbpmTest{
	public static void main(String[] args)  {
		JbpmTest test = new JbpmTest();
		// 启动流程
		test.flowStart("1","leave","0002");
        
    }
// 发起流程
	public void flowStart(String userId,String flowId,String getvalue){
		 ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
	        applicationContext.start();
	      ProcessEngine processEngine = (ProcessEngine)applicationContext.getBean("processEngine");
		Map<String, Object> variables = new HashMap<String, Object>();
		processEngine = new Configuration().buildProcessEngine();
		ExecutionService executionService = processEngine.getExecutionService();
		RepositoryService repositoryService=processEngine.getRepositoryService();
	    ProcessInstance processInstance = executionService.startProcessInstanceByKey(flowId, variables);

	    TaskService taskService = processEngine.getTaskService();
	    String id = processInstance.getId();
	    List<Task> taskList = taskService.findPersonalTasks("johndoe");
	    Task task = taskList.get(0);
	    
        
        Execution execution = executionService.findExecutionById(task.getExecutionId());

	   
	}
}

相关推荐

    SSH+JBPM4.3的整合 JBPM4.3

    SSH+JBPM4.3的整合是企业级应用开发中的一种常见组合,SSH指的是Spring、Struts和Hibernate这三个开源框架的集成,而JBPM4.3则是一个强大的工作流管理系统,用于实现业务流程自动化。这篇内容将深入探讨这两个技术...

    开源工具 jbpm4.3

    **jbpm4.3:开启开源工作流新篇章** jbpm4.3是一个强大的开源工作流管理系统,它允许开发者和业务分析师...无论是在中小型企业还是大型组织中,jbpm4.3都能发挥出其强大的功能,助力企业优化业务流程,提升运营效率。

    JBPM4.3培训学习视频, 包含了JBPM4.3的eclipse插件

    【JBPM4.3培训学习视频】是一套针对初学者设计的教程,旨在...通过这套全面的教程,学习者不仅能掌握JBPM4.3的基本操作,还能了解工作流管理系统在实际业务场景中的应用,为后续的进阶学习和实际项目开发打下坚实基础。

    jbpm4.3工作流程管理例子

    在这个"jbpm4.3工作流程管理例子"中,我们将深入探讨jbpm4.3的核心特性和如何利用它来构建实际的工作流程应用。 一、jbpm4.3核心特性 1. 工作流引擎:jbpm4.3提供了强大的工作流引擎,可以执行基于流程定义的业务...

    jbpm4.3与spring整合

    ### jbpm4.3与Spring框架的整合指南 在企业级应用开发中,流程管理引擎JBPM(JBoss Business Process Management)与Spring框架的结合使用是常见的一种技术方案。JBPM是一个灵活、强大的业务流程管理工具,而Spring...

    jbpm4.3 中文文档

    4. **规则集成**:jbpm4.3集成了Drools规则引擎,允许在流程中嵌入决策逻辑。通过Drools,开发者可以编写复杂的业务规则,并在流程执行时动态应用这些规则。 5. **事件处理**:系统能够监听并响应各种事件,如流程...

    JBPM4.3中文 用户手册

    根据提供的文件信息,可以归纳出以下关于JBPM 4.3中文用户手册的相关知识点: ### JBPM 4.3 概述 - **JBPM**(JBoss Business Process Management)是一个开源的工作流引擎,用于创建、管理和执行业务流程。 - **...

    jbpm4.3视频教程+代码

    在这个教程中,我们将探讨Jbpm4.3版本中的核心概念、特性以及如何通过实例来理解和应用它们。 首先,视频教程可能涵盖以下几个关键点: 1. **Jbpm介绍**:介绍Jbpm的起源、目标和在业务流程管理(BPM)领域的地位,...

    jBPM4.3.rar_JBPM4.3

    jbPM 4.3 可以无缝集成到其他Java EE应用中,例如EJB、JMS、JPA和Spring框架。此外,它还支持与外部系统(如ERP、CRM)的集成,通过服务代理(Service Task)实现服务调用。 **9. 持久化机制** jbPM 4.3 使用JPA...

    jbpm4.3中文开发指南

    通过阅读《jbpm4.3中文开发指南》,开发者不仅能了解JBPM4.3的基础知识,还能学习到如何在实际项目中部署和使用该框架。无论是新手还是经验丰富的开发者,都能从中受益,提升业务流程管理的能力。在实践中,不断探索...

    jbpm jbpm4 jbpm4.3 工作流

    在《jbpm jbpm4 jbpm4.3 工作流》这本书中,作者可能会详细讲解上述知识点,并通过实例演示如何使用jbpm4.3进行流程设计、部署和运行。这本书对于学习和理解jbpm4.3的工作流管理理念和技术是极有帮助的,尤其适合IT...

    jbpm jbpm4.3.jar

    jbpm jbpm4.3.jar DDDDDDDD

    jbpm4.3问题解决

    本篇主要针对jbpm4.3使用过程中遇到的问题及其解决方法进行详细阐述。 首先,我们来看"jbpm4_3表结构和表字段说明 - gamestart104的专栏 - 博客频道 - CSDN_NET.htm"这个文件,这通常包含了jbpm4.3在数据库中使用的...

    jbpm4.3环境搭建

    【jbpm4.3环境搭建】涉及的知识点主要包括jbpm工作流引擎的版本管理、集成环境的构建、软件依赖配置以及数据库的连接设置。以下是详细的内容: 1. **jbpm4.3**:jbpm(Java Business Process Management)是一个...

    jbpm4.3、ssh环境搭建

    本文将详细介绍如何在开发环境中安装并配置jBPM4.3以及SSH (Struts + Spring + Hibernate)框架。 #### 二、jBPM基础知识 在深入讨论环境搭建之前,我们需要先了解一些基础知识: 1. **UML 2.0 活动图**:jBPM采用...

    JBPM4.3-例子(简单使用)

    在JBPM4.3版本中,它提供了一系列增强的功能和优化,使得开发者能够更高效地设计、执行和监控复杂的业务流程。在这个例子中,我们将深入探讨JBPM4.3的简单使用,特别是通过一个名为“leave_web”的Web应用程序来展示...

    jbpm4.3所需jar包

    **jbpm4.3所需jar包** JBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于业务流程的建模、执行和管理。在JBPM 4.3版本中,为了实现完整功能,需要一系列的jar包来支持其运行环境。...

    jBPM4.3用户指南

    在jBPM4.3中,用户可以利用jPDL(jBPM Process Definition Language)来描述流程。jPDL是一种XML方言,用于定义工作流的结构和行为。它支持各种流程元素,如任务、决策、事件和子流程等。通过持久执行模式,流程实例...

    jbpm4.3 - demo

    【jbpm4.3 - demo】是一个针对jbpm4.3版本的工作流示例项目,旨在帮助学习者理解和掌握jbpm工作流引擎的使用。jbPM(Java Business Process Management)是一个开源的企业级业务流程管理系统,它允许开发者设计、...

Global site tag (gtag.js) - Google Analytics