图6.1. 不同形态的转换
流程定义可以用三种不同的形式表现
ml, java objects 或jBPM数据库记录. 执行信息 (= 运行时间) 和日志信息可表现为2种形式 : java objects 和jBPM数据库记录.
有关XML表示流程定义和流程档案可以参看 第13章, jBPM 流程定义语言 (JPDL).
本章讨论java Object和jBPM数据库之间的转换.jBPM内部hibernate 保存java objects到数据库并且重现他们 . 当然不是严格限定使用jBPM必须有hibernate 的相关知识,这只是推荐使用hibernate.
更多的有关如何发布流程档案到数据库亲参看 13.1.1节, “发布流程档案”
6.1. 永久化API
图 6.2. The jBPM 数据库class
jBPM永久化操作可以根据名字类似 GraphSession, TaskMgmtSession 和 ContextSession等来找到 .从 JbpmSession可以获得命名的会话 . JbpmSession 可以从 JbpmSessionFactory获得.
JbpmSessionFactory 对你的应用程序来说是threadsafe保证的, 你需要一个 JbpmSessionFactory . 单件模式(Singleton)的延迟初始化(Lazy Initialization)(当心 issues延迟载入和double-check locking的问题 ).
在生成时间, JbpmSessionFactory预备了能让JbpmSession可以飞快建立的所有信息 .
作为一个用户, 你可以为每个thread或每个请求建立一个 JbpmSession . JbpmSession有一个JDBC connection 连接到数据库
JbpmSession 和 JbpmSessionFactory仅仅是包装它们的 hibernate副本. 高级的特性比如独立的数据For advanced features such as 脱管对象(detached objects)或乐观锁定, 参看hibernate文档.
public class PersistenceApiTest extends TestCase {
static JbpmSessionFactory jbpmSessionFactory = JbpmSessionFactory.buildJbpmSessionFactory();
public void testStartProcessInstance() {
// obtain a session
JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();
try {
// start a user managed transaction
jbpmSession.beginTransaction();
// load information from the database
// (note that process definitions will be cached in memory
// in the second level cache of hibernate)
ProcessDefinition auctionProcess =
jbpmSession.getGraphSession().findLatestProcessDefinition("auction");
// perform a POJO workflow operation on the plain object model.
ProcessInstance auctionInstance = new ProcessInstance(auctionProcess);
auctionInstance.signal();
// store the result in the database
jbpmSession.getGraphSession().saveProcessInstance(auctionInstance);
// commit the user transaction
jbpmSession.commitTransaction();
} finally {
// close the session.
jbpmSession.close();
}
}
}
6.2. 数据库配置
最容易的配置the hibernate SessionFactory 的方式是把 hibernate.cfg.xml 放到根classpath里. hibernate.cfg.xml 包含了如何获得jdbc jdbc connections 和定位hibernate mapping 文件. 你可以在目录test/java发现比如mapping文件的例子.
更多关于配置hibernate的信息可以参看 hibernate 参考手册l, 配置章节.
6.3. 管理事务
jBPM 基本方式是平衡 hibernate 关于事务分界的能力. 这有两个最常见的场景来解释:
用户事务管理, JbpmSession 有方法
JbpmSession.beginTransaction()
JbpmSession.commitTransaction()
JbpmSession.rollbackTransaction()
这些方法的行为依赖hibernate的有关事务的配置.
如果你配置了hibernate 管理她自己的JDBC connections (比如 C3P0连接池), 那么事务操作的结果同JDBC connection一致. hibernate配置文件中(hibernate.cfg.xml) 配置要求你指明JDBC connection属性. 可选的, 你可以通过c3p0连接池的属性来配置连接池.
当你配置了hibernate 获得connection从应用服务器中的DataSource,那么事务的方法将同包容器中的UserTransaction object的方法保持一致.
更多有关配置事务的细节参看 hibernate 参考手册, 事务策略章节.
6.4. jBPM 数据库
jBPM 数据库包含流程定义,流程执行和日志数据. 流程定义数据是静态的不能改变(参看 章节13.1.2, “流程版本 . 流程执行是流程定义的参考数据. 流程日志包含了所有在流程执行中的变化信息.
6.4.1. Hibernate 整合
jBPM 使用 hibernate 3.0 作为它的 O/R映射. 这就意味着hibernate 有负责jBPM java object和这些对象在关系数据库中永久化对象的变换. 注意你开始使用jBPM不必了解Hibernate . Hibernate用于jBPM内部. 但是理解基本的hibernate, 会帮助你更好理解jBPM API的语义.
让我们看看一些例子和得到一些hibernate的功能了解:
发布流程档案 : 发布流程档案按照几个步骤, 在第一个步骤, 档案被解析并且相应的java object模型也被建立. 对象图将被hibernate处理. Hibernate将产生必要的相关SQL数据库插入语句 .
更新流程实例 : 另外一个功能是hibernate 脏数据检查功能. hibernate 在两个对象图中间计算不同并产生必要的对应数据库的update语句 (和插入及删除) 使java object和数据库保持一致. 因此当你想继续流程执行实例, 你使用 ProcessInstance JbpmSession.getGraphSession().loadProcessInstance(Long pid) , jBPM将委托这个调用到 hibernate. Hibernate将从数据库载入这个流程实例数据并且结构化成jBPM java objects. 在这之后,你可以自由的修改流程实例java objects就好象其他java objects一样.当你完成 (比如在在执行进入等待状态之后)后 你可以保存修改过的流程实例到数据库,通过调用 JbpmSession.getGraphSession().saveProcessInstance(ProcessInstance processInstance) . jBPM 同样委过这个任务到hibernate , hibernate 将计算给顶的processInstance和 原始从数据库中载入的processInstance .这叫做脏数据检查. Hibernate 会计算所有的不同并且产生必要的SQL语句来保证数据库和java object的同步.
执行这个任务, hibernate 需要一组mapping文件和配置文件. mapping 文件说明了java object 同数据库table之间的映射. jBPM 包括所有的jBPMdomain class的 mapping 文件.
hibernate配置文件中的主要信息是描述数据库连接的配置属性. 包括jdbc连接和数据库方言. SQL方言是重要的hibernate特性 : 数据库无关. 数据库每个类型一般说来都有同样的SQL, 但不同的数据库有稍微不同的SQL语法. Hibernate 知道这些区别并通过方言属性来建立正确的SQL. 可以参考hibernate文档查看支持的数据库清单.
6.4.2. 开发数据库是hsqldb
hypersonic数据库是理想的包含关系数据库的java软件的数据库. 尤其是 hypersonic in-memory 模型是非常便于编写包含数据操作的test unit . hypersonic in-memory 数据库保持所有的数据在内存中而不是保存在磁盘里. jBPM的单元测试将开始一个干净的空的in-memory数据库. 然后hibernate schema 生成工具将建立jBPM table. 我们提供的jBPM类mapping文件作为hibernate schema生成器的输入. 然后hibernate schema 生成器根据信息生成数据库schema (DDL)脚本. 这些DDL 语句将在hypersonic in-memory数据库上执行用来建立新的,空的jBPM 数据库.
6.4.3. 其他数据库支持
为了支持除了hypersonic in-memory 数据库而提供了jbpm 数据库扩展包: jbpm-<version>-db.zip . 参看 章节2.1, “可下载一览” . 这个包报案ant 脚本来测试jBPM是否为支持的不同的数据库产生数据库的DDL脚本 (create, drop和clean)
在展开 jbpm-<version>-db.zip , 更新 build.properties并且设置 jbpm.3.location 到安装jbpm的主目录(相对路径或绝对路径)
数据包扩展包包括一个ant建造script (build.xml ) 在根目录下. 这个脚本包括建立jBPM支持的数据库生成脚本和测试脚本.运行 ant -p 得到关于建造目标更多的信息. readme.html文件介绍了更多的有关不同数据库实现的信息及状态.
生成的脚本是默认的脚本.如果想为特定的使用定制或优化 , 你必须询问你的DBA 先查看数据库脚本. 通常的定制是额外的索引或增加text字段的最大值.
如果你的数据库不被支持,你可以用我们介绍的方法在你的数据库上来测试jBPM . 我们希望支持所有的数据库,所以可以把你的数据库的下列信息让我们知道.:
jbpm.test.hibernate.properties 配置文件
那里可以下载数据库驱动和数据库版本
你碰到的任何问题
分享到:
相关推荐
第六章 永久化 第七章. 流程建模 第八章 上下文 第九章 任务管理 第十章 调度程序 第11章 业务日历 第12章. 记录 第13章. jBPM 流程定义语言 (JPDL) 第14章 安全 第15章. TDD适合工作流 第16章 可插入架构
第6章混合模式蒙版与高级混合ppt 第7章滤镜与插件ppt 第8章色调调整ppt 第9章色彩调整ppt 第10章照片编辑ppt 第11章人像修图ppt 第12章 Camera Raw.ppt 第13章路径与U设计ppt 第14章抠图技术,ppt 第15章文字与版面...
目录网盘文件永久链接 ...第6章 多媒体.zip 第7章 组成原理与体系结构.zip 第8章 网络基础.zip 第9章 安全性、可靠性及系统性能评价.zip 第10章 标准化.zip 第11章 知识产权.zip 第12章 面向对象技术.zip
第6章VLAN原理与配置 第7章生成树 第8章以太网链路聚合与交换机堆叠、集群 第9章IP路由基础 第10章实现VLAN间通信 第11章OSPF基础 第12章ACL原理与配置 第13章AAA原理与配置 第14章网络地址转换 第15章网络服务与...
第6章 商品模块开发 第7章 购物车模块开发 第8章 订单模块开发 第9章 支付模块开发 本章主要介绍如何使用支付宝沙箱环境,封装一个支付模块。 重点介绍支付宝支付流程及集成,支付签名必须放到服务端实现,避免风险...
HCIP-Cloud1_第六章 云计算灾备技术1.zip HCIP-Cloud2_第六章 云计算灾备技术2.zip HCIP-Cloud3_第六章 云计算灾备技术3.zip HCIP-Cloud1_第六章 云计算灾备技术4.zip HCIP-Cloud2_第六章 云计算灾备技术5.zip ........
第6章 数据查询和管理 第7章 操作查询 第8章 Transact-SQL编程 第9章 存储过程 第10章 触发器 第11章 SQL Server 2008的安全机制 第12章 备份与恢复数据库 第13章 自动化SQL Server 2008数据库 第14章 集成服务 第15...
第6章 神经网络基本结构及梯度下降算法 第7章 随机梯度下降算法 第8章 梯度下降算法实现上 第9章 梯度下降算法实现下 第10章 神经网络手写数字演示 第11章 Backpropagation算法上 第12章 Backpropagation算法下 第13...
第6章 Docker Compose多容器部署 第7章 容器编排Docker Swarm 第8章 DevOps初体验——Docker Cloud和Docker企业版 第9章 容器编排Kubernetes 第10章 容器的的运维和监控 第11章 Docker+DevOps实战——过程和工具 第...
第6章 项目整体管理.wmv 第7章 项目范围管理.wmv 第8章 项目进度管理.wmv 第9章 项目成本管理.wmv 第10章 项目质量管理.wmv 第11章 项目人力资源管理.wmv 第12章 项目沟通管理.wmv 第13章 项目合同管理.wmv 第14章 ...
目录网盘文件永久链接 ...第6章统计系统框架构成.rar 第7章统计统之口志费.rar 第8章统计系统之批星解析a 第9章统计系统之统计逻辑,rar 第10统计系统之存储器rar 第11章据可视化证 第12直企业级解方客暴果程总结
第6章__数组应用实战 第7章__函数传参及返回 第8章__Shell内置命令 第9章__RE正则表达式 第10章__Sed流编辑器 第11章__awk文本处理工具实战 第12章__项目实战之 系统性能分析 第13章__项目实战之 主机存活状态 第14...
目录网盘文件永久链接 DAS技术介绍 ...第六章 大数据存储基础 第七章 容灾备份技术基础 第八章 云计算基础 第九章 华为存储产品介绍 第十章 华为存储初始设置和配置 第十一章 华为存储高级特性和固件升级
11【第6章】项目进度管理 12【第7章】项目成本管理 13【第8章】项目质量管理 14【第9章】项目人力资源管理 15【第10章】项目沟通和干系人管理 16【第11章】项目风险管理 17【第12章】项目采购管理 18【第13章】项目...
【第六章、对公司客户的贷款】 本章主要讨论的是商业银行针对公司客户提供的贷款服务,特别是流动资金贷款和固定资产贷款。流动资金贷款是银行的核心业务之一,主要用于满足企业在生产和经营过程中对流动资金的需求...
【财务管理第六章营运资本管理】本章主要探讨的是企业如何有效地管理营运资本,即流动资产与流动负债的关系。营运资本的狭义定义是指净营运资本,即流动资产减去流动负债,而广义上则包括所有流动资产以及永久性和...
网盘文件永久链接 01.介绍及学习方式说明 02.【基础课】第1章-信息化知识(1) 03.【基础课】第1章-信息化知识(2) ...22.【基础课】第6章-项目整体管理(1) 23.【基础课】第6章-项目整体管理(2) ...........
【财务管理第六章营运资本管理】是财务管理中的核心内容,它主要关注企业日常运营中的短期资金管理,特别是如何有效地管理流动资产(如存货和应收账款)和流动负债,以确保企业的短期偿债能力和运营效率。...
第六章主要讨论的是接入网的相关概念和技术,这是通信网络中连接本地交换机和用户终端设备的关键部分。接入网(Access Network, AN)是通信网络的末端,它包括从本地交换机到用户设备的所有设施和线路,可以是部分或...
在本章“数学建模:第6章 离散模型”中,主要介绍了四种离散模型:简单图论、对策问题、层次分析法和Shapely方法。 一、简单图论 1. 图论基础:图是由顶点集合V和边集合E组成的,其中E中的元素连接了V中的两个顶点...