`

jBPM学习笔记(更新中...)

    博客分类:
  • jBPM
阅读更多
[size=medium]★execution是一种类似有限状态机和UML状态图的东西, 用于在整个流程中流动, 将携带一些context信息, 比如当前节点.Transition通过使用take方法来将execution从一个节点传递到另一个节点.而当execution到达一个node之后, 将通过node的execute方法继续传递到下一个节点, 如果这个节点没有继续传递execution的话, 那么它将处于等待状态. 在开始节点将对新创建的execution进行初始化, 然后等待一个事件(或一个信号)来将其进行传递
★execution的传递过程是这样的:首先调用execution的event方法, 然后在event中找到leaving transition, 如果找到, 那么将通过调用transition的take方法将execution做为参数进行传递.到达一个node之后, 接着调用node的execute方法, 在execute中做相应的处理之后, 选择一个transition进入下一个node.
★action是用来在jbpm中插入业务逻辑的地方, 它一般都是跟一个event相关联, 最基本的event是node-leave和node-enter, 一般我们是在这里加入我们的业务逻辑
★可以将JbpmContext看成一个事务, 在流程运行过程中所需要的服务将包含在其中(这些服务在JbpmConfiguration中配置), 一般我们在执行完成之后将其关闭
★一般我们通过调用JbpmContext的loadXxxx方法取得的流程(任务)实例, 需要调用JbpmContext的save方法来做最后的保存, 但是如果是调用JbpmContext的xxxForUpdate方法来取得流程(任务)实例的话, 这不必调用jbpmContext.save方法, 这是因为xxxForUpdate方法将把这些实例添加到一个自动保存列表中, 这样在调用jbpmContext.close()方法的时候将自动被保存到数据库中.如loadProcessInstanceForUpdate方法:
public ProcessInstance loadProcessInstanceForUpdate(long processInstanceId) {
	ProcessInstance processInstance = getGraphSession().loadProcessInstance(processInstanceId);
	addAutoSaveProcessInstance(processInstance);
	return processInstance;
}

而在close的时候会调用autoSave方法, 其代码如下:
void autoSave() {
    if (autoSaveProcessInstances!=null) {
      Iterator iter = autoSaveProcessInstances.iterator();
      while (iter.hasNext()) {
        ProcessInstance processInstance = (ProcessInstance) iter.next();
        save(processInstance);
        iter.remove();
      }
    }
}

★在默认情况下, jbpm在第一次调用hibernate session的时候将开启一个事务, 在jbpmContext关闭的时候结束一个事务, 而结束一个事务是commit还是rollback取决于我们在关闭前是否调用了jbpmContext.setRollbackOnly()方法, 调用则rollback, 否则为commit.
★token表示exection的执行路径, 它是一个运行时概念, 其内部维护了一个对当前节点的引用, 当流程实例创建之后, taoken(这里它被成为rootToken)也相应的被创建
★图形化的流程做为一种需求沟通手段非常直观, 而所有的底层细节则需要通过action来实现, 它也是用来实现业务逻辑的地方
★流程中的所有节点不外乎有两种职责:执行指定的java代码, 传递execution
★decision node有两种判断方式, 一种是定义在流程定义文件中, 一种是通过插入的handler java代码来做判断. 在配置文件中的判断做法是在transition中添加condition元素, 然后在condition中通过使用el表达式或者beanshell脚本来作判断返回的boolean值. 在运行的时候遍历所有的transition的condition, 当碰到第一个transition中的condition返回true则将从该路径离开当前节点, 如果都为false, 那么将从默认的transition离开当前节点.还有一种方法就是通过decision的expression属性的返回结果来指定从哪个transition离开.
★一种替代decision node的方案, 如果需要在流程外部来做判断, 那么为还可以通过state节点来处理, 首先让exection进入state节点, 这样整个流程将处于等待状态, 然后在流程外部做完处理之后, 通过调用token.signal(xxx)或者taskInstance.signal(xxx)来让流程继续执行.
★使用普通node来模拟decision node, 这里涉及到定制node的用法, 其实也很简单, 就是在actionhandler实现类中除了处理逻辑之外, 还需要做的一件事就是传播execution. 比如类似这样的做法:
public class AmountUpdate implements ActionHandler {
  public void execute(ExecutionContext ctx) throws Exception {
    // business logic
    Float erpAmount = ...get amount from erp-system...;
    Float processAmount = (Float) ctx.getContextInstance().getVariable("amount");
    float result = erpAmount.floatValue() + processAmount.floatValue();
    ...update erp-system with the result...;
    
    // graph execution propagation
    if (result > 5000) {
      ctx.leaveNode(ctx, "big amounts");
    } else {
      ctx.leaveNode(ctx, "small amounts");
    }
  }
}

同样我们还可以定义自己的fork和join节点
★Superstate是用来对node进行分组的. 而且可以被嵌套使用, 一般在复杂的流程设计中会使用到(比如流程中的node有一定的层次关系), 其好处能对进入Superstate中的任意的一个node进行统一的控制(通过独有的两个事件superstate-enter and superstate-leave), 对于到达内部node的transition写法也引入了用于表示层次关系的"/"(下级node)和".."(上级node)
★在将任务分配给具体的执行人(actor)时, 可以针对某一个taskInstance写一个AssignmentHandler, 将taskInstance的actorId设置为执行人, 如果多个taskInstance都是同一个执行者的话, 那么可以考虑swimlane, swimlane相当于权限管理中的角色, 先将taskInstance跟swimlane绑定, 然后将actor跟swinlane绑定.
★除了可以将taskInstance跟一个人绑定之外(也就是所谓的push模式), 还可以同时跟多个人绑定(也就是所谓的pull模式), 然后由这些人自己来决定谁来负责处理该taskInstance.因此我们可以得出结论一个taskInstance只能由一个人来处理
★...

jbpm表结构说明
jbpm_variableaccess中存放的是子processstate节点中定义的变量引用设置
jbpm_node则是所有流程的所有节点
...
[/size]
2
1
分享到:
评论
4 楼 macrochen 2008-07-22  
引用
不知道JBPM的流程上下文是怎么做的处理?我对Shark引擎比较熟悉,在新建一个活动节点时,引擎就将流程的上下文拷贝一份给活动节点,在这个活动节点结束时就将自己的上下文与流程的上下文做一下同步

jbpm是通过token来处理上下文的, 它不会copy上一个流程的上下文, 只是会在流程中传递一个叫execution的东东, 它里面保存了一些上下文信息.同时jbpm还有一个jbpmcontext,它通过各种服务来完成对流程的控制
3 楼 macrochen 2008-07-22  
引用
楼主有没有对pvm做过研究?

还没呢
2 楼 netlynx206 2008-07-18  
不知道JBPM的流程上下文是怎么做的处理?我对Shark引擎比较熟悉,在新建一个活动节点时,引擎就将流程的上下文拷贝一份给活动节点,在这个活动节点结束时就将自己的上下文与流程的上下文做一下同步
1 楼 yuanqixun 2008-07-18  
楼主有没有对pvm做过研究?

相关推荐

    jbpm学习笔记.docx

    jbpm学习笔记主要涵盖了jbpm(Java Business Process Management)的多个方面,包括Signavio的使用和配置、jBPM数据库的安装、Graphical Process Designer(GPD)的安装以及jBPM在Eclipse环境中的配置。以下是这些...

    jbpm学习笔记jbpm学习笔记

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

    jBPM-jPDL学习笔记.zip

    通过阅读《jBPM-jPDL学习笔记.pdf》,你可以深入了解这些概念,并学会如何使用jPDL编写和部署流程定义,从而在实际项目中实现灵活、可扩展的业务流程管理。这份资料对于初学者来说是一份很好的入门指南,能够帮助...

    工作流引擎jbpm学习笔记

    工作流引擎jbpm学习笔记 jbpm是一个专业的工作流引擎,用于定义、管理和执行业务流程。它可以帮助我们简化工作流程的开发和维护,提高工作效率和可扩展性。 一、什么是公文流转? 公文流转是指公文在定义流转中的...

    JBPM4学习笔记.doc

    **JBPM4学习笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了业务...通过阅读“JBPM4学习笔记.doc”,可以深入学习这个系统,掌握如何利用它来设计、实现和管理企业的业务流程。

    jbpm学习笔记体会很深刻

    通过JBPM学习杂记,我们可以了解如何创建和配置这些元素,以及如何将它们连接起来形成一个完整的业务流程。 接着,我们需要了解jbpm的数据模型,包括实体类和持久化。jbpm的核心实体如ProcessInstance、Task、Job等...

    JBPM4.3 学习笔记

    文件"JBPM4学习笔记.doc"可能包含了博主在学习过程中整理的详细笔记,涵盖了上述所有知识点的实践经验和心得,对于理解JBPM4.3的使用和开发有着重要的参考价值。 总结,JBPM4.3的学习笔记涵盖了流程建模、执行、...

    JBPM3学习笔记

    **JBPM3学习笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了对业务流程的建模、部署、执行和监控的能力。在本文中,我们将深入探讨JBPM3的核心概念、功能和使用方法,以帮助...

    jbpm 4.4 学习笔记

    在本文档中,主要讨论的是jbpm 4.4 版本的学习笔记。作者通过实践学习并整理了关于jbpm的一些关键概念和操作。 首先,流程图是jbpm设计流程的核心,它包含了一系列的流程元素。在提到的订购流程中,主要包括以下...

    jbpm4.4学习笔记

    3 Jbpm4.4介绍 7 3.1工作流引擎 8 3.2jpdl 8 3.3数据库 8 3.3.1资源库和运行时表结构 8 3.3.2历史数据库表 9 3.3.3身份认证表 9 3.4jbpm.cfg.xml 9 3.5 jbpm.hibernate.cfg.xml 10 3.6logging.properties 10 4 准备...

    《jBPM学习笔记_框架设计简介》

    ### jBPM学习笔记_框架设计简介 #### JPDL与jBPM框架设计概述 jBPM(Java Business Process Model)是一种开源的工作流引擎,它提供了用于定义、执行和管理业务流程的功能。JPDL(jBPM Process Definition ...

    jBPM-jPDL学习笔记

    jBPM(Java Business Process Management)是一款开源的工作流管理系统,用于在Java应用程序中...深入学习和掌握jBPM-jPDL,能够提升开发者在企业级应用开发中的专业技能,对于构建高效、灵活的企业信息系统至关重要。

    jbpm-jpdl 学习笔记

    入门材料 jbpm-jpdl 学习笔记 jbpm-jpdl 学习笔记 jbpm-jpdl 学习笔记

    jbpm实战讲解.pdf

    #### 三、JBPM学习笔记系列 **1.1 Ant构建与数据库环境配置** - 重点介绍了如何使用Ant进行构建和部署,以及如何配置数据库环境,为后续的流程定义和执行打下基础。 **1.2 MyEclipse整合JBPM配置** - 讲述了...

    jBPM-jPDL学习笔记——流程设计与控制(转载)

    《jBPM-jPDL学习笔记——流程设计与控制》 在IT行业中,流程管理和自动化是企业提升效率的关键。jBPM(Java Business Process Management)是一个开源的工作流和业务流程管理套件,它允许开发者通过定义流程定义...

    JBPM4学习笔记

    【JBPM4学习笔记】 JBPM4是一款开源的工作流管理系统,它提供了强大的流程定义和执行能力,被广泛应用于企业的业务流程自动化。本学习笔记将深入探讨JBPM4的核心特性和使用方法,帮助读者掌握如何利用它来实现高效...

    jbpm学习资料,jbpm教程

    在jBPM-jPDL学习笔记中,你将了解到以下关键知识点: 1. **流程定义**:jPDL通过流程图中的节点(如开始节点、结束节点、任务节点、事件节点等)来描述流程的结构。这些节点之间的连线代表了流程的流转路径。 2. *...

    JBPM学习笔记

    ### JBPM学习笔记 #### 一、JBPM概述 JBPM是Java Business Process Management的缩写,即Java业务流程管理,这是一个开源的工作流框架。它不仅涵盖了传统的业务流程管理(BPM)、工作流管理和服务之间的协作,还...

    吉林大学Java工作流JBPM学习笔记

    在本篇吉林大学的学习笔记中,我们将聚焦于JBPM,这是一个广泛使用的开源Java工作流管理系统,它提供了一整套工具和服务来支持流程的建模、部署和执行。 JBPM是Business Process Management(业务流程管理)的缩写...

    jbpm3.1.4经典学习教程

    jbpm3.1.4学习教程中的"jbpm开发指南"会涵盖以下关键知识点: 1. **流程定义**:如何使用BPMN创建流程图,包括开始事件、结束事件、任务、网关、事件等元素的使用。 2. **实体与数据管理**:jbpm如何处理流程中的...

Global site tag (gtag.js) - Google Analytics