`
Dawn.yang
  • 浏览: 1548 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

新Jbpm4.4与spring整合方式

阅读更多

背景:最近项目要用到工作流,在网上搜了一些jbpm4和spring的整合方案,发现大部分都是官方文档提供的方案(本文不详细描述官方方案)。
但官方整合方式有其缺陷,例如遇到如下情况,系统架构是通过web.xml加载项目的所有spring文件,并出现了多个SessionFactory的情况。中途客户提出新的需求,需要引入工作流引擎(这里用Jbpm4.4) ,我们需要新建DataSource和SesionFacotory,此时我们用官方的方案就会出现架构混乱的状况。

解决方案:

一、定义自己的ProcessEngine工厂

 

public class ProcessEngineFactoryBean extends SpringHelper {

	protected SessionFactory sessionFactory;

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public ProcessEngine createProcessEngine() {
		processEngine = new ConfigurationImpl().springInitiated(
				applicationContext).setResource(jbpmCfg)
				.setHibernateSessionFactory(sessionFactory)
				.buildProcessEngine();
		return processEngine;
	}

}

  

 二、创建Spring配置文件,用于新建DataSource和SesionFacotory,此处省略了jdbc.properties(即数据库连接信息)。

 

 

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<bean id="dataSource-jbpm" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName">
			<value>${jbpm.hibernate.connection.driver_class}</value>
		</property>
		<property name="url">
			<value>${jbpm.hibernate.connection.url}</value>
		</property>
		<property name="username">
			<value>${jbpm.hibernate.connection.username}</value>
		</property>
		<property name="password">
			<value>${jbpm.hibernate.connection.password}</value>
		</property>
		<property name="maxActive">
			<value>${jbpm.hibernate.connection.maxActive}</value>
		</property>
		<property name="maxIdle">
			<value>${jbpm.hibernate.connection.maxIdle}</value>
		</property>
		<property name="maxWait">
			<value>${jbpm.hibernate.connection.maxWait}</value>
		</property>
	</bean>

	<bean id="sessionFactory-jbpm"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${jbpm.hibernate.connection.dialect}</prop>
				<prop key="hibernate.show_sql">true</prop>
			</props>
		</property>
		<property name="dataSource">
			<ref bean="dataSource-jbpm" />
		</property>
		<property name="configLocations">
			<list>
				<value>/WEB-INF/hibernate/jbpm/jbpm.hibernate.cfg.xml</value>
			</list>
		</property>
		<property name="lobHandler" ref="lobHandler" />
	</bean>

	<bean id="nativeJdbcExtractor"
		class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
		lazy-init="true" />

	<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"
		lazy-init="true">
		<property name="nativeJdbcExtractor">
			<ref local="nativeJdbcExtractor" />
		</property>
	</bean>

	<bean id="transactionManager-jbpm"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory-jbpm" />
		</property>
	</bean>

	<!-- jbpm配置 com.dawn.jbpm4.cfg.pvm.ProcessEngineFactoryBean上面已经定义-->
	<bean id="springHelper" class="com.dawn.jbpm4.cfg.pvm.ProcessEngineFactoryBean">
		<property name="jbpmCfg" value="com/dawn/jbpm4/cfg/jbpm.cfg.xml"></property>
		<property name="sessionFactory">
			<ref local="sessionFactory-jbpm" />
		</property>
	</bean>

	<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" />
	<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
	<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
	<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />
	<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />

</beans>

 三、创建我们的jbpm.cfg.xml<==>com/dawn/jbpm4/cfg/jbpm.cfg.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<jbpm-configuration>

	<import resource="jbpm.default.cfg.xml" />
	<import resource="jbpm.businesscalendar.cfg.xml" />
	<import resource="jbpm.jpdl.cfg.xml" />
	<import resource="jbpm.bpmn.cfg.xml" />
	<import resource="jbpm.identity.cfg.xml" />
	<import resource="jbpm.console.cfg.xml" />	
	
	<import resource="com/dawn/jbpm4/cfg/jbpm.tx.spring.cfg.xml" />
	
	<!--此处为官方配置  
	<import resource="jbpm.tx.spring.cfg.xml" />
	<process-engine-context>
	 	<string name="spring.cfg" value="com/dawn/jbpm4/cfg/spring-jbpm.xml" />   
	 </process-engine-context>
	-->
	<!--  <import resource="jbpm.tx.hibernate.cfg.xml" />-->
	<!-- Job executor is excluded for running the example test cases. -->
	<!--
		To enable timers and messages in production use, this should be
		included.
	-->
	<!--
  	<import resource="jbpm.jobexecutor.cfg.xml" />
  	-->

</jbpm-configuration>

 

 

 

 四、创建jbpm.tx.spring.cfg.xml<==>com/dawn/jbpm4/cfg/jbpm.tx.spring.cfg.xml,修改了spring事务拦截方式

 

<?xml version="1.0" encoding="UTF-8"?>

<jbpm-configuration spring="enabled">

  <process-engine-context>
  
    <command-service name="newTxRequiredCommandService">
      <retry-interceptor />
      <environment-interceptor policy="requiresNew" />
      <spring-transaction-interceptor policy="requiresNew" />
    </command-service>
    
    <!-- Default command service has a Spring transaction interceptor-->
    <command-service name="txRequiredCommandService">
      <retry-interceptor />
      <environment-interceptor />
      <spring-transaction-interceptor transaction-manager="transactionManager-jbpm"/>
    </command-service>
    
  </process-engine-context>

  <transaction-context>
    <transaction type="spring" />
    <hibernate-session current="true" />
  </transaction-context>

</jbpm-configuration>

 

OK!你可以试试效果了,希望对遇到同样需求的朋友有帮助!各位多多指教!

分享到:
评论
2 楼 xiaoNet 2013-03-26  
楼主 按你的方式配置好了 事务能管理 关键我现在有些自己的sql想执行,从这个sessionFactory里面获取不到同一个session 楼主遇到过吗
1 楼 zhangyuna1987 2011-05-20  
对我真的很有用,正是我急需,我试下

相关推荐

    Jbpm4.4 整合Spring Hibernate4

    Spring整合** Spring是一个全面的Java应用框架,它提供了依赖注入、AOP(面向切面编程)、事务管理等功能,极大地简化了企业级应用的开发。在Jbpm4.4中整合Spring,可以利用Spring的这些优势,比如将Jbpm的流程实例...

    JBPM4.4+spring+ext整合

    【JBPM4.4+Spring+EXT 整合详解】 JBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于处理业务流程自动化。版本4.4是JBPM的一个重要里程碑,它提供了强大的工作流设计、执行和监控能力...

    jbpm4.4 ibatis-spring 整合

    jbpm4.4 ibatis-spring 整合

    jbpm4.4spring.rar_jbpm4_jbpm4.4

    【标题】"jbpm4.4spring.rar_jbpm4_jbpm4.4" 提供的是一个关于JBPM4.4与Spring框架整合的实际应用案例。JBPM(Java Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行、管理和监控...

    jbpm4.4+spring2.5.6+hibernate 3.6+struts2.2.1 集成 保证运行成功

    Struts2与Spring整合良好,可以在Spring容器中管理Action类,实现依赖注入。 在"sshj"这个项目中,所有这些组件都将协同工作。Spring作为核心框架,负责管理整个应用的生命周期和组件依赖;Hibernate处理数据库交互...

    jbpm4.4 ssh 整合

    这篇文章将详细介绍如何整合SSH与JBPM 4.4,以及它们整合后能带来的优势。 首先,让我们了解SSH框架。Spring是一个全面的后端开发框架,它提供了依赖注入(DI)和面向切面编程(AOP),用于简化应用的复杂性。...

    Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合

    【JBPM4.4+Hibernate3.5.4+Spring3.0.4+Struts2.1.8整合】的整个过程涉及到多个关键组件的集成,这些组件都是Java企业级开发中的重要部分。首先,JBPM(Business Process Management)是一个开源的工作流引擎,它...

    jBPM4.4开发实例

    1. **与Spring集成**:jBPM可以与Spring框架无缝集成,提供更好的依赖注入和事务管理。 2. **规则引擎整合**:jBPM集成了Drools规则引擎,允许在流程中嵌入复杂的业务规则。 3. **数据库持久化**:jBPM支持多种...

    jbpm4.4+ssh整合

    jbpm4.4+ssh整合还需要安装插件进入到myeclipse中 将相应的jar文件放进去 就能够运行 jbpm4.4 jar ssh(strut2,hibernate3,spring3)三大框架整合的jar包 例子是 请假流程 代码中有很好的注释 便于初学者学习

    jBPM4.4与ssh整合

    **jBPM4.4与SSH整合详解** jBPM(Java Business Process Management)是一款开源的工作流管理系统,它提供了一套完整的解决方案,用于设计、执行和管理业务流程。SSH(Struts、Spring、Hibernate)是Java开发中的...

    jbpm4.4与ssh框架的整合

    ### jBPM 4.4与SSH框架的整合:深入解析与实践 #### jBPM:Java业务流程管理引擎 jBPM,全称为java Business Process Management,是JBoss旗下的一款开源工作流引擎,专为Java EE环境设计,提供了一种轻量级的解决...

    jbpm4.4+ssh

    【jbpm4.4+SSH】是一个集成的Java企业级应用框架,主要涉及的是工作流管理系统jbpm4.4与Spring、Struts2(SSH)三大框架的整合。jbpm4是一个开源的工作流程管理系统,它提供了流程定义、执行、监控和优化等一系列...

    JBPM4与Spring整合例子代码

    **JBPM4与Spring整合详解** JBPM4(Java Business Process Management 4)是一个开源的工作流管理系统,它提供了业务流程的建模、部署、执行和监控功能。Spring框架则是Java应用开发中的一个核心组件,主要负责依赖...

    jBPM4.4+ssh 整合配置及完整实例

    **jBPM4.4与SSH整合配置及完整实例详解** jBPM(Java Business Process Management)是一款开源的工作流管理系统,主要用于处理业务流程自动化。在本实例中,我们将讨论如何将jBPM 4.4版本与SSH(Spring、Struts、...

    jbpm4.4整合ssh代码

    jbpm4.4与SSH的整合是Java Web开发中常见的实践,它结合了jbpm强大的工作流管理功能和SSH的灵活性,为开发高效、可维护的企业级应用提供了可能。整合过程涉及多个层面,包括框架集成、数据源配置、业务逻辑封装以及...

    jbpm4.4与ssh2的项目整合所需jar包

    **jbpm4.4与SSH2的项目整合详解** jbpm4.4是JBoss公司提供的一个开源工作流管理系统,它允许开发者在Java应用程序中轻松地实现业务流程管理(BPM)。SSH2则是Struts2、Spring和Hibernate三个开源框架的组合,常用于...

    JBPM4.4+SSH整合

    **jbPM4.4与SSH整合详解** jbPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于业务流程的建模、执行和监控。版本4.4是jbPM的一个重要里程碑,提供了强大的流程定义和执行能力。SSH...

Global site tag (gtag.js) - Google Analytics