`
anlulu
  • 浏览: 43412 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jbpm4事务和spring事务的整合

    博客分类:
  • jbpm
阅读更多

我们知道,支持嵌入到各种架构环境中使用一直是 jbpm工作流引擎的核心竞争力之一,自jbpm3版本开始,jbpm工作流引擎就在很多应用中被集成到spring等架构中使用,从jbpm4.4开始,jbpm工作流引擎可以支持开发者很自然的将其集成到spring架构中使用; spring架构集成jbpm4,只要达成两个目标,就可以基本成功了:

 

 

 1.持久化集成:默认地,jbpm4为每个客户端操作开启一个事务,在此事务中调用服务api,而在通常的spring应用中,应用的访问一般来自web的http请求,然后在此http请求线程中,通过调用spring bean的方法进入事务边界,这与标准的jbpm4事务处理方式是不同的。因此jbpm4提供了相应的工具将自身的持久化事务管理权交给了spring框架

 

 2.服务集成: 默认地,jbpm4的客户端通过硬编码获取各种工作流服务接口。现在,需要将这些jbpm4服务接口集成到spring的IOC架构中,作为spring Bean,经由依赖注入等方式供客户端应用调用

 

 

  1. 具体步骤如下:

 

 1.首先需要将jbpm4默认的hibernate事务管理配置替换为spring事务管理配置: jbpm4.4源码中的 'jbpm.tx.spring.cfg.xml'文件复制到工程的src下面,然后在jbpm.cfg.xml中将'<import resource="jbpm.tx.hibernate.cfg.xml" />  '  修改为'<import resource="jbpm.tx.spring.cfg.xml" />'

 

2.然后在spring配置文件的applicationContext.xml文件中,作如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="
http://www.springframework.org/schema/beans"
 xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="
http://www.springframework.org/schema/tx"
 xsi:schemaLocation="
   
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
 <bean id="propertyConfigurer"
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location">
   <value>classpath:/appContext/c3p0.properties</value>
  </property>
 </bean>
 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  destroy-method="close">
  <property name="driverClass" value="${c3p0.driverClassName}" />
  <property name="jdbcUrl" value="${c3p0.url}" />
  <property name="user" value="${c3p0.username}" />
  <property name="password" value="${c3p0.password}" />
  <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}" />
  <property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}" />
  <property name="initialPoolSize" value="${c3p0.initialPoolSize}" />
  <property name="maxIdleTime" value="${c3p0.maxIdleTime}" />
  <property name="maxPoolSize" value="${c3p0.maxPoolSize}" />
  <property name="minPoolSize" value="${c3p0.minPoolSize}" />
  <property name="maxStatements" value="${c3p0.maxStatements}" />
  <property name="acquireIncrement" value="${c3p0.acquireIncrement}" />
 </bean>
 <bean id="oracleLobHandle" class="org.springframework.jdbc.support.lob.DefaultLobHandler">
 </bean>
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="lobHandler" ref="oracleLobHandle" />
  <property name="dataSource">
   <ref local="dataSource" /> 
  
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     ${hibernate.dialect}
    </prop>
    <prop key="hibernate.show_sql">${showsql}</prop>

   </props>
  </property>
  <property name="mappingDirectoryLocations">
   <list>
    <value>
     classpath:com/tjtt/tdm/model
    </value>
   </list>
  </property> 

映射jbpm的一些服务,必须要配置
  <property name="mappingResources">  
            <list>  
                <value>jbpm.repository.hbm.xml</value>    
                <value>jbpm.execution.hbm.xml</value>    
                <value>jbpm.history.hbm.xml</value>    
                <value>jbpm.task.hbm.xml</value>    
                <value>jbpm.identity.hbm.xml</value>    
            </list>  
        </property>
 </bean>
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>
 <aop:config>
  <aop:pointcut id="jdbcServiceMethod" expression="execution(* *..service.*Service.*(..))" />
  <aop:advisor pointcut-ref="jdbcServiceMethod" advice-ref="txAdvice" />
 </aop:config>
 <tx:advice id="txAdvice" transaction-manager="transactionManager">
  <tx:attributes>
   <tx:method name="insert*" rollback-for="ServiceException" />
   <tx:method name="save*" rollback-for="ServiceException" />
   <tx:method name="add*" rollback-for="ServiceException" />
   <tx:method name="update*" rollback-for="ServiceException" />
   <tx:method name="del*" rollback-for="ServiceException" />
   <tx:method name="delete*" rollback-for="ServiceException" />
   <tx:method name="remove*" rollback-for="ServiceException" />
   <tx:method name="batchUpdate*" rollback-for="ServiceException" />
   <tx:method name="*" rollback-for="ServiceException" />
  </tx:attributes>
 </tx:advice>
</beans>

 

 

3.在src下面添加 applicationContext-jbpm.xml 文件:配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="
http://www.springframework.org/schema/beans"
 xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="
http://www.springframework.org/schema/context"
 xsi:schemaLocation="
 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
 <!-- 将ProcessEngine对象交给Spring管理 -->
  <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" >
     <property name="jbpmCfg" value="jbpm.cfg.xml"></property>
  </bean>
   <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
   <!-- 各种JBPM服务对象的配置 -->
   <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
 <bean id="executionService" factory-bean="processEngine" factory-method="getExecutionService" />
 <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
  <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
</beans>

 

至此,大功告成,jbpm的事务就和spring的事务集成到一起了!

分享到:
评论

相关推荐

    JBPM4与Spring整合例子代码

    将JBPM4与Spring进行整合,可以充分利用Spring的灵活性和JBPM4的流程管理能力,构建高效且可扩展的OA(Office Automation)工作流系统。 在"风中叶老师讲的JBPM4与Spring整合例子代码"中,我们可以了解到如何将这两...

    jbpm4和spring整合例子

    近期网上有人介绍jBPM4与Spring整合的2种方式,但没有人贴出代码,闲着无聊写了个例子,源码见附件,在WEBLOGIC下运行正常,事务由spring控制http://ip:7001/Spring/helloWorld.do

    jBPM4与Spring整合的2种方式

    将jBPM4与Spring整合,可以充分利用Spring的依赖注入和管理能力,提升jBPM4的可维护性和灵活性。本文将详细介绍两种整合jBPM4与Spring的方法。 **方法一:基于Spring的Bean定义** 1. **配置jBPM4的数据源**:在...

    jbpm4.3与spring整合

    2. **调整`applicationContext.xml`**:`applicationContext.xml`是Spring的核心配置文件,在这里我们需要配置数据源、事务管理器以及JBPM的相关组件。示例代码如下: ```xml &lt;bean id="dataSource" class="org....

    Jbpm4.4 整合Spring Hibernate4

    总之,Jbpm4.4整合Spring Hibernate4是一个强大的组合,它为开发人员提供了构建高效、灵活的流程驱动应用的工具,简化了业务流程的管理和实现。通过深入理解这些组件和整合方式,开发者可以更好地应对复杂的业务场景...

    jbpm4整合struts2+spring2.5+hibernate3.3

    **jbpm4整合struts2+spring2.5+hibernate3.3** 是一个经典的Java企业级应用集成框架,用于构建业务流程管理系统。jbpm4是Business Process Management(业务流程管理)的一个开源框架,它允许开发者设计、执行、监控...

    JBPM5 整合Spring3经典案例

    - **事务管理**:Spring的事务管理器可以与JBPM的事务管理相结合,确保流程操作的原子性和一致性。 - **AOP集成**:Spring的AOP可以在流程执行的关键点添加拦截器,实现日志记录、权限检查等功能。 - **Bean管理**:...

    JBPM4.4+spring+ext整合

    通过JBPM4.4、Spring和EXT的整合,可以构建出一个功能完善、易用性强的流程管理系统,不仅能够有效地管理业务流程,还能提供直观的用户界面,提升用户体验。这种整合方式在现代企业级应用中具有很高的实用价值。

    jbpm4.3-spring2.5整合

    5. **集成Spring事务管理**:将Jbpm的事务管理委托给Spring,通过 `&lt;tx:annotation-driven&gt;` 或者显式配置事务管理器(PlatformTransactionManager)来实现。 6. **单元测试**:利用Spring的测试支持,编写单元测试...

    jbpm+spring配置

    【jbpm+spring配置】是将业务流程管理(Business Process Management, BPM)框架jbpm与企业级应用开发...通过对这个项目的学习,你可以深入理解jbpm的流程设计、Spring的整合技巧以及如何在企业应用中实现流程自动化。

    jbpm4整合struts2+spring2[1].5+hibernate3.3

    - **jar包导入**:避免重复导入jar包,根据项目需求导入jbpm4和相关库的必要jar包。 - **配置文件**:jbpm4的配置文件如`jbpm.cfg.xml`需要正确配置,并且可能需要导入其他配置资源,如`jbpm.spring.default.cfg....

    Jbpm4与SSH整合

    在与JBPM4整合中,Spring可以用于管理和初始化JBPM的相关组件,如流程引擎、任务服务等。 **2. Struts2框架** Struts2作为MVC模式的Web框架,负责处理HTTP请求并展示视图。在整合JBPM4时,Struts2可以作为前端控制...

    spring与JBPM整合ppt

    3. **整合原理**:Spring与JBPM的整合主要基于Spring的bean管理和事务管理能力。通过Spring的ApplicationContext,我们可以配置和管理JBPM的相关组件,如流程引擎、数据源、事务管理器等。同时,Spring的AOP可以用来...

    spring3.2+jBPM6整合实例

    8. **异常处理和事务管理**:由于Spring和jBPM都支持事务管理,确保在异常发生时能够正确回滚事务是非常重要的。配置Spring的事务管理器,并确保与jBPM的事务配置相协调。 9. **规则集成**:jBPM集成了Drools规则...

    jbpm4+spring+hibernate

    在整合过程中,通常会创建一个Spring配置文件,其中包含Jbpm4和Hibernate的相关配置。例如,会配置Jbpm4的数据源、流程引擎工厂,以及Hibernate的SessionFactory。同时,需要确保所有必需的JAR文件,包括Jbpm4、...

    jbpm4.0+ext3.0+spring+hibernate整合实例

    将jbpm4.0、EXT3.0、Spring和Hibernate整合在一起,可以构建出一个功能强大的业务流程管理系统。Spring作为整体架构的胶水,管理各组件的生命周期;Hibernate负责数据持久化,处理与数据库的交互;jbpm4.0则处理业务...

    JBPM4.3整合Spring2.5.6的例子

    Spring可以帮助我们管理JBPM的bean,简化流程实例的创建和控制,以及提供事务管理等服务。 首先,我们需要在Spring配置文件中定义JBPM的相关bean。这包括`jtaTransactionManager`(用于全局事务管理)、`...

Global site tag (gtag.js) - Google Analytics