JBPM与SPRING事务整合深度历险之任务调度<<求救SOS>>
skyfly2424
2008-04-25
最近作OA项目,整合了JBPM流程引擎,遇到了一个无法解决的问题,抛出来大家一起研究,希望在这个领域研究有一定水平的朋友能够给与解决!!! 问题描述: spring 与 jbpm 进行了整合,参考了这个帖子: http://betafox.iteye.com/blog/177649 系统正常运行! 当在JBPM引擎中增加了Timer节点(定时任务),并在web.xml中增加了相应的servlet进行调度器的启动,参考如下帖子:http://yang52081.iteye.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的过滤器来创建的,所以后会拿不到.
感谢回帖.. 继续等待... |
|
yuyanshan
2008-08-26
这个帖子帖的好呀,真不知道那些说自己将spring和jbpm整合完成的人是怎么做的。要想在SSH上用好JBPM我想事务统一或是说hibernate session统一将是一个大问题。我现在也是碰到这个问题,因为这个问题还没解决所以项目本来要用它的现在也还在考虑中了。楼主有空聊聊,我刚研究jbpm,可以的话指点一下
|
|
tigerlg
2008-09-01
JobExecutorServlet 是可以做的,在initWebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext());
temp =(JbpmTemplate)wac.getBean("jbpmTemplate"); System.out.println("------------"+temp); jbpmConfiguration=temp.getJbpmConfiguration(); JpbmJobExecutor.setJbpmConfiguration(jbpmConfiguration,temp); jbpmConfiguration.startJobExecutor(); 写一个 JpbmJobExecutor extends JobExecutor. 可以实现事务的统一,但 JobExecutorServlet 是提醒作业,如在每个任务都加上timer,效率是低的,还不如做个quartz 个人观点! |
|
wys06521
2012-06-06
请问,您这个问题解决了吗
|
相关讨论
相关资源推荐
- operating_system_tutorial.pdf
- ROS(Robot Operating System) Tutorial 学习记录
- Write Your Own Operating System Tutorial(7)
- Write Your Own Operating System Tutorial(6) (转)
- Write Your Own Operating System Tutorial(中文版) - 简介
- OSTEP - Operating Systems Three Easy Pieces
- Write Your Own Operating System Tutorial(6)
- Write Your Own Operating System Tutorial(中文版) 简介 (转)
- Write Your Own Operating System Tutorial(2)
- Write Your Own Operating System Tutorial(1)