8.1.3.2. 使用JBPMHelper
来配置引擎去使用持久化
要配置jBPM引擎来使用持久化,通常在创建session的时候可以通过使用适当的构造器。有很多方式来创建session(为了尽可能的为你简化提供了几个工具类给你,在你编写一个流程单元测试的时候可以用到)。
最简单的方式是使用jbpm-test模块来轻松创建和测试流程。JBPMHelper类有个创建session的方法,并使用一个配置文件来配置session,配置包括是否想使用持久化、数据源等等。这个帮助类接下来会为你做所有的安装和配置。
要配置持久化,要创建一个jBPM.properties文件并配置下面的属性(注意下面给的例子是默认的配置,使用H2内存数据库来启用持久化,如果你感觉这些配置很好了,就不要再添加新的配置文件,默认就用到这些属性)。
# 用于创建数据源
persistence.datasource.name=jdbc/jbpm-ds
persistence.datasource.user=sa
persistence.datasource.password=
persistence.datasource.url=jdbc:h2:tcp://localhost/~/jbpm-db
persistence.datasource.driverClassName=org.h2.Driver
# 用于配置session持久化
persistence.enabled=true
persistence.persistenceunit.name=org.jbpm.persistence.jpa
persistence.persistenceunit.dialect=org.hibernate.dialect.H2Dialect
# 用于配置人工任务服务
taskservice.enabled=true
taskservice.datasource.name=org.jbpm.task
taskservice.transport=mina
taskservice.usergroupcallback=org.jbpm.task.service.DefaultUserGroupCallbackImpl
如果你要使用持久化,你必须确保数据源(在jBPM.properties文件中指定的)正确初始化。这意味着数据库本身要启动并运行,并且数据库 应该使用正确的名称来注册。如果你想要使用H2内存数据库(通常最易于做一些测试),你可以使用JBPMHelper类来启动它,使用下面语法:
JBPMHelper.startH2Server();
要注册数据源(这是你总要做的,尽管你不使用H2作为你的数据库,检查下面更多的选项来配置你的数据库),使用:
JBPMHelper.setupDataSource();
接下来,你可以使用JBPMHelper类来创建session(先要创建知识库,这个和不使用持久化的情况是一样的):
StatefulKnowledgeSession ksession = JBPMHelper.newStatefulKnowledgeSession(kbase);
这些都做好了,你只要调用这个ksession上的方法(如startProcess)然后引擎会在创建好的数据源中持久化所有的运行时状态。
你也可以使用JBPMHelper类来重新创建session(通过从数据库恢复它的状态,只需要传递session id(id可使用ksession.getId()方法获取到)):
StatefulKnowledgeSession ksession =
JBPMHelper.loadStatefulKnowledgeSession(kbase, sessionId);
8.1.3.3. 手动配置引擎来使用持久化
你也可以使用JPAKnowledgeService来创建知识会话。这稍微复杂些,但会让你访问到所有的优先配置。你可以使用基于 知识库、知识会话配置(如果必要)和环境的JPAKnowledgeService来创建一个新的知识会话。环境需要包含对你的实体管理器工厂的引用,例 如:
// 创建实体管理器工厂并在环境中注册它
EntityManagerFactory emf =
Persistence.createEntityManagerFactory( "org.jbpm.persistence.jpa" );
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set( EnvironmentName.ENTITY_MANAGER_FACTORY, emf );
// 创建一个新的知识会话来使用JPA存储运行时状态
StatefulKnowledgeSession ksession =
JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
int sessionId = ksession.getId();
// 这儿调用你自己的方法
ksession.startProcess( "MyProcess" );
ksession.dispose();
你也可以使用JPAKnowledgeService来根据一个指定的session id重新创建session:
// 使用sessionId从数据库恢复session
ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(
sessionId, kbase, null, env );
你需要添加持久化配置到你的类路径下,以便配置JPA使用Hibernate和H2数据库(或其他数据库),要创建一个META-INF目录来存放 一个persistence.xml文件,显示如下。更多关于如何修改这些配置,可以从JPA和Hibernate文档中获取更多信息。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence
version="1.0"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="org.jbpm.persistence.jpa" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/jbpm-ds</jta-data-source>
<mapping-file>META-INF/JBPMorm.xml</mapping-file>
<class>org.drools.persistence.info.SessionInfo</class>
<class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
<class>org.drools.persistence.info.WorkItemInfo</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.BTMTransactionManagerLookup"/>
</properties>
</persistence-unit>
</persistence>
这个配置文件指向的数据源叫做“jbdc/jbpm-ds”。如果在你的应用服务器中运行应用(例如JBoss AS),这些容器可以使用自己的一些配置来简单建立数据源(例如在部署目录中放一个数据源配置文件)。可以参考你的应用服务器的文档来获取如何配置这些。
例如,如果你部署应用到JBoss 应用服务器 v5.x中,你可以在部署目录中丢进一个配置文件来创建数据源,如:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/jbpm-ds</jndi-name>
<connection-url>jdbc:h2:tcp://localhost/~/test</connection-url>
<driver-class>org.h2.jdbcx.JdbcDataSource</driver-class>
<user-name>sa</user-name>
<password></password>
</local-tx-datasource>
</datasources>
如果你在Java环境中执行的话,你可以使用JBPMHelper类来做这个(如上)或者可用下面的代码段来建立数据源(这儿我们把Bitronix和H2内存数据库结合使用了)。
PoolingDataSource ds = new PoolingDataSource();
ds.setUniqueName("jdbc/jbpm-ds");
ds.setClassName("bitronix.tm.resource.jdbc.lrc.LrcXADataSource");
ds.setMaxPoolSize(3);
ds.setAllowLocalTransactions(true);
ds.getDriverProperties().put("user", "sa");
ds.getDriverProperties().put("password", "sasa");
ds.getDriverProperties().put("URL", "jdbc:h2:tcp://localhost/~/jbpm-db");
ds.getDriverProperties().put("driverClassName", "org.h2.Driver");
ds.init();
相关推荐
3. **持久化**:jbpm使用JPA(Java Persistence API)进行数据持久化,可以将流程实例、任务和变量等信息存储在数据库中,便于后续查询和管理。 4. **集成能力**:jbpm可与Java EE、Spring等框架无缝集成,也可以与...
2. **持久化jar包**:jbpm-persistence-jpa.jar和jbpm-persistence-hibernate.jar分别对应JPA和Hibernate的持久化支持。jbpm-3.1.4版本可能需要用户根据实际数据库环境选择对应的jar包。 3. **模块jar包(moudle的...
jBPM的优势在于它将业务逻辑与数据管理分离,利用Hibernate作为数据持久层解决方案,专注于处理核心的商务逻辑。 jPDL是jBPM框架内的流程定义语言,它以UML状态图为基础,允许开发者通过图形化方式定义任务、待处理...
3. **jbpm核心组件**:jbpm的核心组件包括流程引擎(Process Engine)、工作内存(Working Memory)、持久化存储(Persistence)、任务服务(Task Service)和规则引擎(Rule Engine)。流程引擎负责流程实例的执行...
4. **持久化机制**:jbpm利用Hibernate作为默认的持久化层,确保流程实例和相关数据在数据库中的存储和检索。 5. **事务管理**:jbpm支持JTA(Java Transaction API),能处理复杂的事务需求,确保业务流程的一致性...
5. **持久化机制**:jbpm-4.4使用Hibernate作为默认的持久化框架,确保流程实例和任务状态能够在数据库中安全存储和恢复。 6. **任务管理**:jbpm支持任务分配和管理工作,包括任务的创建、分配、领取、完成以及...
5. **数据存储**:jBPM使用持久化机制来存储流程实例、任务、变量等信息,通常与关系型数据库(如MySQL、PostgreSQL)集成。6.1.0版本可能已经优化了数据存储的性能和稳定性。 6. **任务服务**:jBPM的任务服务负责...
例如,你可以利用jbpm-human-task-core来设计和实现涉及人员交互的任务流程,通过jbpm-bpmn2解析和执行BPMN 2.0流程图,借助jbpm-persistence-jpa将流程实例持久化到数据库,同时使用jbpm-bam监控流程的运行情况。...
基于Eclipse和基于Web的编辑器,用于支持业务流程的图形化创建(拖放)。 基于JPA / JTA的可插拔持久性和事务。 基于WS-HumanTask的可插拔人工任务服务,用于包含需要由人类执行者执行的任务。 管理控制台支持流程...
4. **持久化**:通过 JPA(Java Persistence API)实现流程实例和数据的持久化存储,确保数据安全和恢复。 5. **服务调用**:能够无缝集成外部服务,如 Web Services 或 EJB,实现业务流程的跨系统交互。 6. **...
6. **学习路径**:对于初学者,可以从阅读jBPM的官方文档开始,理解其架构和核心概念,如流程定义语言(BPMN)、工作流引擎、持久化机制等。然后,可以通过分析源代码加深理解,并尝试创建简单的流程示例来实践。 7. ...
- **RuntimeManager**:用于管理RuntimeEngine,提供流程实例和变量的持久化。 6. **监听器与事件** - **流程监听器**:可以监听流程中的各种事件,如开始、结束、任务分配等。 - **事件服务**:触发和处理流程...
6. **持久化**:jbpm使用Hibernate进行数据持久化,确保流程实例和相关数据在流程执行过程中得以保存。 7. **可扩展性**:jbpm的设计允许开发者通过插件和自定义组件来扩展其功能,适应不同业务需求。 在jbpm-4.3...
Hibernate则用于将流程实例和相关数据持久化到数据库中,确保数据的可靠性和一致性。 总的来说,JBPM 3.1.2与SSH的结合,为开发者提供了强大的Web应用中业务流程管理能力,使得开发者能够灵活地设计、实施和监控...
1. **jbpm核心库**:包含jbpm的主要类库,比如jbpm-runtime、jbpm-persistence等,这些库负责流程的执行和持久化。 2. **Drools规则引擎库**:用于支持流程中的业务规则。 3. **JPA(Java Persistence API)库**:...
它支持持久化流程实例的状态,使得流程可以在不同时间点继续执行。 7. **jbpm-bam-5.1.0.Final.jar**:Business Activity Monitoring(BAM)模块,用于收集和分析业务活动数据,提供实时的业务性能监控和洞察。 8....
2. **jbpm-persistence.jar**:这个jar包处理jbpm的数据持久化,支持多种数据库如MySQL、Oracle等。它使用JPA(Java Persistence API)来管理和存储流程实例、任务实例等数据。 3. **jbpm-human-task.jar**:该jar...
- **持久化机制**:介绍JBPM如何利用数据库存储流程实例和变量,确保数据安全和流程恢复。 4. **平台特性:JBPM_(4)_Platform.ppt** - **jbpm-gwt-console**:一个基于GWT的Web管理控制台,用于监控和管理流程...
手册则可能涵盖更深入的技术细节,如工作流引擎的工作原理、持久化机制、事件处理、异常处理等。手册也可能包含故障排查和优化技巧,帮助用户解决在实际应用中遇到的问题。 总的来说,jBPM-side流程设计器提供的...
3. **持久化**:jbpm将流程实例和相关数据持久化到数据库中,确保即使在系统重启后也能恢复流程状态。 4. **工作流服务**:jbpm支持定义和调用工作流服务,这些服务可以是内部的Java方法或外部Web服务。 5. **事件...