- 浏览: 96605 次
- 来自: ...
最新评论
-
gongcheneric:
如果我是要在一个局域网内的某台电脑上修改其他电脑(已知电脑的I ...
java 修改系统时间 -
lijunlong:
...
java 修改系统时间 -
jljf_hh:
喔,了解一下,正好没时间研究这东西呢.哈哈
JBPM阶段性工作总结 -
yuyanshan:
你好,我也是这们做的不,不过我还不明白怎么处理任务,我是这样想 ...
会签实现
同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),则会把任务实例放回共享任务里。
任务实例可以拥有它自己的变量,并且也可以“看到”流程变量。
这里使用的是默认的控制器,也可以定义自己的控制器
-- here goes your task controller handler configuration --
任务有四个标准的事件类型定义: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)
发表评论
-
节点描述
2008-08-07 21:59 1180对jBPM来讲,工作流由一 ... -
sample
2008-08-07 21:12 902xml配置 <start-state ... -
controller
2008-07-31 20:44 922controller(控制器) \28在任务执行时,可能需要 ... -
exception-handler
2008-07-31 20:43 1846exception-handler 异常处理 jbpm异常 ... -
spring和jbpm事务一致性
2008-07-31 20:24 2834关于jbpm和spring结合的事务问题: 当JBPM使用sp ... -
知识点
2008-07-31 10:25 914Node Type ... -
ssh-jbpm发布遇到的问题
2008-07-30 10:04 15421.自己输入http://localhost:8080/ssh ... -
发布jbpm示例shipping遇到的问题
2008-07-28 18:09 10541 jstl和jsp2.0版本问题 <%@taglib ... -
jbpm解析流程定义
2008-07-27 19:25 1014jbpm解析流程定义有三种方式:1)par包static Pr ... -
Jbpm学习知识点
2008-07-26 21:32 1110如何运行Jbpm的示例程序?如何部署Jbpm?如何安装Jbp ... -
会签实现
2008-07-26 21:28 1439转载自http://tomkoo.iteye.com/blog ... -
Tomcat+mysql 配置
2008-07-26 09:24 1407JBoss JBPM 实践系列(一)--- 安装配置(Tomc ... -
业务流程设计
2008-07-26 09:01 1710转载自http://linliangyi2007.iteye. ... -
jBPM相关概念
2008-07-26 08:25 848转载自http://fndcz.iteye.com/blog/ ... -
jbpm资源
2008-07-26 07:59 832ant和发布 http://fndcz.iteye.com/ ... -
jbpm任务分配分析
2008-07-26 07:53 2201jbpm任务分配分析 任务 ... -
JBPM源码浅析
2008-07-26 07:40 1127转载自 http://zwchen.iteye.com/blo ... -
JBPM阶段性工作总结
2008-07-26 07:37 1540转载自http://zwchen.iteye.co ... -
eclipse的jbpm插件配置
2008-07-25 17:36 4733eclipse版本3.2.2 1. jbpm插件从jbpm-s ...
相关推荐
1、流程进入TaskNode节点,执行TaskNode类的execute()方法,该方法首先获得TaskMgmtInstance实例,然后通过它来创建TaskInstance。taskMgmtInstance.createTaskInstance(task, executionContext); 2、在上面的...
由于我们设置了TaskNode的信号为"last-wait",因此只有当所有子流程都完成,主流程的任务实例都被结束,TaskNode才会发送信号,使得主流程能够继续流转至下一个状态,即结束状态。 流程定义XML文件中的配置显示了...
Vue.js 是一款非常流行的前端JavaScript框架,用于构建用户界面。在Vue中,"节点"通常指的是虚拟DOM节点,这是Vue实现高效更新视图的关键技术。虚拟DOM是一种抽象的数据结构,它代表了实际DOM树的一部分,允许Vue在...
taskNode* node = (taskNode*)task; printf("pthread=%d, sockfd=%d, address=%p\n", (int)pthread_self(), node->sockfd, task); free(task); // 注意这里的free操作是非常必要的! sleep(1); return; } void...
TaskNode *tasks = malloc(numTasks * sizeof(TaskNode)); int *dependencyCounts = malloc(numTasks * sizeof(int)); memset(dependencyCounts, 0, numTasks * sizeof(int)); for (int i = 0; i ; ++i) { ...
1. 流程执行到TaskNode时,`TaskNode`的`execute()`方法被调用,创建`TaskInstance`。 2. `createTaskInstance()`方法内部会调用`taskInstance.assign(executionContext)`来分配任务。 3. 在`assign(execution...
JBPM_TASK JBPM_TASK FK_TASK_TASKNODE TASKNODE_ 一个NODE可以有多个TASK JBPM_TASK JBPM_TASK FK_TASK_STARTST STARTSTATE_ 一个开始节点可以对应多个TASK JBPM_LOG JBPM_LOG FK_LOG_SOURCENODE SOURCENODE_ ...
- 这个表包含了流程中的各个节点信息,如ID是节点的唯一标识,CLASS指定了节点的类型,例如ProcessState、Decision、TaskNode等。SUBPROCESSDEFINITION字段用于表示子流程模板的ID,ISASYNC表示节点是否支持异步...
流程定义文件的核心是描述流程的各个阶段,包括start、end、tasknode(任务节点)、fork、join等元素。在报销流程中,start表示流程开始,end表示结束,tasknode分别代表部门主管和总经理的审批环节。 流程定义的...
6. **TaskNode**:任务节点,与表单关联,表示在流程图中的一个工作节点。`taskNode_formid`和`taskNodeName`表示任务节点的表单ID和名称。 7. **FormInstance**和**ProcessInstance**:两者都是流程执行中的实例...
在示例中,报销审批流程的XML文件定义了开始节点(start)、结束节点(end)以及两个任务节点(tasknode),分别代表部门主管和总经理的审批环节。 2. **JBPM Designer**:JBPM提供了一个集成开发环境,即JBPM ...
- `taskNode` 结构体用于封装待处理的任务数据,如网络连接的句柄 `sockfd`。 2. **任务处理函数** - `printsd` 函数是一个示例性的任务处理函数,用于演示如何处理一个具体的任务。它接收一个 `taskNode` 类型...
`CLASS`字段定义了节点类型,如ProcessState、Decision、TaskNode等。`ISASYNC`字段指示节点是否支持异步执行,`ACTION`字段关联到`JBPM_ACTION`表中的动作,`SUPERSTATE`表示节点所属的SuperState,而`PROCESS...
`ID_` 是节点的唯一标识,`CLASS_` 描述了节点的类型,如StartState、EndState、TaskNode等。`NAME_` 是节点的名称,`SUBPROCESSDEFINITION_` 用于关联子流程模板。`ISASYNC_` 指定节点是否可以异步执行,`ACTION_` ...
ID_是节点的标识,CLASS_字段定义了节点类型,如StartState、EndState、TaskNode等。NAME_字段是节点的名称,SUBPROCESSDEFINITION_字段用于记录子流程模版ID。ISASYNC_字段表示节点是否支持异步执行,ACTION_字段...
`ID_`是节点的唯一标识,`CLASS_`指定了节点的类型,如StartState、EndState、TaskNode等。`NAME_`是节点的名称,便于理解流程结构。`SUBPROCESSD`用于表示子流程状态。`ACTION_`字段关联了`JBPM_ACTION`表中的动作...
示例代码展示了线程池中任务节点的定义(`taskNode`)和任务处理函数(`printsd`)。任务节点包含了处理任务所需的参数,例如套接字描述符(`sockfd`),处理函数负责打印相关信息并释放任务节点内存。 通过引入...
TaskNode 任务节点** - **定义**: 使用该阶段处理的任务的名字作为节点名称,而非被管理对象的状态。 - **应用场景**: 当节点代表具体的业务操作或任务时采用此命名方式,如“填写报告”、“审核报告”等。 **...
- CLASS_:节点的类型,如StartState、TaskNode、Decision等。 - NAME_:节点的名称。 - SUBPROCESSDEFINITION_:子流程模版的ID(仅当节点类型为ProcessState时使用)。 - ISASYNC_:标志节点是否支持异步执行...
- CLASS_:定义节点的类型,如StartState、EndState、TaskNode等。 - NAME_:节点的名称,便于识别。 - SUBPROCESSDEFINITION_:如果节点类型为ProcessState,表示子流程模版的ID。 - ISASYNC_:指示节点是否...