Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > jbpm知识点——tasknode
【标  题】:jbpm知识点——tasknode
【关键字】:jbpm,tasknode
【来  源】:http://blog.csdn.net/jeffen2006/archive/2006/10/19/1340989.aspx

jbpm知识点——tasknode

Your Ad Here

同fork等一样是一种节点类型。任务节点是jbpm中一个非常重要的概念,一个任务节点可以包含若干个任务(开始状态start-state只能有一个任务),不同的任务可以由不同的人来完成,任务实例被分配给actorId来完成。
任务实例有几个状态:创建、开始、结束,这些信息存在JBPM_TASKINSTANCE中。
常用的方法:
分派任务(指定处理人)-TaskInstance.assign(String)
根据处理人查找任务实例-TaskMgmtSession.findTaskInstancesByActorId(…)
任务创建-TaskMgmtInstance.createTaskInstance(…)
任务开始-TaskInstance.start()
任务结束TaskInstance.end(…)

任务可以被指定一个优先级,这个优先级在任务的实例创建时将被作为每个任务实例的初始优先级,任务实例的初始优先级可以在以后被修改。

如果多于一个任务实例与一个任务节点关联,流程开发者可以指定任务实例的完成怎样影响流程的继续。下面是可以给任务节点的signal属性设置的值:
l        last:这是默认值。当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。
l        last-wait:当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。
l        first:当第一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。
l        first-wait:当第一个任务实例完成时继续执行;当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。
l        unsynchronized:总是继续执行,不管任务是否创建和完成。
l        never:执行不再继续,不管任务是否创建和完成。


你可以在流程定义文件中定义任务,也可以在代码中定义:
public class CreateTasks implements ActionHandler {
 public void execute(ExecutionContext executionContext) throws Exception {
    Token token = executionContext.getToken();
    TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
     
    TaskNode taskNode = (TaskNode) executionContext.getNode();
    Task changeNappy = taskNode.getTask("change nappy");
 
    // 现在, 相同任务的两个任务实例被创建
    tmi.createTaskInstance(changeNappy, token);
    tmi.createTaskInstance(changeNappy, token);
 }
}

在Jbpm中,可以结合使用推模式和拉模式的任务分配。流程可以计算任务的责任人,并把它推到他/她的任务清单里;或者,任务可以被分配到参与者池,这种情况下,池中的每个参与者都可以拉出任务并把它放入参与者的个人任务清单。
推模式:Assignable.setActorId(String actorId);TaskMgmtSession.findTaskInstances(String actorId)
拉模式:Assignable.setPooledActors(String[] actorIds);TaskMgmtSesion.findPooledTaskInstances(String actorId);TaskMgmtSession.findPooledTaskInstances(List actorIds)
为了防止多个用户在同一个共享任务上工作,使用用户的actorId修改任务实例的actorId就可以了。这样,任务实例将不会出现在共享任务清单中,而只会存在于用户个人的任务清单里。设置任务实例的actorId为空(null),则会把任务实例放回共享任务里。

任务实例可以拥有它自己的变量,并且也可以“看到”流程变量。
<task name="clean ceiling">
 <controller>
    <variable name="a" access="read" mapped-name="x" />
    <variable name="b" access="read,write,required" mapped-name="y" />
    <variable name="c" access="read,write" />
 </controller>
</task>
这里使用的是默认的控制器,也可以定义自己的控制器
<task name="clean ceiling">
 <controller class="com.yourcom.CleanCeilingTaskControllerHandler">
    -- here goes your task controller handler configuration --
 </controller>
</task>

任务有四个标准的事件类型定义:task-create,task-assign,task-start,和task-end。

 

<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="" name="yytest">
    
<swimlane name="banker">
        
<assignment expression="user(ernie)"/>
    
</swimlane>
    
<swimlane name="casher">
        
<assignment expression="user(bert)"/>
    
</swimlane>
    
<start-state name="start">
        
<transition name="" to="charge"/>
    
</start-state>
    
<task-node name="charge" signal="first">
        
<task name="bank" swimlane="banker"/>
        
<task name="cash" swimlane="casher"/>
        
<transition name="" to="end"/>
    
</task-node>
    
<end-state name="end"/>
</process-definition>

 

 

private static void run(){
        JbpmContext jbpmContext 
= jbpmConfiguration.createJbpmContext();
        
try {
            
long processInstanceId =1;
            processInstance 
= jbpmContext.loadProcessInstance(processInstanceId);
            Token token 
= processInstance.getRootToken();
            System.out.println(token.getNode());
            token.signal();
            System.out.println(token.getNode());
            List casherTasks 
= jbpmContext.getTaskMgmtSession().findTaskInstances("ernie");
            TaskInstance cashertaskInstance 
= (TaskInstance)casherTasks.get(0);
            cashertaskInstance.start();
            cashertaskInstance.end();
            System.out.println(token.getNode());
            jbpmContext.save(processInstance);
            }
finally {
              jbpmContext.close();
            }

    }
    

 

-------------------------------------------------

输出结果

StartState(start)
TaskNode(charge)
EndState(end)

java程序员面试之150++:【上一篇】
Struts中Form2Bean的两种reflect机制 以及性能对比:【下一篇】
【相关文章】
  • jbpm知识点——identity
  • 開始來玩 jBPM
  • jbpm知识点——timer、Scheduler
  • 工作流引擎采用jBPM3.1.2,引擎的流程定义、流程执行和流程监控等功能都经过验证
  • Jbpm建模添加action和task的说明(自己理解和测试的:)
  • jbpm知识点——ProcessState
  • jbpm知识点——ProcessState2
  • jbpm知识点——异步继续
  • jbpm知识点——node2
  • 对Jbpm数据库应用的简单分析和在Mysql上实现的demo
  • 【随机文章】
  • 数据加密服务
  • MSSQL同时操作数据加锁问题
  • Eclipse 可视化定制开发Compiere
  • 操作系统常见问题:删掉「添加/删除程序」里面的垃圾
  • 【转】Cygwin使用指南
  • Word中字体,字号巧设置
  • [Image] 将实现RenderedImage接口的图像对象序列化
  • shell tips-1
  • 下载 2007 Office System Beta2
  • Rich Client Tutorial Part 1(翻译)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.