- 浏览: 123678 次
- 性别:
- 来自: 黑龙江
文章分类
最新评论
-
Mr_lee_2012:
总有人无私的奉献着,感谢。。。
BPM jPDL 用户开发手册 3.2.3 (全文pdf) -
sinodragon21:
学习!
工作流之大局势 -
yuzhenling:
楼主大好人啊 大好人
BPM jPDL 用户开发手册 3.2.3 (全文pdf) -
楚天阔:
楼主 我居然下不下来。。。谢谢您分享了这么多好资料
jBPM各版本及新手工具包下载地址 -
bingxinhan_aman:
xiaor186 写道题目是工作流之大趋势,可是我只看到了工作 ...
工作流之大局势
第7章持久化
图 7-1 转换和其不同形式
关于流程定义xml表示和流程包的更多信息,参考第21章 jBPM流程定义语言(JPDL)。
更多的关于如部署流程包到数据库的信息可以在21.1.1 部署流程包 节找到。
7.1. 持久化API
7.1.1.配置框架关系
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { // 调用持久化操作 } finally { jbpmContext.close(); }
|
<jbpm-configuration>
<jbpm-context> <service name='persistence' factory='org.jbpm.persistence.db.DbPersistenceServiceFactory' /> ... </jbpm-context> ... </jbpm-configuration>
|
7.1.2. JbpmContext上的方便方法
l 部署流程
l 开始一个新的流程执行
l 继续一个执行
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { ProcessDefinition processDefinition = ...; jbpmContext.deployProcessDefinition(processDefinition); } finally { jbpmContext.close(); }
|
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { String processName = ...; ProcessInstance processInstance = jbpmContext.newProcessInstance(processName); } finally { jbpmContext.close(); }
|
为了继续一个流程执行,我们需要从数据库中捕获流程实例、token或taskInstance,调用在POJO jBPM对象上的一些方法然后保存这些更新使这个流程实例再次进入数据库中。
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { long processInstanceId = ...; ProcessInstance processInstance = jbpmContext.loadProcessInstance(processInstanceId); processInstance.signal(); jbpmContext.save(processInstance); } finally { jbpmContext.close(); }
|
注意如果你用JbpmContext 的xxxForUpdate方法的话,一个明确的jbpmContext.save 方法调用就不再是必须的了,因为在关闭jbpmContext期间它将自动的调用。例如:假设我们想通知jBPM关于taskInstance已经完成了。注意任务实例完成能够触发执行继续所以与taskInstance 相关的processInstance必须被保存。最方便的方式是使用loadTaskInstanceForUpdate方法来做:
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { long taskInstanceId = ...; TaskInstance taskInstance = jbpmContext.loadTaskInstanceForUpdate(taskInstanceId); taskInstance.end(); } finally { jbpmContext.close(); }
|
JbpmConfiguration维护一系列的服务工厂。这些服务工厂在jbpm.cfg.xml文件中被配置正如上面显示的那样,而且是懒初始化的(instantiated lazy)。DbPersistenceServiceFactory只在它第一次需要的时候被初始化。在那以后,服务工厂被维护在JbpmConfiguration里。DbPersistenceServiceFactory管理hibernate 的SessionFactory。并且当第一次请求hibernate session工厂时它被懒创建(creat lazy)。
图 7-2 持久化关联类
在jbpmConfiguration.createJbpmContext()调用期间,只有JbpmContext被创建。那时没有更多的有关持久化的初始化被做。JbpmContext管理DbPersistenceService,它在第一次请求时被实例化。DbPersistenceService管理hibernate session。而且hibernate session是在DbPersistenceService内部被懒创建。结果,hibernate session将只有当第一个请求持久化的操作被调用且不会早于此请求的时候才被打开。
7.1.3. 管理事件
l 在你的应用服务器上配置一个DataSource
l 配置hibernate连接用数据源
l 使用窗口管理事务
l 在jBPM中禁止事务
在jBPM前端的无状态的session facade是个好的习惯。最容易的方式如何绑定jbpm事务到容器事务是要确信hibernate配置被jbpm引用的xa-datasource所使用。所以jbpm将使用它自己的hibernate session,那将只被1个jdbc连接和1个事务使用。
hibernate.connection.datasource= --数据源JNDI 名 — 例如: java:/DefaultDS |
更多的关于如何配置hibernate的jdbc连接的信息,参考hibernate参考文档, “Hibernate provided JDBC connections”。
更多 的关于如何在jboss中配置xa_datasource的信息,参考jboss应用服务器指导,“Configuring JDBC DataSources”。
7.1.4. 注入hibernate session
在某些情况下,你已经有了一个hibernate session并且你要是想合并所有的持久化工作从jBPM进入那个hibernate session中。
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { jbpmContext.setSession(SessionFactory.getCurrentSession()); // jbpmContext 上的jBPM操作 } finally { jbpmContext.close(); }
|
7.1.5. 在程序中注入资源
jBPM的配置提供了jBPM创建hibernate session工厂、hibernate session、jdbc连接和jbpm必须服务等等的必要信息。但是所有的这些资源也能够被在程序中提供给jBPM。正好注入他们到jbpmContext中。被注入的资源总是在从jbpm配置信息创建资源之前被接受。
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); try { // 为了在他们被使用之前注入资源,你可以使用 jbpmContext.setConnection(connection); // 或 jbpmContext.setSession(session); // 或 jbpmContext.setSessionFactory(sessionFactory); } finally { jbpmContext.close(); }
|
7.1.6. 高级API 使用
DbPersistenceService维护hibernate session的延迟初始化。所有的数据库访问都是通过这个hibernate session来完成的。所有的查询和更新都是通过jBPM暴露的XxxSession类,像GraphSession、SchedulderSession、LoggingSession等等来完成的。这些session类使用hibernate的查询并且在相同的hibernate session下。
XxxxSession类也是可以通过JbpmContext 进行存取的。
7.2. 配置持久化服务
7.2.1. DbPersistenceServiceFactory
重要:不要混用长短标签来配置工厂。参考:6.1 配置工厂。如果工厂只是一个类的新实例,你可以使用工厂的属性去引用工厂元素类名。但是如果工厂属性必须被配置的话,必须使用长标签而且factory和bean必须作为一个嵌套元素来组合使用。像这样:
<jbpm-context>
<service name="persistence"> <factory> <bean class="org.jbpm.persistence.db.DbPersistenceServiceFactory"> <field name="isTransactionEnabled"><false /></field> <field name="sessionFactoryJndiName"> <string value="java:/myHibSessFactJndiName" /> </field> <field name="dataSourceJndiName"> <string value="java:/myDataSourceJndiName" /> </field> </bean> </factory> </service> ... </jbpm-context> |
l isTransactionEnabled:缺省的,jBPM将开始一个hibernate事务当第一次捕获session并且如果jbpmContext被关闭时,hibernate事务将被结束。然后事务被提交或者是回滚都依赖于是否jbpmContext.setRollbackOnly被调用。isRollbackOnly属性在TxService中维护。为了禁止并限制jBPM使用hibernate管理事务。配置isTransactionEnabled属性为false像在上面的例子中的那样。这个属性只能控制jbpmContext的行为。你仍然可以直接使用API来调用DbPersistenceService.beginTransaction(),那就可以忽略isTransactionEnabled这个属性设置。更多的关于事务的信息,参考:7.3 Hibernate事务。
l sessionFactoryJndiName:缺省的,这个值是null,意味着session工厂不会被JNDI捕获。如果设置和session工厂是必须的去创建一个hibernate session的话,那么这个session工厂将从jndi中使用提供的JNDI命名被捕获。
7.2.2. hibernate session工厂
<jbpm-configuration>
... <!-- configuration resource files pointing to default configuration files in jbpm-{version}.jar --> <string name='resource.hibernate.cfg.xml' value='hibernate.cfg.xml' /> <!-- <string name='resource.hibernate.properties' value='hibernate.properties' /> --> ... </jbpm-configuration>
|
当这个属性 resource.hibernate.properties被指定时,资源文件中的属性将重写hibernate.cfg.xml中的所有属性。取代更新hibernate.cfg.xml文件指明数据库,hibernate属性能够方便的用于处理jbpm的升级:复制hibernate.cfg.xml文件就可以而不用非得修改它了。
7.2.3. 配置c3po连接池
请参考hibernate文档: http://www.hibernate.org/214.html
7.2.4. 配置ehcache cache provider
如果你想使用jBossCache来配置jBPM的话,看下jBPM配置wiki页面。
更多的关于在hibernate中配置cache provider的信息,去看hibernate文档,二缓存部分。
<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> |
7.3. Hibernate事务
缺省情况下,jBPM将委托事务给hibernate并使用每事务模型session。jBPM将在一个hibernate session被打开时开始一个hibernate事务。这个将当持久化操作在jbpmContext上被调用时的第一次发生。这个事务将恰好在hibernate session关闭前被提交。那个将发生在jbpmContext.close()的内部。
为了限制jBPM调用hibernate API的事务方法,设置isTransactionEnabled为false,这个在上面的7.2.1 DbPersistenceServiceFactory部分被解释了。
7.4. JTA 事务
<jbpm-context>
<service name="persistence"> <factory> <bean class="org.jbpm.persistence.db.DbPersistenceServiceFactory"> <field name="isTransactionEnabled"><false /></field> <field name="isCurrentSessionEnabled"><true /></field> <field name="sessionFactoryJndiName"> <string value="java:/myHibSessFactJndiName" /> </field> </bean> </factory> </service> ... </jbpm-context> |
然后你应该在你的hibernate session工厂中指定使用数据源并且绑定hibernate到事务管理器。确保你绑定数据源到一个XA数据源以防止你使用多个资源。更多关于绑定hibernate到你的事务管理器的信息,请查阅hibernate文档中的“事务策略配置”这一段。
<hibernate-configuration>
<session-factory> <!-- hibernate dialect --> <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> <!-- DataSource properties (begin) --> <property name="hibernate.connection.datasource">java:/JbpmDS</property> <!-- JTA transaction properties (begin) --> <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property> <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property> <property name="jta.UserTransaction">java:comp/UserTransaction</property> ... </session-factory> </hibernate-configuration>
|
7.5. 定制查询
<hibernate-configuration>
...
<!-- hql queries and type defs --> <mapping resource="org/jbpm/db/hibernate.queries.hbm.xml" /> ...
</hibernate-configuration>
|
7.6. 数据库兼容性
7.6.1. JDBC隔离级
7.6.2. 变更jBPM数据库
l 放jdbc驱动程序库到类路径上
l 更新jBPM使用的hibernate配置
l 在新数据库中创建模式(schema)
7.6.3. jBPM数据库模式
在开发中你可能感兴趣下列的hibernate配置:如果你设置hibernate配置属性'hibernate.hbm2ddl.auto' 为'create-drop'的话(例如在hibernate.cfg.xml中),这个模式将在应用第一次用到它时自动地在数据库中创建。当应用关闭时,这个模式将被丢弃。
7.6.4. 已知问题
7.6.4.1. Sybase 问题
7.7.合并hibernate类
7.8. 定制jBPM hibernate映射文件
l 从源文件(src/java.jbpm/...)处或jbpm jar包内部段复制jBPM的映射文件。
l 放这个拷贝到你的类路径上的任何地方
l 在你的hibernate.cfg.ml配置文件中更新引用为这些定制的映射文件。
7.9. 二级缓存
<cache usage="nonstrict-read-write"/> |
因为流程定义从不会改变,所以保持它们在二级缓存中是好的。参考21.1.3 改变部署的流程定义。
发表评论
-
BPM jPDL 用户开发手册 3.2.3 (全文pdf)
2008-10-16 12:58 9064最近太忙了,实在没有时间详细校稿,应大家要求,现在在将全文转为 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第24章
2008-09-27 08:35 2543第24章 可插拨架构 jBPM功能特性分裂成模块。每个模块都有 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第23章
2008-09-27 08:31 1518第23章 工作流的TDD文件 23.1.工作流TDD介绍 既然 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第22章
2008-09-27 08:30 1973第22章 安全 jBPM的安全属性还处于alpha阶段。本章归 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第21章
2008-09-27 08:27 1909第21章 jBPM流程定义语言(JPDL) JPDL指定一个X ... -
jBPM jPDL 用户开发手册 3.2.3 - 第20章
2008-09-23 09:04 1823第20章 业务流程仿真 jBPM包含一个仿真组件,这个是jB ... -
jBPM jPDL 用户开发手册 3.2.3 - 第19章
2008-09-23 09:00 1981第19章 日志 日志的目标是保持追踪流程执行的历史。在运行时 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第18章
2008-09-23 08:59 2070第18章 Web Services支持 本章描述了jBPM ... -
jBPM jPDL 用户开发手册 3.2.3 - 第17章
2008-09-23 08:57 3225第17章 邮件支持 本章描述了jBPM jPDL中随包发行的邮 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第16章
2008-09-23 08:22 1659第16章 商务日历 本章描述了jBPM的商务日历。商务日历知道 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第15章
2008-09-23 08:20 2077第15章 异步连续 15.1. ... -
工作流之大局势
2008-09-22 08:49 33711. 从奴隶社会到封建后期 工作流(WorkFlow)的概 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第12章
2008-09-12 15:06 2791第12章 任务分配 jBPM的 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第14章
2008-09-04 13:02 174914章 定时器 本章描述了jBPM如何和定时器工作一起工作。 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第13章
2008-09-03 20:49 1639第13章 文档管理 这仍然是一个试验性的属性。 为了使用这个 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第11章
2008-09-03 20:45 1989第11章 上下文 上下文是关于流程变量的。流程变量是维护同流程 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第10章
2008-09-02 12:42 2852第10章流程建模 10.1. 概 ... -
jBPM jPDL 用户开发手册 - 第9章
2008-08-24 06:24 2345第9章Java EE 应用服务器工具 本章将描述jBPM提供的 ... -
jBPM各版本及新手工具包下载地址
2008-08-22 17:40 4416由于一些刚开始学习jBPM的朋友看文档时,一般会提到 j ... -
jBPM jPDL 用户开发手册 - 第8章
2008-08-22 08:13 2771第8章 jBPM 数据库 8.1. 切 ...
相关推荐
**jbPM jPDL 用户开发手册 - 第8章** jbPM(Java Business Process Management)是一个开源的工作流管理系统,用于在Java环境中实现业务流程自动化。它提供了丰富的API、工作流建模语言(jPDL)以及可视化工具,...
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....
- **docs**目录:包含文档和手册,用于指导用户安装、配置和使用jBPM-jPDL。 - **samples**目录:提供了一些示例项目,帮助用户了解如何使用jBPM-jPDL实现具体业务流程。 安装配置jBPM-jPDL-suite-3.2.3通常涉及...
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-3.2.3\db目录下的jbpm.jpdl.mysql.sql文件,为每个SQL语句末尾添加分号,以便正确执行脚本。 4. **jbpm-jpdl-suite-3.2.3部署**: - 在MySQL中执行修改后的jbpm.jpdl.mysql.sql脚本,初始化jbpm...
jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载
"jbpm-jpdl-designer-nodeps-3.1.4" 是一个针对Jbpm工作流管理系统中的JPDL设计工具的无依赖版本,主要用于创建和编辑JPDL(Jbpm Process Definition Language)文件。该资源包含了该工具的详细文档、许可证协议以及...
jbpm-jpdl-suite-3.2.GA.zip
jbpm-jpdl-suite-3.2.GA.zip
jbpm-jpdl-suite-3.2.GA.zip
**JBoss jBPM jPDL用户开发手册1.1** **JBoss jBPM** 是一个开源的工作流管理系统,由JBoss组织开发,旨在提供一个灵活且可扩展的平台来设计、执行和管理业务流程。它基于Java,兼容J2EE(Java 2 Platform, ...
【jbpm-jpdl-designer-3.1.7.zip】是一个包含JBPM(Java Business Process Management)工作流设计工具的Eclipse插件版本3.1.7的压缩包。这个插件允许开发者在Eclipse集成开发环境中创建、编辑和管理JPDL(JBPML,...
**jBPM用户开发手册-中文版** jBPM(Java Business Process Management)是一个开源的工作流管理系统,专注于业务流程的建模、执行和监控。它提供了全面的BPM(Business Process Management)解决方案,包括流程...
jbpm-jpdl-designer-nodeps-3.0.13.zip是一款专为流程设计和管理而生的工具,主要用于JBPM(Java Business Process Management)系统。JBPM是一个开源的工作流和业务流程管理系统,它提供了对业务流程的建模、部署、...
jbpm-jpdl-suite-3.2.GA.zip
"jbpm-jpdl-designer-3.1.3.zip" 是一个压缩包,其中包含的是JBPMP项目中的JPDL设计器的相关资源。这个版本号3.1.3表明这是一个特定的历史版本。JBPMP(Java Business Process Management Suite)是用于业务流程管理...
jbpm-jpdl-suite-3.2GA -(2)分开压缩(五个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(2)分开压缩(五个文件)jbpm下载
jbpm-jpdl-designer-3.0.13 是一个与jbpm相关的软件包,主要功能是提供jbpm流程定义的图形化设计工具。jbpm(Java Business Process Management)是一个开源的工作流管理系统,用于管理和执行业务流程。JPDL(JBoss ...