JBPM-持久化

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();

 

 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值