论坛首页 Java版 JBoss

Jbpm的BUG?

浏览 300 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-04-01 关键字: 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吗?!

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);
	}

}
   
时间:2008-04-28
你好,我也遇到了这个问题,请问你怎么用这个DbPersistenceService,DbPersistenceServiceFactory,我是JBPM新手,请指教,谢谢!
   
0 请登录后投票
论坛首页 Java版 JBoss

跳转论坛:
JavaEye推荐
    快速回复 引用上一条消息 (Alt+S)