WEB开发网
开发学院软件开发Java JBPM数据库中取得这个流程实例,如果有没有完成的... 阅读

JBPM数据库中取得这个流程实例,如果有没有完成的流程,就让它进入下一步

 2007-12-23 12:24:34 来源:WEB开发网   
核心提示:// 这里的代码可以放在消息驱动Bean里面,// 让我们开始一个sessionJbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();// 在持久化session上开始一个事务的时候,JBPM数据库中取得这个流程实例,如果有没有完成的流程,就让它进

  // 这里的代码可以放在消息驱动Bean里面。

 // 让我们开始一个session
 JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();
 // 在持久化session上开始一个事务的时候,这里有可使用WEB应用中的DataSource来取得一个数据库session.
 jbpmSession.beginTransaction();
 GraphSession graphSession = jbpmSession.getGraphSession();

 // 首先,我们需要在数据库中把流程提取出来.
 // 这里有很多方法可以用来取得我们需要的流程实例。
 // 一个最简单方法就是在流程的实例列表里面查询。
 PRocessDefinition processDefinition = graphSession
  .findLatestProcessDefinition("hello world");

 // 现在查询所有的流程实例。
 List<ProcessInstance> processInstances = graphSession
  .findProcessInstances(processDefinition.getId());

 // 我们知道在这里单元测试里面只有一个执行,所以下面我们直接get(0)。
 // 而在实际工作中,我们这里需要通过ID来确定我们所需要的流程实例。
 ProcessInstance processInstance = null;
 for (ProcessInstance pi : processInstances) {

  if (!pi.hasEnded()) {
  pi.signal();
  //AssertJUnit.assertTrue(pi.hasEnded());
  }

}

 // 好了,现在我们可以继续执行。注意,这里processInstance
 // processInstance.signal();

 // 完成signal以后,我们的流程就到达end-state状态点了。
 // AssertJUnit.assertTrue(processInstance.hasEnded());

 // 现在可以更新数据库里面流程状态点。
 // graphSession.saveProcessInstance(processInstance);

 // 事务提交
 jbpmSession.commitTransaction();
 // 关闭session
 jbpmSession.close();

(出处:http://www.cncms.com)


Tags:JBPM 数据库 取得

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接