`

JPBM4.4与Spring的整合

阅读更多
    最近刚开始学习JBPM4.4,安装和运行其自带的例子均没有碰到什么问题。
   
    但是,和项目整合的时候需要与原有的系统进行整合。所以,问题来了:
    1、JBPM4.4到底需要哪些JAR包,jar包冲突了怎么办呢?
    2、JPBM4.4怎么和原有的Spring配置整合在一起呢?

    首先,第一个问题一直都是很困扰JAVA开发者的一个问题(jar包的依赖关系,版本冲突等等问题)。我认为有两种无奈的解决思路: 1、不管三七二十一,把所需的jar包一股脑的扔进去,等发生冲突了,再一个个剔除。2、不管这个框架需要什么jar包,直接运行你写的单元测试例子,查看出错信息一个个去将缺少的包加入进来。幸运的是我们原来的项目采用maven管理项目,所以我采用第二种思路,很轻松的就将jbpm4.4所需的最小依赖包加入进来了。
  
    那么,接下来就是和spring的配置问题了。我查看了JPBM4.4的官方开发者指南(http://docs.jboss.com/jbpm/v4/devguide/html_single/)的第17节(Chapter 17. Spring Integration)中spring的配置描述 :
   第一步骤(配置spring的事务管理):
  
The easiest way to integrate Spring with jBPM is to import the jbpm.tx.spring.cfg.xml in your jbpm.cfg.xml file:(最最简单的方法就是,直接在jbpm.cfg.xml文件中导入jbpm.tx.spring.cfg.xml)

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

   第二步骤(生成ProcessEngine对象,有了这个我们就可以操纵整个JBPM引擎了):
 
  <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper">
      <property name="jbpmCfg" value="org/jbpm/spring/jbpm.cfg.xml"></property>
  </bean>

  <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
  

    这样我就配置好了吗?如果我们运行自己的单元测试,会发现真的配置可以运行。
 
    第二步骤没什么难理解的就是spring的DI(依赖注入)生成ProcessEngine对象而已。第一步骤却是有点让人迷惑。为什么在jbpm.cfg.xml中引入一个jbpm.tx.spring.cfg.xml文件就可以使用到事务管理呢?平常我们配置的不都是要指定事务拦截器,并指定要拦截的方法吗?
   
    好吧,那就看看jbpm.tx.spring.cfg.xml中到底干了些什么吧。我在jbpm-pvm-4.4.jar包中发现了该文件
<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 />
    </command-service>
    
  </process-engine-context>

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

</jbpm-configuration>

  
    从xml标签的字面意思可以猜测<transaction-context>内的属性配置了使用spring事务拦截器。在<command-service>标签中的<spring-transaction-interceptor /> 应该就是要指定的spring事务拦截器了。但是,这个spring-transaction-interceptor什么都没指定,怎么知道到底要用我们项目中的哪个事务管理器呢?(这个问题确实挺让我困扰的。只怪了当时只看了最简单的配置,能跑起来就不了了之了。) 好吧,那就继续去官方手册找找吧。我发现了一行话:The spring-transaction-interceptor will look by default for a PlatformTransactionManager implementation by doing a search by type on the defined beans.(这个spring拦截器默认根据类型(by type)查找实现了PlatformTransactionManager接口的Bean并注入进来了。)而刚好我在项目中只配置了一个org.springframework.orm.hibernate3.HibernateTransactionManager的事务管理bean。而这个bean又是一个AbstractPlatformTransactionManager的实现类。所以。。。给它用by type的形式神不知鬼不觉的注入进来了。(一开始学习的时候觉得配置的方式蛮好的,有的时候找问题,配置的东西真的给人调试,查找带来太大的麻烦,该死的XML,该死的配置,发个牢骚O(∩_∩)O哈哈~)。

    那还有一个问题:如果我们项目中配置了多个事务管理器,那spring事务拦截倒是用的是哪个事务管理器呢?我们如果想指定的话应该怎么指定呢?

    为了查看多个事务管理器的情况下到底用哪个,我写了两个测试事务管理类,都继承org.springframework.orm.hibernate3.HibernateTransactionManager并重写了doCommit方法,在该方法中添加一行日志信息(比如:我调用了事务管理器1(或2))。并在配置文件中配置了这两个事务管理bean。经单元测试例子运行后查看日志得知:默认使用第一个实例化的事务管理bean。

    如果想使用其他个事务管理的话,可以指定的。怎么指定,官方指南也写了。只要指定transaction-manager即可。
    <spring-transaction-interceptor transaction-manager="你的事务管理器" />



分享到:
评论
1 楼 -惜帅- 2011-09-27  
不错,正在学习中...

相关推荐

    jpbm4.4学习文档及数据库表结构

    jbpm4.4入门学习的好文档 1.工作流基础 2.开发环境 3.核心概念与相关api 4.processenginee serviceapi 5.管理流程定义 6.执行流程实例 7.流程定义语言 8.应用 与其他框架的集成

    jpbm4.4开发指南,做工作流的

    jBPM 4.4开发指南是一份指导文档,主要针对使用jBPM 4.4版本进行工作流开发的用户。 ### jBPM 4.4开发指南概述 #### 目标读者 这份指南主要面向有一定工作流概念和经验的开发者,特别是那些希望使用jBPM 4.4版本...

    jbpm4.4+ssh

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

    ssh2+jbpm4.4 完整请假流程

    自从前些日子发布了如何整合JBPM4.4+ssh2后,有些朋友问我有没有一个完整一点的实例,我看过贩卖你的jbpm的教程,我就参考那个请假的实例把它改装成ssh2版的吧。顺便也加入了模拟不同的角色登陆后能接到不同的待办...

    Myeclipse8.6集成jBPM4.4插件

    集成jBPM后,你可以进一步探索如何与其他框架(如Spring、Hibernate)结合,实现业务流程与数据访问层、服务层的无缝集成。此外,jBPM还支持流程变量、事件驱动、工作流引擎的远程调用等功能,这些都是在实际项目中...

    spring整合JPBM3.2

    在Jbpm3.1.x时期,Spring与Jbpm的整合主要依赖于`spring-modules-jbpm31.jar`,这个库来自于spring-modules-0.8工程包。即使在Jbpm3.2中,虽然这个包原本是为3.1.x设计的,但仍然可以用来帮助完成整合。 首先,你...

    jbpm用户手册(中文)chm

    jpbm4.4 用户手册 中文 chm 工作流

    JBPM4.4 入门小例子

    JPBM4.4入门小例子,适合刚开始准备学工作流的筒子们。。

    ssh+jbpm整合好的demo

    JBPM4.4版本提供了流程定义语言(BPMN 2.0)、图形化建模工具以及与数据库的紧密集成。开发者可以通过API或者服务调用来控制流程的执行。 在"ssh+jbpm整合好的demo"中,这四个组件通常会这样协作: 1. **Struts2**...

    JBPM4.4会签实例

    7. **监控与管理**:管理员可以监控流程实例的状态,查看每个会签节点的进度,如果需要,还可以干预流程,比如重新分配任务或者强制结束会签。 通过学习"CountersignDemo"这个实例,你可以深入了解JBPM4.4的会签...

    springmvc_jpbm5_document.zip_spring mvc

    7. **springMVC+Hibernate 使用配置**:这部分可能介绍了如何整合Spring MVC与Hibernate ORM框架,实现数据访问层的处理,包括配置文件、数据访问对象(DAO)的创建以及事务管理。 8. **spring3_0注解**:Spring ...

    JPBM实战经验以及相关参考文档

    JPBM的主要特点包括灵活的流程定义语言(JPDL)、强大的事件处理机制以及与各种持久化层的集成能力。 在安装配置方面,"jBPM-jPDL学习笔记—框架设计简介.doc"和"jBPM-JPDL v3.2环境部署——发布到Tomcat + MySQL....

    流程控制应用JPBM

    3. **mysql-connector-java-3.1.13-bin.jar** - 这是MySQL数据库的Java连接驱动,用于在Java程序中与MySQL数据库进行交互,存储和检索流程数据。 4. **standard.jar** - 可能包含JSTL(JavaServer Pages Standard ...

    JPBM 开发手册 开发指南

    jBPM不仅提供了一整套工作流引擎,还包括了可视化建模工具、监控和跟踪工具,以及与Java、Spring、Hibernate等框架的紧密集成。 jPDL(jBPM Process Definition Language)是jBPM特有的流程定义语言,用于描述业务...

    深入浅出JPBM 第9章相关源代码

    7. **配置与集成**:JPBM通常需要与数据库、工作流引擎、规则引擎等组件进行集成。源码中的配置文件(如`jbpm.cfg.xml`)会详细说明这些集成的细节,如数据源设置、事务管理策略等。 8. **工作流引擎**:JPBM的核心...

    myeclipse中安装jpbm插件

    ### myeclipse中安装jpbm插件 #### 背景介绍 在软件开发过程中,集成各种插件是提高工作效率的重要手段之一。对于使用MyEclipse进行Java开发的工程师而言,安装JBPM(Business Process Management)插件可以极大地...

    jpbm公文流转实现

    "jpbm公文流转实现"是一个专门针对这一需求开发的功能模块,旨在提高工作效率,减少人为错误,确保信息的安全与准确。在这个系统中,公文管理功能的实现主要包括公文的增删操作以及简单的公文流转过程。 首先,我们...

    jpbm eclipse插件

    在这个插件中,UI.jar负责提供与用户交互的图形界面,使开发者能够直观地拖放元素来构建流程模型。 4. **plugin.xml** 在Eclipse插件开发中,`plugin.xml`是配置文件,它定义了插件的元数据、依赖关系、所提供的...

    JPBM的学习文档,学习工作流的朋友可以看看

    《JBPM工作流开发指南》是一份详尽的文档,旨在帮助开发者理解和使用JPBM这一工作流管理系统。JPBM(JBoss Business Process Management Suite)是Red Hat公司开发的一款开源工作流引擎,它提供了业务流程管理的全套...

Global site tag (gtag.js) - Google Analytics