由于业务要求的原因,我们的工作流系统所做的工作大部分是调用各种各样的程序,不需要人工参与,所以在流程中,除功能节点(指START-STATE,END-State,Fork,Join,Decision)外,业务逻辑全放在NODE节点的ACTION中来实现。
public class DemoActionHandler implements ActionHandler {
/**
* 简单的ACTIONHANDLER DEMO
*/
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
@Override
public void execute(ExecutionContext executionContext) throws Exception {
Node node = executionContext.getNode();
System.out.print(executionContext.getProcessInstance().getId());
System.out.println("--[" + node.getName() + "] ["
+ new java.util.Date()+"]");
ContextInstance cxtInstance = executionContext.getProcessInstance()
.getContextInstance();
try {
Date date = new Date();
Date startDate = (Date) cxtInstance.getVariable("STARTDATE");
System.out.println("执行到此节点共用时:" + ""
+ (date.getTime() - startDate.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
Thread.sleep(6000);
node.leave(executionContext);
}
}
我写了一个简单的流程,串行的,不包含分支,只包含开始,结束,NODE三种类型的节点。将流程发布,创建实例 ,在实例启动后用轮询的方式查询跟踪token所在的位置(如果有分支的情况下可能需要考虑子token的情况),发现个流程的监控结果只有两个结点:START和END,这是为什么呢,首先想到的是流程实例的状态并没有实时的保存或是说持久化到数据库中去。
再结合自己的程序想了一下,程序中的节点全部是NODE类型的自动节点,流程在执行的时候,会直到一个等待节点才将流程实例持久化到数据库中。但如果将NODE节点的async(异步执行)属性设置的true,流程会在执行到该节点时,会启动一个线程来执行NODE的ACTIONHANDLER,而TOKEN本身会挂起,等待执行完毕的消息,事务因此也将由一个被分裂为两个独立的事务.也就是说,原来从开始执行到等待状态为止的一个事务被异步节点分了成多个事务,流程会在执行异步节点的ACTIONHANDLER时将事务提交,流程实例的状态也就会持久化到数据库中去。
于是加上
node.setAsync(true);
这样就OK了。
接着测试有分支的情况,又发现fork下的节点是依次执行的,查了资料,有如下的说法
引用
fork的底层其实是依次调用各个transition,而不是真正意义的同步,如果需要同步,请参考JBPM异步设置
于是把FORK节点的async属性也设置成了true,测试后发现还是不行。按照上面的说法,fork在执行各个分支的时候,采用了类似遍历的方式调用各个分支,但不至于非得执行完成一个分支后再执行另一个分支。无奈放下了,开始查找资料,这部分工作也是因此搁浅了将近一天的时间。晚上在家查阅资料的时候,发现有人提起了JobExecutor的线程个数,我觉得有可能这个的原因。翻下源码,找了个API试验一下
jobExecutor = jbpmConfiguration.getJobExecutor();
jobExecutor.setNbrOfThreads(5);
jobExecutor.start();
结果喜剧了,我惊喜的发现,fork下的节点竟然同步执行了(当然同步的执行也会有先后)。
虽然这本来就是fork节点的基本作用,但实际用起来的时候还是会遇到各种战利品样的问题。原因就在这里,如果不设置其线程数,JobExecutor默认启动一个线程为工作,这样就导致fork下的节点进入了队列,结果就是串行执行了。
OK,本文完。
分享到:
相关推荐
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
在JBPM中,`Join` 和 `Fork` 是两个重要的流程节点,它们用于控制流程执行的路径。本文将详细讲解这两个概念以及它们在实际工作流中的应用。 首先,我们来看`Fork`节点。`Fork`在流程图中表现为一个分支,它代表了...
在jbpm中,"fork & join"机制是实现并行处理和流程控制的关键概念,尤其在处理会签(多个审批人同时参与审批)等场景时显得尤为重要。 "fork"在jbpm中指的是流程分支,当流程到达一个fork节点时,流程会分裂为多个...
NULL 博文链接:https://sunlujing.iteye.com/blog/914429
NULL 博文链接:https://zpchen.iteye.com/blog/264455
在"jBPM4.1中文用户手册"中,读者可以找到关于这些特性和功能的详细解释,包括如何创建和部署BPMN模型、配置工作流引擎、使用任务服务、集成规则引擎等操作步骤。此外,手册可能还会涵盖错误处理、性能调优、安全...
08_JBPM流程节点.exe
- **Drools集成**: jbPM4.3中的规则引擎,用于实现流程中的条件判断和业务决策。 - **规则定义**: 使用DRL(Drools Rule Language)编写规则,并在流程中引用执行。 - **规则测试**: 提供规则单元测试,确保规则正确...
BPMN是一种图形化表示业务流程的方法,jbpm的用户指南会详细介绍如何使用BPMN符号来设计流程图,包括开始事件、结束事件、任务、网关、事件和数据对象等,以及它们在jbpm中的具体实现。 3. **jbpm工作流** 工作流...
事件(Event)**:jBPM4.1支持多种类型的事件,包括节点进入、节点退出、流程开始和流程结束等。通过事件处理机制,可以在特定时刻执行自定义逻辑。 **5. 变量(Variable)**:变量用于存储工作流执行过程中的数据...
例如,`太子表`(TaskTable)存储任务信息,`ProcInstTable`记录流程实例,`NodeInstTable`则跟踪流程中的节点实例。 2. **jBPM开发指南**: [jBPM开发指南].高杰.文字版提供了jbpm的开发指导,可能涵盖了如何配置...
jbpm是一个开源的工作流程管理系统,它提供了强大的业务流程建模、执行和管理能力,尤其适合在企业级应用中实现自动化的工作流。 工作流程管理系统(Workflow Management System,简称WfMS)是企业管理信息化的重要...
文档中提到了节点类型,如task-node(任务节点)、state-node(状态节点)、decision-node(决策节点)、fork(分叉节点)、join(合并节点),以及节点之间的转换(transitions)。 文档提到了 jbpm-designer 和 ...
JPDL是JBPM中定义流程的关键,它允许开发者声明流程的各个组件,如开始和结束节点、任务、分支和连接器等。JPDL的结构清晰,易于理解和编写。 3.2 流程版本 版本管理是JBPM的一个重要特性,它允许你在不影响现有...
jBPM 4.4用户手册 翻译官方文档 JBoss jBPM Teams 4.4 译者: Lingo 首页: http://www.family168.com/ 论坛: http://old.family168.com/bbs EMAIL: lingosurf168@gmail.com 2009年11月1日 1. 导言 1.1. 许可...
jBPM6支持分布式部署和集群,可以在多个节点上运行,以应对高并发和大数据量的场景。通过集群,可以实现负载均衡和容错,提升系统的可用性和稳定性。 **总结** jBPM6作为一个强大的BPM解决方案,不仅提供了一整套...
5. **任务管理**:jbpm4.4提供了任务服务,包括任务分配、完成、查询等功能,使得业务流程中的任务可以被正确地执行和跟踪。 6. **规则引擎**:jbpm4.4集成了JBoss Drools,一个强大的规则引擎,使得业务逻辑可以...
**jbpm4.4中文开发指南** ...通过阅读《jbpm4.4开发指南.doc》,读者可以系统了解jbpm的工作原理、配置方法、使用技巧,以及常见问题的解决方案,从而更好地在实际项目中运用jbpm4.4来实现高效、灵活的业务流程管理。
4. **规则集成**:jbpm4.3集成了Drools规则引擎,允许在流程中嵌入决策逻辑。通过Drools,开发者可以编写复杂的业务规则,并在流程执行时动态应用这些规则。 5. **事件处理**:系统能够监听并响应各种事件,如流程...