Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1009921
  • 博文数量: 152
  • 博客积分: 4937
  • 博客等级: 上校
  • 技术积分: 1662
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-05 16:55
文章分类

全部博文(152)

文章存档

2013年(12)

2012年(6)

2011年(58)

2010年(43)

2009年(1)

2008年(15)

2007年(17)

我的朋友

分类: Java

2008-06-09 17:40:04

JBPM中的起始任务
什么是起始任务
    所谓起始任务就是在开始状态(start-state)中定义的任务(task)。如下定义(注意:开始状态只能有一个任务)
 
 
    
    
 
 ...
起始任务的创建执行
如果定义了起始任务,就可以通过创建起始任务来启动流程的执行,而不是通过向根令牌发信号的方式。如下代码:
//创建起始任务
TaskInstance taskInstance = processInstance.getTaskMgmtInstance.createStartTaskInstance();
.........
//完成起始任务,继续流程执行
taskInstance.end();
起始任务的参与者
起始任务的任务实例在创建时,其参与者会自动从身份鉴定组件获取,这从Jbpm的源码中可以得知,如下代码片断:
public class TasgMgmtIntance extends ModuleInstance()
{
        ……
        public TaskInstance createStartTaskInstance()
        {
               ……
               taskInstance.setActorId(
                       SecurityHelp.getAuthenticatedActorId());
               return taskInstance;
        }
        ……
}
 
public abstract class SecurityHelp()
{
        public static String getAuthenticatedActorId()
        {
               ……
               AuthenticationService authenticationService = 
               jbpmContext.getService().get AuthenticationService();
               if(authenticationService != null)
                       actorId = authenticationService.getActorId();
               ……
               return actorId;
        }
}
身份鉴定组件是Jbpm提供的安全机制中用来鉴定参与者身份的,这是一个开放的接口,Jbpm基于的前提是把身份鉴定交给用户来完成。Jbpm自己有一个默认实现(在jbpm.cfg.xml中配置),针对于这个默认实现,可以使用jbpmContext.setActorId(actorId)来设置已经过鉴定的参与者(可查看JbpmContext类相关源码),创建起始任务时自动取的参与者就是通过jbpmContext.setActorId(actorId)所设置的(注意:具体所设置的参与者的鉴定过程需要用户在事先已经完成;这个设置只存在于所创建的jbpmContext生命周期内)。有关身份鉴定更多信息请查阅相关资料。
 
当然我们也可以调用taskInstance.setActorId()自己设定起始任务的参与者。
起始任务的用途
l       流程起始需要一个过程
当流程的起始不单单只是一个状态,而需要一个过程的时候,我们需要起始任务。例如:一个请假审批流程,用户填写请假单进行保存,而不是即刻进行流程流转执行;而该用户下次登录时应该可以看到自己未完成的请假单,并继续流程执行(提交审批)。这时我们就可以在用户首次填写请假单进行保存时,创建流程实例及起始任务,而当用户再次登录就可以看到自己未完成的工作,选择提交审批时完成任务,并继续流程的流转。
l       捕获流程的发起者
在起始任务中使用泳道,来捕获流程的发起者。当起始任务的任务实例创建时,参与者会自动被存储在起始任务的泳道中,在以后的代码中可以通过processInstance.getTaskMgmtInstance().getSwimlaneInstance(“swimlaneName”).getActorId()获取到发起者。
阅读(998) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~