在开启一个实例后,我们需要实时的监控实例现在运行在哪个环节,这个可以通过查询RootToken的状态来实现。
这里就需要考虑fork分支的情况:如果流程执行遇到分支,分创建多个子TOKEN,分开执行。下面是代码
/**
* 返回当前活动的TOKEN所在的节点名称
* @param instId
* @return
*/
public Set monitInstance(String instId) {
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
GraphSession graphSession = jbpmContext.getGraphSession();
ProcessInstance instance = graphSession.getProcessInstance(Long
.parseLong(instId));
Token rooToken = instance.getRootToken();
Set<String> set = new HashSet<String>();
if (rooToken.hasEnded()) {
set.add("END");
} else if (rooToken.hasActiveChildren()) {
//递归查询TOKEN的子TOKEN
getCurrentNodeNames(rooToken, set);
} else {
set.add(rooToken.getNode().getName());
}
if (set.contains("END")) {
System.out.println("END");
}
return set;
} catch (Exception e) {
e.printStackTrace();
return new HashSet();
} finally {
jbpmContext.close();
}
}
代码中,有一行代码,是对有 "活动的子TOKEN的"节点的递归遍历
else if (rooToken.hasActiveChildren()) {
//递归查询TOKEN的子TOKEN
getCurrentNodeNames(rooToken, set);
}
下面是递归方法
/**
* 递归获取Token中子TOKEN所在节点的名称
* @param parenToken
* @param set
* @return
*/
private Set getCurrentNodeNames(Token parenToken, Set set) {
Iterator<Token> it = parenToken.getChildren().values().iterator();
while (it.hasNext()) {
Token currentToken = it.next();
// 如果还有活动的子节点,说明还未全到达Join节点,需要对所有的节点的所在节点进行记录
if (currentToken.hasActiveChildren()) {
getCurrentNodeNames(currentToken, set);
} else if (!currentToken.hasEnded()) {
set.add(currentToken.getNode().getName());
}
}
return set;
}
在得到一个SET以后,页面部分就可以通过各种方式来显示标记流程实例正在进行的环节了.
over.
分享到:
相关推荐
- **JBPM_TOKEN**:令牌表,用来跟踪流程执行的状态。 - **JBPM_TOKENVARIABLEMAP**:令牌变量映射表,记录令牌与变量的关联关系。 - **JBPM_TRANSITION**:转换表,记录流程中的状态转换。 - **JBPM_VARIABLE...
#### 2.2 JBPM_TOKEN 表示流程实例中的当前状态,每个令牌代表流程的一个活动实例。 #### 2.3 JBPM_LOG 记录流程运行的日志信息,用于跟踪和调试流程的执行过程。 #### 2.4 JBPM_RUNTIMEACTION 存储运行时的动作...
- `FK_TOKEN_NODENODE`:关联到JBPM_TOKEN,表明节点可以有多个令牌。 - `FK_TASK_TASKNODE` 和 `FK_TASK_STARTST`:一个节点可以有多个任务,开始节点可对应多个任务。 - `FK_LOG_SOURCENODE` 和 `FK_LOG_DESTNODE`...
- **JBPM4_EXECUTION**:存储执行信息,取代了JBPM3的Token机制。 - **JBPM4_TASK**:保存需要人工参与的Activity信息。 总之,jBPM为开发者提供了一套全面的工具集,用于设计、实施和监控业务流程。它通过图形化...
- **JBPM_TOKEN, JBPM_TOKENVARIABLEMAP**: 令牌表示流程执行的状态,变量映射则关联了令牌与变量。 - **JBPM_TRANSITION**: 转换表,定义了流程中节点间的跳转逻辑。 - **JBPM_VARIABLEINSTANCE, JBPM_...
- `jbpm_token`: 记录流程执行路径,每个节点的进入和退出都会创建或更新一个令牌。 - `jbpm_edge`: 定义流程实例之间的连接,表示流程的分支和合并。 - `jbpm_relvar_data`: 存储流程实例和变量实例的关系,确保...
9. **Process Instance** - "JBPM_PROCESSINSTANCE"表跟踪每个流程实例的运行状态,与"JBPM_TOKEN"表配合,记录流程执行的令牌移动。 10. **Email Notifications** - 在流程的关键步骤中发送电子邮件通知,例如,...
4. 表`JBPM_NODEINSTANCE`:该表用于跟踪流程图中的各个节点实例,包括节点ID(`NODEINSTANCE_ID`)、节点类型(`NODE_TYPE`)、父节点实例ID(`PARENTPROCIINST_ID`)和完成时间(`END_DATE`)。这对于理解流程执行...
- **流程运行类数据库表**:如JBPM_PROCESSINSTANCE(流程实例表)、JBPM_TOKEN(流程TOKEN表)等,用于存储流程实例执行过程中的状态信息。 通过这些核心概念和机制,jBPM为开发者提供了一套强大的工具,帮助他们...
- **JBPM_TOKEN**:令牌表,用来跟踪流程实例的执行状态,每个节点的执行都会生成或更新相应的令牌。 - **JBPM_LOG**:日志表,记录了流程运行的详细信息,如节点进入和离开、转换执行、事件触发等。外键连接到...
除了上述的流程定义相关数据表之外,流程在实际运行过程中还会涉及到一系列运行类数据表,用于跟踪和记录流程实例的状态变化。 ##### (2) 流程运行类数据表清单 - **jbpm_processinstance**(流程实例表) - **...
- **特点**: 替代了JBPM3的Token机制,采用更灵活的Execution机制来追踪流程执行情况。 ##### 4. **JBPM4_PROPERTY** — 流程引擎表 - **作用**: 保存JBPM引擎的一些配置属性。 - **主要内容**: 如版本号、默认超时...
尽管JBPM并不完全符合WFMC(Workflow Management Coalition)的工作流标准,但其功能和灵活性仍使其在流程开发领域中占据一席之地。 【基本概念解析】 1. **工作流引擎(Engine)**:是JBPM的核心组件,负责创建...
6. **流程实例(Process Instance)与令牌(Token)**:jbpm中的每个流程执行实例都有一个与之关联的令牌,令牌在流程图中移动,代表了流程的当前状态。在并行网关中,令牌会复制,每个副本代表一个并行路径。 7. *...
6. **流程实例与令牌**:在jbpm中,每个流程实例都有一个唯一的令牌(Token)来跟踪当前执行的位置。通过调用`signal()`方法,可以推进流程到下一个节点。 7. **单元测试**:为了验证流程定义的正确性,可以编写...
- 存储正在执行的流程实例信息,代替了JBPM3中的Token机制。 - 包含流程实例的状态、当前活动等关键信息。 ##### 7. **JBPM4_TASK**:任务表 - 用于存储需要人工参与的任务信息,包括任务的所有者、参与者等。 - ...
- **流程驱动机制(TOKEN机制)**:理解TOKEN机制如何推动流程的执行和流转。 - **事件模型**:分析事件在流程中的作用及其触发条件。 - **数据库结构**:探索JBPM所使用的数据库设计模式,包括表结构设计、索引...
4. **JBPM4_EXECUTION**:执行信息表,jbpm4弃用了旧的Token机制,改用Execution来跟踪流程实例的执行状态,每个流程实例在运行时会对应一条或几条Execution记录。 5. **JBPM4_TASK**:任务表,存储了需要人工干预...
JBPM的执行机制支持多种状态,如等待、执行中、暂停和完成等,这些状态的变化反映了流程的实际进展。此外,执行机制还需要处理异常情况,例如回滚和补偿操作,以保持流程的一致性和完整性。 ### 内核结构与实例对象...