`

jBPM(十七): popJbpmConfiguration的错误理解及纠正

阅读更多

     有几天没写jBPM方面的博客了, 这方面有些生疏了. 今天再回过头看时,发现这么个问题.JbpmContextFilter类里jbpmContext.close()方法执行时, 会调用JbpmConfiguration类里popJbpmConfiguration和popJbpmContext(jbpmContext)两个 方法. popJbpmContext后, jbpmContext会因再没有对其的引用而被垃圾回收掉, popJbpmConfiguration也会被"回收掉". 于是这样就有了一个不和谐的现象: 每一次请求来时都要新创建JbpmConfiguration实例和jbpmContext实例.想到Hibernate中创建一个 configuration实例是很耗资源的,这里也可类比地得出同样的结论(从执行代码上也能看出来,新建一个JbpmConfiguration实例 要做I/O操作并解析xml文件).这样每一个请求来都要新建JbpmConfiguration对象岂不荒唐!

    肯定是自己理解上出了偏差. 偏差出在了哪? 一番细想研究后, 找到了答案.

    首先来看创建一个JbpmConfiguration时做了什么. JbpmConfiguration的最初创建是在JbpmContextFilter中通 过"JbpmConfiguration.getInstance(jbpmConfigurationResource)"来完成的. 在getInstance里, 经过一番"努力"后生成一个JbpmConfiguration对象,随后把它放到了JbpmConfiguration类静态变量instances中 保存了下来.这样只人JVM不死, 新建的JbpmConfiguration实例就一直由于instances对其的引用而不会被回收.

    上面的分析确保了JbpmConfiguration实例不会被回收,那是什么导致了我上面的错误分析? 我们再看JbpmConfiguration类createJbpmContext方法做了什么. 在jBPM(十六): 记录JbpmContext实例的诞生 中 我们见证了以反射方式生成的jbpmContext实例,那么jbpmContext实例创建后createJbpmContext做什么? 我们看到调用了一句jbpmContextCreated(jbpmContext),把当前的JbpmConfiguration实例push到静态属 性jbpmConfigurationsStacks(是ThreadLocal类型的)里里stack中, 再把新生成的jbpmContext实例push到jbpmContextStacks(也是ThreadLocal类型)里.

    有了上面的push,再看在jbpmContext.close()时的pop操作.  对popJbpmContext(jbpmContext)的理解没错,popJbpmConfiguration的理解上出了问题, 是调用getJbpmConfigurationStack().remove了, 但这里的remove只是从jbpmConfigurationsStacks里的stack里给remove了, JVM里还是有的. 这里的remove是造成上面我理解出错的"元凶".

----------
    分析得知, JbpmConfiguration在jbpmContext.close()时没有给回收掉, 这样就不难理解JbpmContext.getCurrentJbpmContext()时调用 JbpmConfiguration.getCurrentJbpmConfiguration()就可以直接以stack.peek方式从 jbpmConfigurationsStacks里取出一个实例,也可以理解JbpmConfiguration.getInstance时不用再新建 一个JbpmConfiguration实例了.

2
0
分享到:
评论
1 楼 pure1202 2009-04-23  
哇   

相关推荐

    jbpm jbpm4.3.jar

    jbpm jbpm4.3.jar DDDDDDDD

    JBPM数据库表说明 jbpm 工作流 详细到每一个字段,不要下载分

    JBPM数据库表说明 2 1 流程配置类数据库表: 2 1.1 JBPM_PROCESSDEFINITION:流程模版表 2 1.2 JBPM_NODE:流程节点表 2 1.3 JBPM_TRANSITION:流程迁移表 3 1.4 JBPM_ACTION:流程动作表 4 1.5 JBPM_EVENT:...

    jBPM开发:配置EclipseIDE开发环境参考.pdf

    - 将`jbpm-jpdl-suite-3.2.3/designer/eclipse/plugins`目录下的文件及文件夹复制到一个指定的目录,例如`D:\Genuitec\MyPlugins\jbpm-jpdl-designer-3.1.5`。 - 修改`CreatePluginsConfig.java`中的路径为`"D:\\...

    jBPM开发:配置EclipseIDE开发环境.pdf

    从给定的文件信息中可以提取到一系列与配置Eclipse集成开发环境(IDE)以进行jBPM开发有关的知识点。jBPM是一个开源的业务流程管理套件(Business Process Management Suite, BPM Suite),它可以帮助开发者实现业务...

    JBPM4.4所需要的包.rar

    JBPM允许通过图形化的方式设计流程,使用BPMN(Business Process Model and Notation)标准,这使得非技术人员也能理解和修改流程。同时,它还支持工作流的复杂逻辑,如条件分支、循环、子流程和并行处理。 在实际...

    JBPM4运行时错误异常总结

    在使用JBPM4的过程中,可能会遇到各种运行时错误和异常,这些异常通常是由于配置问题、依赖冲突或者代码错误导致的。下面将详细讨论在JBPM4中遇到的一些常见异常及其解决方法。 1. `org.jbpm.api.JbpmException: ...

    【转载 见附件】纵观jBPM:从jBPM3到jBPM5以及Activiti5

    "【转载 见附件】纵观jBPM:从jBPM3到jBPM5以及Activiti5" 这个标题表明这是一个关于jBPM发展历程的综合分析,涵盖了从jBPM3到jBPM5的变迁,并且提到了Activiti5,这是一款与jBPM相关的流程管理框架。标题暗示了文章...

    JBPM5+Spring+Hibernate+MySQL 请假例子

    【JBPM5】 JBPM5是Business Process Management(业务流程管理)的开源框架,它提供了对企业级工作流和业务流程的全面支持。JBPM5允许开发者定义、执行和监控复杂的业务流程,通过图形化的流程设计工具,可以方便地...

    jbpm6:将 jBPM 6 嵌入到 Java EE 应用程序中

    关于: - jBPM 6.2.0.Final:工作流引擎 - Java EE 6.0 环境 - JBoss AS 7.1.1 - JPA 2.0(jBPM 持久性依赖) - CDI 1.0(jBPM 与 CDI 集成的容器环境) - JTA 1.1(容器环境)用于 jBPM 事务)- H2 数据库(嵌入在...

    jbpm4jbpm5

    jbpm4jbpm5是关于jbpm流程管理框架的专题,涵盖了jbpm4和jbpm5两个主要版本。jbpm是一个开源的工作流管理系统,用于帮助开发者实现业务流程自动化。以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. *...

    纵观jBPM:从jBPM3到jBPM5以及Activiti5.doc

    jBPM3是一个早期版本,提供了基于Eclipse的流程设计器和用于监控流程实例及任务的Web控制台,流程定义语言为jPDL。然而,随着jBPM创始人Tom Baeyens离开JBoss,jBPM5的开发方向发生了转变,它完全放弃了jBPM4的基础...

    JBPM工作原理及表结构详解

    JBPM(Java Business Process Management)是一款开源的工作流管理系统,它提供了强大的业务流程建模、执行和监控能力。本文将深入探讨JBPM的工作原理、表结构及其在实际操作中的应用。 1. **JBPM特色** - **灵活...

    揭秘jbpm流程引擎内核设计思想及构架.doc

    "揭秘jbpm流程引擎内核设计思想及构架" jbpm流程引擎内核是指流程引擎中最基本的对象和服务,以及用于解决流程运行问题的调度机制和执行机制。它是流程引擎的灵魂,掌握了流程引擎内核的设计思想和结构,才能真正...

    jbpm简介\jbpm简介

    ### jBPM简介与关键技术知识点 #### 一、jBPM概述 jBPM是一个开源的、纯Java的、轻量级的商业流程管理(Business Process Management, BPM)工作流引擎。它支持多种可执行流程语言,并且可以在任何JavaEE应用...

    jBPM(八): 也说jBPM + Tomcat + MySQL

    **正文** 本文主要探讨的是如何将...理解这些组件的作用和交互对于成功部署和运行基于jBPM的业务流程管理系统至关重要。在实践中,还需要遵循详细的配置指南,以确保所有依赖项都得到满足,从而实现无缝的流程管理。

    jBPM4.4+ssh 整合配置及完整实例

    **jBPM4.4与SSH整合配置及完整实例详解** jBPM(Java Business Process Management)是一款开源的工作流管理系统,主要用于处理业务流程自动化。在本实例中,我们将讨论如何将jBPM 4.4版本与SSH(Spring、Struts、...

    jBPM3.2.rar_JBPM3.2_jbpm_jbpm 3.2_jbpm3_jbpm3.2教程

    总的来说,jbPM 3.2是一个强大的工作流管理系统,通过深入理解和实践,开发者可以构建出高效、灵活的业务流程,提高企业的业务自动化水平。希望这份知识总结能对你在jbPM的学习和使用上提供帮助。

    jbpm数据库表结构

    JBPM的设计旨在简化复杂的业务流程,使得非技术人员也能够理解和维护这些流程。本文将深入探讨JBPM的核心组成部分之一——数据库表结构。 #### 二、核心表介绍 JBPM的核心表结构覆盖了从流程定义到执行过程中的...

    JBPM修改数据库教程以及实例

    【JBPM修改数据库教程及实例】 JBPM,全称Java Business Process Management,是一个开源的工作流管理系统,用于管理和执行业务流程。在JBPM6中,默认使用H2内存数据库进行存储,但实际生产环境中,我们通常会选择...

    jbpm 入门及帮助文档

    1. **jBPM架构**:理解jBPM的各个组件,如流程引擎、任务服务、知识服务等,以及它们之间的交互。 2. **流程建模**:学习BPMN(Business Process Model and Notation)语言,用于绘制和描述业务流程。 3. **部署与...

Global site tag (gtag.js) - Google Analytics