背景:最近项目要用到工作流,在网上搜了一些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!你可以试试效果了,希望对遇到同样需求的朋友有帮助!各位多多指教!
分享到:
相关推荐
Spring整合** Spring是一个全面的Java应用框架,它提供了依赖注入、AOP(面向切面编程)、事务管理等功能,极大地简化了企业级应用的开发。在Jbpm4.4中整合Spring,可以利用Spring的这些优势,比如将Jbpm的流程实例...
【JBPM4.4+Spring+EXT 整合详解】 JBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于处理业务流程自动化。版本4.4是JBPM的一个重要里程碑,它提供了强大的工作流设计、执行和监控能力...
jbpm4.4 ibatis-spring 整合
【标题】"jbpm4.4spring.rar_jbpm4_jbpm4.4" 提供的是一个关于JBPM4.4与Spring框架整合的实际应用案例。JBPM(Java Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行、管理和监控...
Struts2与Spring整合良好,可以在Spring容器中管理Action类,实现依赖注入。 在"sshj"这个项目中,所有这些组件都将协同工作。Spring作为核心框架,负责管理整个应用的生命周期和组件依赖;Hibernate处理数据库交互...
这篇文章将详细介绍如何整合SSH与JBPM 4.4,以及它们整合后能带来的优势。 首先,让我们了解SSH框架。Spring是一个全面的后端开发框架,它提供了依赖注入(DI)和面向切面编程(AOP),用于简化应用的复杂性。...
【JBPM4.4+Hibernate3.5.4+Spring3.0.4+Struts2.1.8整合】的整个过程涉及到多个关键组件的集成,这些组件都是Java企业级开发中的重要部分。首先,JBPM(Business Process Management)是一个开源的工作流引擎,它...
1. **与Spring集成**:jBPM可以与Spring框架无缝集成,提供更好的依赖注入和事务管理。 2. **规则引擎整合**:jBPM集成了Drools规则引擎,允许在流程中嵌入复杂的业务规则。 3. **数据库持久化**:jBPM支持多种...
jbpm4.4+ssh整合还需要安装插件进入到myeclipse中 将相应的jar文件放进去 就能够运行 jbpm4.4 jar ssh(strut2,hibernate3,spring3)三大框架整合的jar包 例子是 请假流程 代码中有很好的注释 便于初学者学习
**jBPM4.4与SSH整合详解** jBPM(Java Business Process Management)是一款开源的工作流管理系统,它提供了一套完整的解决方案,用于设计、执行和管理业务流程。SSH(Struts、Spring、Hibernate)是Java开发中的...
### jBPM 4.4与SSH框架的整合:深入解析与实践 #### jBPM:Java业务流程管理引擎 jBPM,全称为java Business Process Management,是JBoss旗下的一款开源工作流引擎,专为Java EE环境设计,提供了一种轻量级的解决...
【jbpm4.4+SSH】是一个集成的Java企业级应用框架,主要涉及的是工作流管理系统jbpm4.4与Spring、Struts2(SSH)三大框架的整合。jbpm4是一个开源的工作流程管理系统,它提供了流程定义、执行、监控和优化等一系列...
**JBPM4与Spring整合详解** JBPM4(Java Business Process Management 4)是一个开源的工作流管理系统,它提供了业务流程的建模、部署、执行和监控功能。Spring框架则是Java应用开发中的一个核心组件,主要负责依赖...
**jBPM4.4与SSH整合配置及完整实例详解** jBPM(Java Business Process Management)是一款开源的工作流管理系统,主要用于处理业务流程自动化。在本实例中,我们将讨论如何将jBPM 4.4版本与SSH(Spring、Struts、...
jbpm4.4与SSH的整合是Java Web开发中常见的实践,它结合了jbpm强大的工作流管理功能和SSH的灵活性,为开发高效、可维护的企业级应用提供了可能。整合过程涉及多个层面,包括框架集成、数据源配置、业务逻辑封装以及...
**jbpm4.4与SSH2的项目整合详解** jbpm4.4是JBoss公司提供的一个开源工作流管理系统,它允许开发者在Java应用程序中轻松地实现业务流程管理(BPM)。SSH2则是Struts2、Spring和Hibernate三个开源框架的组合,常用于...
**jbPM4.4与SSH整合详解** jbPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于业务流程的建模、执行和监控。版本4.4是jbPM的一个重要里程碑,提供了强大的流程定义和执行能力。SSH...