jbpm4 数据库结构关系图 JBPM数据库分析
- 格式:doc
- 大小:14.63 KB
- 文档页数:14
JBPM表关系说明1 流程配置类数据库表:1.1 JBPM_PROCESSDEFINITION:流程模版表1.2 JBPM_NODE:流程节点表1.3 JBPM_ TRANSITION:流程迁移表1.4 JBPM_ACTION:流程动作表1.5 JBPM_EVENT:流程事件表1.6 JBPM_DELEGATION:流程代理类表(用于实例化jbpm中的action类)1.7 JBPM_TASK:流程任务表1.8 JBPM_TASKCONTROLLER:流程任务控制器1.9 JBPM_VARIABLEACCESS:流程变量表1.10 JBPM_MODULEDEFINITION:流程模块定义表1.11JBPM_EXCEPTIONHANDLER:流程异常处理器表1.12 JBPM_DECISIONCONDITIONS:DECISION节点判断条件表1.13 JBPM_ SWIMLANE:DECISION节点判断条件表2 流程运行类数据库表:2.1 JBPM_PROCESSINSTANCE:流程实例表2.2 JBPM_TOKEN:流程TOKEN表2.3 JBPM_LOG:流程日志表2.4 JBPM_RUNTIMEACTION:流程实时ACTION表2.5 JBPM_VARIABLEINSTANCE:流程变量实例表2.6 JBPM_COMMENT:流程备注信息表2.7 JBPM_JOB:流程工作表2.9 JBPM_TOKENVARIABLEMAP:流程TOKEN变量MAP表2.10 JBPM_MODULEINSTANCE:流程模块实例表2.11 JBPM_BYTEARRAY:文件模块形式的流程变量实例表2.12 JBPM_BYTEBLOCK:3角色权限数据库表3.1 JBPM_ID_USER:用户表3.2 JBPM_ID_GROUP 用户组表3.3 JBPM_ID_MEMBERSHIP 用户成员表表现用户和组之间的多对多关系3.4 JBPM_TASKINSTANCE 任务实例3.5 JBPM_TASKACTORPOOL 用户行为汇总3.6 JBPM_POOLEDACTOR 汇集参与者表3.7 JBPM_ID_PERMISSIONS 用户权限表3.8 JBPM_SWIMLANEINSTANCE 泳道实例表。
jpbm4表结构
jpbm4表由5个字段组成,分别为Table_id,Title,Number,
Catg_id和Status。
Table_id字段:该字段的数据类型为int(10),
是jpbm4表的主键,不允许重复; Title字段:该字段的数据类型为varchar(200),用于存储主题的标题; Number字段:该字段的数据类
型为int(10),用于存储每个主题的参与人数; Catg_id字段:该字
段的数据类型为int(10),用于存储分类ID; Status字段:该字段的
数据类型为int(1),用于存储主题的状态,0代表正常,1代表已删除。
jpbm4表中的数据以Table_id为主键,Title,Number,Catg_id和Status作为次要字段,其中Table_id为主键,不允许重复,Title字
段用于存储主题的标题,Number字段用于存储每个主题的参与人数,Catg_id字段用于存储分类ID,Status字段用于存储主题的状态,例
如0代表正常,1代表已删除。
jpbm4表可以允许NULL值,但是Table_id字段不允许有NULL值,因
为它是jpbm4表的主键,所以必须保证数据唯一性。
此外,jpbm4表还
可以使用索引,以优化查询速度。
JBPM介绍及表结构说明概述:jBPM(JBoss Business Process Management业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。
jPDL是构建于jBPM框架上的流程语言之一。
在jPDL中提供了任务(tasks)、待处理状态(wait states)、计时器(timers)、自动处理(automated actions)…等术语,并通过图型化的流程定义,很直观地描述业务流程。
jPDL可以部署于Java语言的任何应用环境下,JavaSEApplication(Swing/SWT)、JavaEE Application(Application Server)jPDL分发包组成目前jPDL的最新版本是3.2.2,您可以在以下地址:/jpdl_downloads/获得官方下载包。
下载包分为两种,一种是标准包(jbpm-jpdl-3.2.2.zip)只有20M 左右;一种是套件包(jbpm-jpdl-suite-3.2.2.zip)将近80M。
两者最大的区别是套装包自带一个已经配置好的jboss服务,下载解压缩后,可直接运行。
jPDL的核心程序包(jbpm-jpdl.jar)它是一个典型的jar文件,它涵盖对流程定义和运行时流程实例上下文环境的操作API。
在最简化的业务流程样例中,jPDL将流程定义存储与XML格式的定义文件中,在运行时载入内存,在内存里记录完整的业务实例和执行过程的环境变量,并完成全部操作。
显然,在实际应用中,流程信息必须被持久化的存储于数据库中。
jPDL使用了Hibernate作为其对象持久化的API。
Graphical Process Designer插件(jbpm-jpdl-designer-3.1.2.zip)它是一个基于Eclipse的图型编辑插件。
使用它可以对业务流程进行可视化的定制,而无须手动编辑XML文件。
Jbpm数据库流程定义和流程执行都会持久化到数据库中,所以我们需要在数据库中创建所需的数据库表.共有18张表,分五个部分。
流程部署名称详情JBPM4_DEPLOYMENT流程定义表流程定义的部署记录。
发布一次流程后会添加一条记录,流程的具体属性存放在JBPM4_DEPLOYPROP中JBPM4_DEPLOYPROP流程定义属性表已部署的流程定义的具体属性。
发布一次流程后会添加多条记录,一条jbpm4_deployment记录需要对应4条jbpm4_deployprop记录,他们的key字段分别为langid(标识解析流程定义使用的jpdl的版本),pdid(流程定义的id),pdkey(流程的key,标识同一类流程),pdversion(流程的版本)JBPM4_LOB 存储表流程定义的相关资源。
部署一个流程时,此表中会添加多条记录,分别对应JPDL_XML ,图片, 用户代码JAVA 类等,它们以二进制的格式统一存储在此表中。
发布demo流程之后jbpm4_deployment新增一条记录jbpm4_deployprop新增三条记录jbpm4_LOB新增两条记录用户认证表JBPM实现的用户库比较简单,可以实现并扩展其相关接口,并进行认证库独立。
名称详情JBPM4_ID_GROUP组表用户组相关信息JBPM4_ID_MEMBERSHIP用户角色表用户组和用户的关系表JBPM4_ID_USER 用户表用户相关信息表流程实例运行相关表名称详情JBPM4_EXECUTION流程实例表记录流程实例运行必须的信息。
JBPM4_TASK任务表流程实例的任务信息。
存放需要人来完成的Activities,需要人来参与完成的Activity被称为Task。
JBPM4_PARTICIPATION 参与者表流程实例的任务参与人信息。
而具体的Participation既可以是单一用户,也可以是用户组JBPM4_V ARIABLE 上下文表传给流程实例的变量的相关信息。
PVM提供了一套和token类似的execution过程调度机制,通过对execution的完全操控,节点运行期行为有了无限的可能PVM的流程定义模型上图里的类全是接口。
位于最上层的是ObservableElement,其提供给流程元素以附加Event(事件)的能力。
在ObservableElementImpl里,它持有一个events的集合属性。
对于流程元素来说,典型的事件有:流程启动/结束,节点启动/结束和转移线执行(take)【在Event方法中定义】。
protected Map<String, EventImpl> events;EventImpl透过EventListenerReference实例的集合持有EventListener实例。
这样在引擎执行过程调度时,就非常容易地通过流程元素本身获取事件监听器并在相应的时候执行它们。
EventImpl.javaprotected List<EventListenerReference> listenerReferences;EventListenerReference.javaprotected EventListener eventListener;和传统的观察者模式一致,EventListener接口有且只有一个方法:/** listener to process execution events.** @author Tom Baeyens*/public interface EventListener extends Serializable {/** is invoked when an execution crosses the event on which this listener is registered */void notify(EventListenerExecution execution) throws Exception; }紧接着ObservableElement的是CompositeElement,其扩展了ObservableElement接口。
jBPM4.4一、什么是jBPMJBPM是一个扩展性很强的工作流系统,百分百用JAVA语言开发,持久层采用Hibernate实现,理论上说,只要Hibernate支持的数据库JBPM都支持。
同时它还能被部署在任何一款JAVA应用服务器上。
java Business Process Management :工作流,工作流引擎注:记得j小写,因为j代表java,与Log4j中j一样工作流管理系统不止一中,如还有Intaliol BPMS …但JBoss jBPM灵活性且扩展性高。
jBPM项目于2002.3由Tom Baeyens 发起,2003.12发布1.0版本,2004年10.18发布2.0,并在这天加入了JBOSS组织-→被RedHat公司二、能干什么提供工作流的实现,帮助更好的进行BPM三、jBPM有什么,简介jBPM的Service API 各种服务1:ProcessEngine:流程引擎。
并不负责具体的业务,而是用于获取各种Service。
2:RepositoryService:流程资源服务的接口,如流程定义发布、查询、删除等。
3:ExecutionService:用于操作流程实例的服务,可以进行流程实例发布、查询、流程推进、设置流程变量等操作。
4:TaskService:用于操作人工任务的服务,可以进行任务创建、查询、获取、提交完成、保存、删除等操作。
5:HistoryService:用于操作流程历史的服务,提供对流程历史库(就是已经完成的流程实例)的操作。
比如:历史流程实例,历史活动实例等。
6:IdentityService:用于操作用户、用户组以及成员关系的服务7:ManagementService:流程管理控制服务的接口,只提供异步工作(Job)相关的执行和查询操作。
四、Myeclipse8.5 搭配开发环境1.jbpm-4.4.zip 下载完2.myeclipse→help→Myeclipse Configuration Center →add…….3.找到\jbpm-4.4\install\src\gpd\jbpm-gpd-site.zip 安装这个插件4.记得不要联网安装,不要选source文件5.安装完后window→JBoss jBPM→runtime Location→add 添加jbpm的路径6.添加lib下所有jar包,如果你使用的是tomcat6.0则:要把Juel-api.jar ,juel-impl.jar,juel-engine.jar 拷到tomcat lib 下并把原来的el-api.jar删掉项目中就不要再导上面三个包五、修改配置文件1、将example中的下列配置文件拷贝到java项目的src目录下:jBPM.cfg.xml、jBPM.hibernate.cfg.xml、jBPM.mail.properties、jBPM.mail.templates.xml、process_forms.css2、在以上配置文件中的jBPM.hibernate.cfg.xml,实际上就是我们熟悉的hibernate.cfg.xml,这里,要修改为连接我们的数据库。
揭秘jbpm流程引擎内核设计思想及构架------作者胡长城前言流程引擎内核仅是“满足Process基本运行”的最微小结构,而整个引擎则要复杂很多,包含“状态存储”、“事件处理”、“组织适配”、“时间调度”、“消息服务”等等外围的服务性功能。
引擎内核,仅包含最基本的对象与服务,与用于解决流程运行问题的调度机制与执行机制。
假如,你掌握了一个流程引擎的灵魂,你才有能力懂得它的全部。
否则,一个引擎对你来说,可能只是一个复杂的结构,丰富多彩API、令人眼花缭乱的“功能”与“服务”而已。
关于这方面的技术分享,开源是个不错的突破口。
本篇就是以jBpm为实例,来诠释工作流引擎的内核设计思路与结构。
但是这仅仅是从jBpm的实现角度来辅助大家懂得,由于工作流引擎内核的设计、实现是有很多方式:这会因所选的模型、调度算法、推进机制、状态变迁机制、执行机制等多方面的不一样,而会差别很大。
比如基于Activity Diagram模型的jBpm与基于FSM模型的OSWorkflow引擎内核之间就有很大的差别。
相比较而言,jBpm的模型比较复杂,而引擎内核实现的比较“精简”,非常便于大家“由浅入深的懂得”。
2.1 概念的基础本文的读者群要紧是面向有一定工作流基本概念的开发人员。
因此本文认为你已经具备了如下基本工作流知识:(1)初步熟悉工作流系统结构。
比如懂得工作流引擎在工作流系统中所处的位置与作用(2)对流程定义(Process Definition)与流程实例(Process Instance)有关对象有所熟悉。
比如懂得Process Instance代表什么,工作项(WorkItem)代表什么。
2.2 环境的基础3 什么是流程引擎内核?我比较推崇“微内核的流程引擎构架”,并在最近两三年内写了两篇探讨此方面的文章:第一篇是写于05年7月份的《微内核流程引擎架构体系》,第二篇是07年7月份的《微内核过程引擎的设计思路与构架》(受普元《银弹》杂志约稿所写,尚未对外公开)。
1.org.jbpm.ant包未阅读,是用于ant命令吧?2.org.jbpm.bytes包主要是ByteArray类,它对应的hbm文件为ByteArray.hbm.xml,ByteArray类中共有三个属性,对应hmb文件中的相同name的属性,其中byteBlocks 对应list属性中的byteBlocks,如下所示:<list name="byteBlocks"table="JBPM_BYTEBLOCK"cascade="all"><key column="PROCESSFILE_" foreign-key="FK_BYTEBLOCK_FILE" /><list-index column="INDEX_" /><element type="binary" length="1024" column="BYTES_" /></list>这里用List是因为List维持集合内元素顺序的持久化。
list-index表明INDEX_是key值,查看表JBPM_BYTEBLOCK可知PROCESSFILE_ 和INDEX_是复合主键,而且是由hibernate自己维护INDEX_的指。
byteBlocks是一个List,它里面的每一个元素在保存时就保存在element元素BYTES_字段中。
包中另外一个类ByteBlockChopper用于对字节数组进行分块和合并,其中分块的标准是jbpm.cfg.xml中的属性jbpm.byte.block.size的值确定;这个包的用途如下:ByteArray is a persistable array of bytes. While there is no generic way of storing blobs that is supported by many databases, all databases are able to handle small chunksof bytes properly. It is the responsibility of this class to chop the large bytearray into small chunks of 1K (and combine the chunks again in the reverse way).Hibernate will persist the list of byte-chunks in the database。
jbpm4 数据库结构关系图JBPM数据库分析持久化基础知识
持久化(
Persistence
),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。
持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML
数据文件中等等。
我们可以这样理解:
在一定周期内保持不变就是持久化,
持久化是针对时间来说的
.
数据库中的数据就是持久化了的数据,
只要你不去删除或修改
.
Session
会话中
Session
对象变量也是不变的
,
是
Session
容器中持久化
对象持久化
的方式有很多种
,
根据周期不同有
,page,Session,Application,
对象序列化机制对于需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态
,
对象序列化的过程是对象持久化的方法之一
,
把对象保存到文件中
.
广义上说我们需要持久化是由于内存的易失性和过于昂贵造成的。
JBPM
流程引擎的持久化有什么特点
JBPM
流程引擎的持久化层使用的当前流行的
ORM
框架
hibernate
,得益于
hibernate
的一些强大特性,导致
JBPM
也具有了这样的一些特性,比如通过
hibernate
的
HSQL
,我们可以专注我们的业务逻辑,而不用考虑不同的数据库之间
T-SQL
的差异,这样是
jbpm
具备一套代码,可以平滑的从不同数据库间进行更换。
JBPM
需要持久化
基于以下特点
1.
工作流作为典型的交互性应用,其必须精细控制执行过程,并记录执行的状态,在用户唤醒流程时,能够在流程持久化的那个点继续运行。
同时在流程挂起时,我们将相关数据持久化,也有性能和故障恢复的考虑。
2.
流程引擎的运行本身也会产生相关的对象
(
流程实例、
Execution
等
)
,需要持久化到数据库
3.
流程引擎需要记录相关的业务数据
4.
流程引擎需要记录相关的执行历史数据
JBPM
流程引擎的数据库结构图各个数据表的功能简单介绍流程部署
jbpm4_deployment
:发布的记录表,通过
dbid
跟后两个表进行关联。
jbpm4_deployprop
:定义流程定义
(ProcessDefinitionImpl)
的相关属性
(key
、
Id
等
)
jbpm4_lob:
保存根据流程定义
xml
形成的二进制数据(同时也保存变量variable
)
值得注意的是一条
jbpm4_deployment
记录需要对应
4
条
jbpm4_deployprop
记录,他们的
key
字段分别为
,
pdid
,
pdkey
,
pdversion
Langid
标识解析流程定义使用的jpdl
的版本
Pdid
流程定义的
id ,
唯一标识一个流程
流程的
key
,标识同一类流程
Pdversion
标识流程的版本
主键生成机制表
jbpm4_property
:为运行时需要持久化的对象生成dbid
,其记录当前所有对象实例的
最大值,每次需要生成
dbid
时,需要先获取该值,然后递增返回。
用户认证表
JBPM
实现的用户库比较简单,我们可以实现并扩展其相关接口,并进行认证库独立
jbpm4_id_group
:用户组相关信息
jbpm4_id_membership
:用户组和用户的关系表
jbpm4_id_user
:用户相关信息表
流程实例运行相关表
jbpm4_execution
:驱动流程运行,记录流程实例运行必须的信息
jbpm4_job
:作业相关
jbpm4_participation :办理人相关信息
jbpm4_swimlane
:泳道相关信息
jbpm4_task:
记录任务的相关信息
jbpm4_variable
:记录传给流程的变量的相关信息
流程历史相关表
jbpm4_hist_actinst
:流程运行中执行过的节点的记录,包括
Task
和
State
节点
jbpm4_hist_detail
:历史信息的详细表,跟其他的历史表进行关联
jbpm4_hist_procinst
:历史流程实例相关信息
jbpm4_hist_task
:历史任务相关信息,与
jbpm4_hist_actinst
关联,单独的表减少了
state
节点相应字段的空闲和空间浪费
jbpm4_hist_var
:历史变量相关信息。