JBPM与SPRING事务整合深度历险之任务调度<<求救SOS>>
|
skyfly2424
2008-04-25
最近作OA项目,整合了JBPM流程引擎,遇到了一个无法解决的问题,抛出来大家一起研究,希望在这个领域研究有一定水平的朋友能够给与解决!!! 问题描述: spring 与 jbpm 进行了整合,参考了这个帖子: http://betafox.javaeye.com/blog/177649 系统正常运行! 当在JBPM引擎中增加了Timer节点(定时任务),并在web.xml中增加了相应的servlet进行调度器的启动,参考如下帖子:http://yang52081.javaeye.com/blog/172222 此时出现了session问题。 问题分析: 1. 在web.xm中我没有增加jbpmFilter过滤器,因为jbpm只是我系统的一个业务功能模块,所以对于它jbpmContext的创建参考springmodules 的 jbpmTemplate 的实现将jbpmcontext对象的控制放在具体业务bo函数的执行期 在web.xml中使用了org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 进行长session管理 2. 在jbpm.cfg.xml文件中 进行了如下配置 <service name="persistence"> 测试一切正常, 在执行到bo方法时采用类似jbpmTemplete的回调函数得到新创建的jbpmcontext对象,由于上面的配置 这个对象的使用到的hibernate session 使用当前已经存在的由spring filter 开启的session, 并且不会再给这个session开启事务, 当然这个session 的事务已经由spring 开启了,如果此时将 <field name="isTransactionEnabled"> 现在问题是由于JobExecutorServlet 在init 时要开启 任务调度器,而这个调度器在多线程处理job后都会根据DbPersistenceServiceFactory 对象配置信息来创建service 进而打开 hibernate session 来保存数据库操作,此时这个service 工厂配置的是 使用当前session + 不创建事务 , 此时问题出现了, 因为filter 的init 方法在初始化的时候不经过spring的filter,所以当前不会有session,如果想试着创建新的session,hibernate也不允许创建没有事务的session。 我试图将DbPersistenceServiceFactory配置信息改成如下: <service name="persistence"> 这样让jbpm创建jbpmcontext时创建一个新的hibernate session , 当业务层bo函数在使用这个Jbpmcontext进行保存流程操作时出示死锁,这时存在了两个session (spring创建的 和 jbpm创建的) 问题再现等待解决, 也许是我整合有误,诚信求教!
|
|
|
skyfly2424
2008-04-29
是我的问题太简单还是没有人能够解决呢?
|
|
|
skyfly2424
2008-05-25
这个问题到今天还没有解决,但新的开发安排中已经它列入的工作项中,否则如果不解决调度问题,jbpm的异步功能也将形同虚设,但愿一些顺利.
问题解决后回来结贴! 如果期间大家有可行的方法请告诉我,谢谢! |
|
|
ppig
2008-05-26
可不可以扩展JobExecutorServlet ,让他在创建session之前先创建trasaction?
没用过JobExecutorServlet,呵呵 |
|
|
skyfly2424
2008-05-28
楼上: 调度的session问题是由于每个处理job的子线程需要创建一个新的session,而所有的session都是客户访问时通过spring的过滤器来创建的,所以后会拿不到.
感谢回帖.. 继续等待... |

