jbpm4.3 spring 整合

查阅 jBPM Developers Guide 文档

集成Spring和jBPM的最简单方式是在你的jbpm.cfg.xml文件中导入 jbpm.tx.spring.cfg.xml

<import resource="jbpm.tx.spring.cfg.xml" />
    

这个配置使用了一个事务管理器,它是定义在Spring配置中的。 从这个文件的内容开始吧,如果你需要了解jBPM-spring 的整合配置。

如果你是从一个已存在的配置开始,可以把standard-transaction-interceptor 替换为spring-transaction-interceptor。hibernate session需要使用属性current="true", 这取决于是否使用了spring中的'current session'策略。 而且,<transaction/>必须从transaction-context中删除,如果你希望 事务只由spring进行管理。 这会让jBPM从当前session中搜索,它应该是被spring提供的。

    <process-engine-context>
        <command-service>
          <spring-transaction-interceptor />
          ...
        </command-service>
        ...
    </process-engine-context>
    <transaction-context>
        ...
        <hibernate-session current="true"/>
    </transaction-context>
        

spring-transaction-interceptor默认会查找PlatformTransactionManager的实现, 通过类型在定义好的bean中查找。在有多个事务管理器的情况, 可以使用事务管理器的名称来指定使用哪一个, 可以这样使用拦截器:

<spring-transaction-interceptor transaction-manager="myTransactionManager" />
  

Spring集成提供了一个特殊的context,它会添加到context集合中, jBPM引擎会从中查找bean。 使用SpringContext,现在可以从Spring Application Context中获得bean。 jBPM流程引擎可以向下面这样配置在 spring的applicationContext.xml中:

<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
    <bean id="processEngine" factory-bean="springHelper"

        factory-method="createProcessEngine" />

采用此种方式不建议这样获得服务

<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />

<bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" />

在创建repositoryService对象的时候createBean() 方法会循环调用repositoryService对象,出现循环调用。


可以这样延迟实例化Bean,但意义不大。

<bean id="repositoryService" factory-bean="processEngine"
        factory-method="getRepositoryService"
        depends-on="springHelper,processEngine" lazy-init="true"/>

org.jbpm.pvm.internal.processengine.SpringHelper 的代码

package org.jbpm.pvm.internal.processengine;

import org.jbpm.api.ProcessEngine;
import org.jbpm.pvm.internal.cfg.ConfigurationImpl;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * @author Joram Barrez
 */
public class SpringHelper implements ApplicationContextAware {
  
  protected ApplicationContext applicationContext;
  protected String jbpmCfg = "jbpm.cfg.xml";

  public void setJbpmCfg(String jbpmCfg) {
    this.jbpmCfg = jbpmCfg;
  }

  //获得Spring容器 ApplicationContext 拿到Spring的事物管理器,实际上是Hibernate的事物管理器
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext;
  }
  
  protected ProcessEngine createProcessEngine() {
    return new ConfigurationImpl()
      .springInitiated(applicationContext)
      .setResource(jbpmCfg)
      .buildProcessEngine();
  }
  
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值