JBPM3.2学习1

最近维护一个项目,由于项目比较老了,所以用的jbpm3.2,自学了下:

1、创建jbpm数据库表:

JbpmConfiguration.getInstance().createSchema();

·2、部署流程(即把流程定义对象持久化到数据库中):

首先,创建JbpmConfiguration和JbpmContext对象,其中JbpmContext对象可以拿到是hibernate session的封装,提供了对jbpm对象的持久化操作。

JbpmConfiguration cf = JbpmConfiguration.getInstance();
JbpmContext context = cf.createJbpmContext();
ProcessDefinition pd = ProcessDefinition.parseXmlResource("test/prcessDefinition.xml");
try{
   context.deployProcessDefinition(pd);
}catch(Exception e){
   context.setRollbackOnly();
}finally{
   context.close();
}

 部署完成后,流程中的节点信息及任务信息以及transition都被啊到数据库 

3、创建流程实例:

Document doc  = new Document();

doc.setName("123");
context.getSession().save(doc);
//1、从数据库加载ProcessDefinition对象
ProcessDefinition pd = context.getGraphSession().findLatestProcessDefinition("test");
//2、根据ProcessDefinition,创建流程实例
ProcessInstance pi = new ProcessDefinition(pd);
context.save(pi);
//3、创建流程实例变量
pi.getContextInstance().setVariable("doc",doc.getId());

 4、将流程提交到第一个环节

pi.signal();

 5、查询当前所处的环节

pi.getRootToken().getNode().getName();

 6、任务分配

当流程进入一个任务节点,JBPM根据任务节点所定义的任务分配规则,创建TaskInstance对象,

并且建立TaskInstance对象和ProcessInstance对象之间的联系,设置 TaskInstance对象的actorId属性的值,这称为任务分配。

/*
*底层sql:select ti from TaskInstance as ti where ti.actorId=:actorId
*  and ti.isSuspended !=true and ti.isOpen=true;
*/
List tasks = context.getTaskMgmtSession().findTaskInstance(actorId);


for(Iterator iter = tasks.iterator();iter.hasNext();){
     TaskInstance ti = (TaskInstance )iter.next();
     
}

 7、通过TaskInstance流转到下一个节点

 

List tasks = context.getTaskMgmtSession().findTaskInstance(actorId);
for(Iterator iter = tasks.iterator();iter.hasNext();){
     TaskInstance ti = (TaskInstance )iter.next();
     ProcessInstance pi = ti.getProcessInstance();
     Integer docId = pi.getContextInstance().getVariable("docId");
     if(docId.equals(documentId)){
        //在缺省情况下,调用end方法有两个目的,1:结束TaskInstance 对象
        //2、触发当前token对象的signal方法,使得流程继续向下流转
          ti.end();
     }
}

 

猜你喜欢

转载自forestyang.iteye.com/blog/1926339
今日推荐