最近刚开始学习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="你的事务管理器" />
分享到:
相关推荐
jbpm4.4入门学习的好文档 1.工作流基础 2.开发环境 3.核心概念与相关api 4.processenginee serviceapi 5.管理流程定义 6.执行流程实例 7.流程定义语言 8.应用 与其他框架的集成
版本有点老,不过还可以用。4.4与5.4还是蛮大的,只是苦于现在找不到合适的文档。
自从前些日子发布了如何整合JBPM4.4+ssh2后,有些朋友问我有没有一个完整一点的实例,我看过贩卖你的jbpm的教程,我就参考那个请假的实例把它改装成ssh2版的吧。顺便也加入了模拟不同的角色登陆后能接到不同的待办...
可以直接运行,两张表的sql要设置下
Jbpm3.1.x的时候,如果我们要实现Jbpm与Spring结合使用需要借助于SpringModule中spring-modules-jbpm31.jar来实现。目前Jbpm的最新版本是3.2.1,对于这一版本如果我们要实现其与Spring结合使用,同样我们也可以借助...
jpbm4.4 用户手册 中文 chm 工作流
JPBM4.4入门小例子,适合刚开始准备学工作流的筒子们。。
包括jpbm4.4的开发手册 jpbm4.x开发手册 jpbm用户手册 jpbm3.x开发手册 jpbm3安装配置手册 jpbm4安装手册 jpbm学习笔记 jpbm最佳实践
这个实例,是将strust2,hibernate,spring,jbpm4.4完美整合好的例子,可供大家参考使用!
讲述如何修改jbpm4.4的配置,并讲了如何使用浏览器设计工作流
内含jbpm4.4的会签实例,使用customactivity实现,并且内含有使用的丰富工具类,有兴趣的朋友下载学习~
JBoss+jBPM+jPDL用户开发手册_3.2.3 JPBM 开发指南
myeclipse 安装 jpbm 插件 myeclipse 安装 jpbm 插件
这是JPBM从安装配置到实际项目的实战经验总结,希望资料能给您带来较大的帮助,同时减少您查找资料的时间。相信这些资料一定会给您带来学习JPBM的捷径。
深入浅出JPBM 源代码 深入浅出JPBM 源代码 深入浅出JPBM 源代码
jpbm eclipse插件3.0.13
工作流jpbm集成在ssh中(非原创),也是从网上收集得.
spring学习,java spring mvc 学习代码,文档,请查看,spring注解,
jpbm文件流依赖库,jbpm-jpdl-3.2.GA\jbpm-jpdl.jar
NULL 博文链接:https://fly-sky.iteye.com/blog/1070247