2008-04-01
Jbpm的BUG?
关键字: jbpm
我们将Jbpm与Spring整合的过程中发现一个问题,经过晚上的Debug终于找到了问题的原因。
我们使用OpenSessionInView这个拦截器,所以请求结束后Session会被关闭。当再次请求时JBpm就会跑出异常,Session is closed。可是其他部分都很正常,开始以为是什么地方不小心把Session给关了,debug后似乎一切正常。其实这个问题之前作UnitTest时就发现了,不过当时以为是TestCase的配置有问题就没太在意。
然后不得已只能将hibernate的log打开,一行一行的看,结果发现DbPersistenceService中几个Module的Session竟然与DbPersistenceService的不一样。这些终于有头绪了。打开DbPersistenceService的源代码一看,原来DbPersistenceService的setSession方法没有同时设置其它几个Module的Session,晕!这是JBpm的bug吗?!
好在Jbpm设计优秀,可以轻松替换掉这个实现。我做了一个简单的修改override了setSession,问题顺利解决。
当然还有它的工厂类
我们使用OpenSessionInView这个拦截器,所以请求结束后Session会被关闭。当再次请求时JBpm就会跑出异常,Session is closed。可是其他部分都很正常,开始以为是什么地方不小心把Session给关了,debug后似乎一切正常。其实这个问题之前作UnitTest时就发现了,不过当时以为是TestCase的配置有问题就没太在意。
然后不得已只能将hibernate的log打开,一行一行的看,结果发现DbPersistenceService中几个Module的Session竟然与DbPersistenceService的不一样。这些终于有头绪了。打开DbPersistenceService的源代码一看,原来DbPersistenceService的setSession方法没有同时设置其它几个Module的Session,晕!这是JBpm的bug吗?!
public class DbPersistenceService implements Service, PersistenceService {
public void setSession(Session session) {
this.session = session;
log.debug("injecting a session disables transaction");
isTransactionEnabled = false;
}
}
好在Jbpm设计优秀,可以轻松替换掉这个实现。我做了一个简单的修改override了setSession,问题顺利解决。
public class DbPersistenceService extends
org.jbpm.persistence.db.DbPersistenceService {
/**
*
*/
private static final long serialVersionUID = -7021022287407291604L;
public DbPersistenceService(
DbPersistenceServiceFactory persistenceServiceFactory) {
super(persistenceServiceFactory);
}
@Override
public void setSession(Session session) {
super.setSession(session);
graphSession = null;
taskMgmtSession = null;
jobSession = null;
contextSession = null;
loggingSession = null;
}
}
当然还有它的工厂类
public class DbPersistenceServiceFactory extends
org.jbpm.persistence.db.DbPersistenceServiceFactory {
private static final Log log = LogFactory.getLog(DbPersistenceServiceFactory.class);
/**
*
*/
private static final long serialVersionUID = 6711179796157080648L;
@Override
public Service openService() {
DbPersistenceServiceFactory.log.debug("creating persistence service");
return new DbPersistenceService(this);
}
}
评论
zhu_chen001
2008-05-26
我也到同样的问题而放弃了jbpm,回去看看能否解决问题
yujianqiu
2008-05-26
legend_122,
在Spring的配置文件中配置。下面是我们的配置文件,你可以参考一下。
在Spring的配置文件中配置。下面是我们的配置文件,你可以参考一下。
<bean id="persistenceServiceFactory" class="com.agfa.he.sh.workflow.impl.DbPersistenceServiceFactory">
<property name="sessionFactory" ref="mySessionFactory" />
</bean>
<bean id="jbpmContext" class="org.jbpm.JbpmContext">
<constructor-arg index="0">
<bean class="org.jbpm.svc.Services">
<constructor-arg index="0">
<map>
<entry>
<key>
<value>persistence</value>
</key>
<ref bean="persistenceServiceFactory" />
</entry>
<entry>
<key>
<value>tx</value>
</key>
<ref bean="txServiceFactory" />
</entry>
</map>
</constructor-arg>
</bean>
</constructor-arg>
<constructor-arg index="1" ref="jbpmObjectFactory"/>
</bean>
legend_122
2008-04-28
你好,我也遇到了这个问题,请问你怎么用这个DbPersistenceService,DbPersistenceServiceFactory,我是JBPM新手,请指教,谢谢!
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 858 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
问题:列举Spring框架中使 ...
呵呵。。无中生有。有中还无啊。 模式只不过是别人经验的总结。也许经验丰富了。 ...
-- by penghao122 -
问题:列举Spring框架中使 ...
Factory Method Template MethodStrategy s ...
-- by fantasybei -
问题:列举Spring框架中使 ...
facadeabstract factorydelegateadapterabs ...
-- by willim -
问题:请写一段代码说明如 ...
TomHornson 写道http://www.ibm.com/develope ...
-- by suke -
问题:请写一段代码说明如 ...
yujianqiu 写道 问题:请写一段代码说明如何实现Singleton模式 ...
-- by wolfbrood






评论排行榜