`
keller
  • 浏览: 48952 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JBPM源码分析(一)---数据库表主键ID的产生机制

阅读更多

        JBPM数据库中每一个表都有一个主键-IDLong类型)。这个ID是可以由用户自己产生,也可以由JBPM产生。这个数值在所有表的ID中是唯一的。用户通过设定jbpm.id.generator属性来设定id产生的类。

    (一)JBPM ID生成基本原理和函数

        JBPMID产生的基本原理是:用表JBPM_SEQUENCEBLOCK存储当前可用的ID值,JBPM需要使用ID时,从数据库中取得这个ID,然后增加一定的数量作为当前可用ID值,并存储在数据库中。JBPMID可以用于服务器集群的情况。hibernate中产生ID的函数IncrementGenerator,原理与JBPM产生ID相似,但不能应用到集群的情况。

        JBPM_SEQUENCEBLOCK表有两个字段IDNextID,前者为主键,表示当前节点在集群中的ID号码,后者为当前节点可以使用数据段的最小数。表由类org.jbpm.persistence.hibernate.SequenceBolck代表,org.jbpm.persistence.hibernate.SequenceBolckIdGenerator维护。

SequenceBolckIdGenerator主要函数:

        (1)   public SequenceBlockIdGenerator(JbpmConfiguration jbpmConfiguration)

初始化,包括初始化nodeId blockSize变量。nodeId指明当前的节点在集群中的Id号(0-65535),用户可以通过jbpm.id.nodeId设定,缺省值是0BlockSize指明当前节点使用长整形数段的一个数据块大小,用户可以通过jbpm.id.bolckSize设定,缺省值是100

        (2)  public long getNextId() //得到当前可用IDJBPM使用它得到ID

                {

                return getNextId(sessionFactory, nodeId, blockSize);

                  }

    (3public static synchronized long getNextId(SessionFactory sessionFactory,

                                            long nodeId, long blockSize)

    最重要的函数,用于计算当前可用ID

    (二)ID产生算法

    基本思路:将1Long.MaxValue范围内数,按大小blockSize*MaxNodes分段,然后再将每一段按blockSize大小分成MaxNodes块,各节点按照节点号分块使用,如节点号为0的只能使用第一块,节点号为1的使用第二块,依次类推。MaxNodes为当前集群中的节点总数,为65535

取值算法:

        (1)       取出节点当前可以使用数块的首数(块的最小数);

        (2)       首数+blockSize×NodeId(节点号码,065535)为当前可以使用的IdnextId);

        (3)       nextId+blockSize-1为当前可以使用的最后一个IdlastId

        (4)       调用getNextId()函数时,如果nextId<=lastId,则返回nextId,然后将nextId++;否则取出下一数据块进行13的计算。

    说明:

        (1)       读取一次数据库,可以使用blockSizeId,不用每次使用ID都读取一次数据库。

        (2)       表的NextID字段存储的是当前可使用块而不是使用过块的首数。每个节点使用块的首数按节点号码分别存储。

        (3)       对于每一个数块,每个节点只使用其中一部分,范围是(首数+blockSize×NodeId)-(首数+blockSize×(NodeId1)-1),从而保证了每个节点使用的ID值在数据库中是唯一的。

    (三)数据库连接Session

    为了保证产生ID的唯一性,JBPM要求对表JBPM_SEQUENCEBLOCK进行操作的数据库Session必须是独立的,不能用于其它的数据库操作。如果JBPM使用数据库连接池,则必须要设定jbpm.id.generator.configuration属性,提供进行数据库直接连接的hibernate配置文件。默认情况下,JBPM使用一个全局静态Session进行除JBPM_SEQUENCEBLOCK以外表的操作,而对JBPM_SEQUENCEBLOCK表进行操作的Session是在类SequenceBolckIdGenerator初始化时临时建立的.

分享到:
评论

相关推荐

    jbpm数据库表字段详解

    JBPM_PROCESSDEFINITION表是jbpm数据库的核心表之一,它存储了流程定义的信息。该表的字段包括: * ID_:流程定义的唯一标识 * NAME_:流程定义的名称 * VERSION_:流程定义的版本号 * ISTERMINATIONIMPLICIT_:...

    jBPM源码分析jBPM源码分析

    jBPM源码分析jBPM源码分析jBPM源码分析jBPM源码分析

    jbpm-jpdl-suite-3.2.3安装配置.doc

    - 创建一个名为jbpm的数据库,这将是jbpm存储流程数据的地方。 - 修改jbpm-jpdl-3.2.3\db目录下的jbpm.jpdl.mysql.sql文件,为每个SQL语句末尾添加分号,以便正确执行脚本。 4. **jbpm-jpdl-suite-3.2.3部署**: ...

    jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)

    jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载

    jbpm-jpdl-suite-3.2.3的安装配置

    2. 根据你的数据库环境,运行db目录下的SQL脚本来创建jBPM所需的表。 3. 修改config目录下的配置文件,如hibernate.cfg.xml,配置数据库连接参数。 4. 如果需要自定义流程,可以在Eclipse中安装jbpm-jpdl-designer-...

    jbpm数据库表介绍

    该表通过 dbid 字段关联到 jbpm4_deployment 表,並且提供了主键生成机制。 jbpm4_property jbpm4_property 表用于为运行时需要持久化的对象生成 dbid,其记录当前所有对象实例的最大值,每次需要生成 dbid 时,...

    jbpm-starters-kit-3.1.2.part2.rar

    jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,共两卷

    JBPM-----PPT

    - **持久化机制**:介绍JBPM如何利用数据库存储流程实例和变量,确保数据安全和流程恢复。 4. **平台特性:JBPM_(4)_Platform.ppt** - **jbpm-gwt-console**:一个基于GWT的Web管理控制台,用于监控和管理流程...

    jbpm-jpdl-designer-site-3.1.7.zip

    jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip

    jbpm-workitems-5.1.0.Final-sources.jar

    jbpm-workitems-5.1.0.Final-sources.jar jbpm5 源码

    jbpm-jpdl-suite-3.2.3.zip

    jbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3....

    JBPM源码分析

    - **数据库映射**:这些命令类在数据库中被映射到同一个表`JBPM_MESSAGE`,但通过`CLASS_`字段区分不同的命令类型。 - **`CommandExecutorThread`**:这是一个专门用于执行命令的线程,确保命令能够异步处理。 ####...

    jbpm-jpdl-suite-3.2.GA.zip-6

    jbpm-jpdl-suite-3.2.GA.zip

    jBPM4-app-forth4 源码实例 jbpm4

    3. **实体与持久化**:分析实体类和数据库表结构,理解jBPM4如何存储流程实例、任务和变量。 4. **任务处理**:研究任务服务接口(TaskService)的使用,掌握如何分配、领取和完成任务。 5. **监听器和回调**:查找...

    jbpm5.2学习1------安装与配置

    **jbpm5.2学习1——安装与配置** jbpm(Java Business Process Management)是一款开源的工作流管理系统,它提供了一套完整的...同时,由于jbpm提供了源码,开发者可以深入研究其内部机制,定制更适合自身需求的功能。

    jbpm-4.3-src.rar_bdf-jbpm4 src _jboss 4.3_jboss jbpm4.3_jbpm-4.3

    jbpm-4.3-src.rar_bdf-jbpm4 src _jboss 4.3_jboss jbpm4.3_jbpm-4.3 这个压缩包文件包含的是JBOSS jBPM4.3的源代码,这是一个用于业务流程管理(BPM)的开源框架。jBPM是一个强大的工具,它提供了流程定义、执行和...

    jbpm-bpmn2-5.1.0.Final.jar

    jbpm-bpmn2-5.1.0.Final.jar jbpm5

    jbpm-jpdl-designer-nodeps-3.1.4

    "jbpm-jpdl-designer-nodeps-3.1.4" 是一个针对Jbpm工作流管理系统中的JPDL设计工具的无依赖版本,主要用于创建和编辑JPDL(Jbpm Process Definition Language)文件。该资源包含了该工具的详细文档、许可证协议以及...

    jBPM4_app-first 视频 源码

    **jbPM4_app-first** 是一个基于 **jBPM4** 的应用程序示例,它提供了对业务流程管理(Business Process Management)的...此外,源码分析有助于加深对 jBPM4 内部机制的理解,为自定义扩展或解决特定问题提供参考。

Global site tag (gtag.js) - Google Analytics