JBPM 工作流引擎 JBPM指南 例子:任务指派实例(3.4)

声明:

本人EVeryVeryPoor,又是刚刚开始学习JBPM工作流引擎,对原文及概念等理解不当的地方,请网友不吝赐教,吾将及时修改和更正。

本文仅是本人自己学习JBPM,对JBPM指南的学习理解过程。

还望可以对入门者有所帮助。共享之。

需要中英文对照Word文档者请联系:gutengcom@hotmail.com或留下邮件地址。

 

34任务指派实例

在下面的例子里,我们将向您展示如何能给用户分配任务。因为在jBPM工作流

引擎和组织机构模型之间是分离的,对计算参与者的表达语言将总是被限制的。

因此,你必须指定一个任务处理的实现,包括计算任务参与者。

 

public void testTaskAssignment() {
     
     
  
       
       
/*
       
       
这个下面展示的业务是基于hello world业务之上。 
        
这个状态节点将被任务节点取代。这个任务节点是一个在JPDL中的节点,它表现为一个等待状态和在业务能继续被执行之前,生成的任务被完成。 
        
*/
     
     
  ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
     
     
    "<process-definition name='the baby process'>" +
     
     
    "  <start-state>" +
     
     
    "    <transition name='baby cries' to='t' />" +
     
     
    "  </start-state>" +
     
     
    "  <task-node name='t'>" +
     
     
    "    <task name='change nappy'>" +
     
     
    "      <assignment class='org.jbpm.tutorial.taskmgmt.NappyAssignmentHandler' />" +
     
     
    "    </task>" +
     
     
    "    <transition to='end' />" +
     
     
    "  </task-node>" +
     
     
    "  <end-state name='end' />" +
     
     
    "</process-definition>"
     
     
  );
     
     
  
     
     
  
       
       
//创建一个业务定义的执行。
     
     
  ProcessInstance processInstance = 
     
     
      new ProcessInstance(processDefinition);
     
     
  Token token = processInstance.getRootToken();
     
     
  
     
     
  
       
       
/*
       
       
我们启动业务执行,离开在它缺省转换的启动状态上。 
        
*/
     
     
  token.signal();
     
     
  
       
       
/*
       
       
这个signal方法将阻止它继续,直到业务执行进入一个等待状态。在这个情况下,这是个任务节点。 
        
*/
     
     
  assertSame(processDefinition.getNode("t"), token.getNode());
     
     

   
   
    
     
   
   
  
       
       
/*
       
       
当执行到达任务节点,一个任务 ‘change nappy’被创建和 
        
NappyAssignmentHandler被调用确定任务被分配给谁。 
        
NappyAssignmentHandler将返回’papa’. 
        
*/
     
     

   
   
    
     
   
   
 
       
       
/*
       
       
在真实的环境里,这个任务被在org.jbpm.db.TaskMgmtSession 
        
里面的方法从数据库中取出。当我们不想包括例子里的持久化复杂性时,我 
        
们将取得第一个业务实例的任务例子。(在测试情节中我们只有一个实例) 
        
*/
     
     
  TaskInstance taskInstance = (TaskInstance)  
     
     
      processInstance
     
     
        .getTaskMgmtInstance()
     
     
        .getTaskInstances()
     
     
        .iterator().next();
     
     

   
   
    
     
   
   
  
       
       
//现在我们检查是否taskInstance确实被分配给’papa’.
     
     
  assertEquals("papa", taskInstance.getActorId() );
     
     
  
     
     
  
       
       
//现在我们猜想’papa’已经完成了职责,标记这个任务完成了。
     
     
  taskInstance.end();
     
     
  
       
       
//当这些是最后要作的任务时,完成的任务触发器将延续这个业务实例的执行。 
        

   
   
    
     
   
   
  
  assertSame(processDefinition.getNode("end"), token.getNode());
}

待续……

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值