iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何理解Java EE工作流管理系统jBPM的FORK中节点同步功能
  • 215
分享到

如何理解Java EE工作流管理系统jBPM的FORK中节点同步功能

2023-06-17 13:06:29 215人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关如何理解Java EE工作流管理系统jBPM的FORK中节点同步功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在Java EE工作流管理系统jBP

本篇文章给大家分享的是有关如何理解Java EE工作流管理系统jBPM的FORK中节点同步功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在Java EE工作流管理系统jBPM中除功能节点(指START-STATE,END-State,Fork,Join,Decision)外,业务逻辑全放在node节点的ACTION中来实现。小编将详解Java EE工作流管理系统jBPM的FORK中节点同步功能。

public class DemoActionHandler implements ActionHandler {    Java代码           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时将事务提交,流程实例的状态也就会持久化到数据库中去。
于是加上

Java代码   node.setAsync(true);

接着测试有分支的情况,又发现fork下的节点是依次执行的,查了资料,有如下的说法

引用

fork的底层其实是依次调用各个transition,而不是真正意义的同步,如果需要同步,请参考JBPM异步设置

于是把FORK节点的async属性也设置成了true,测试后发现还是不行。按照上面的说法,fork在执行各个分支的时候,采用了类似遍历的方式调用各个分支,但不至于非得执行完成一个分支后再执行另一个分支。无奈放下了,开始查找资料,这部分工作也是因此搁浅了将近一天的时间。晚上在家查阅资料的时候,发现有人提起了JobExecutor的线程个数,我觉得有可能这个的原因。翻下源码,找了个api试验一下

Java代码   jobExecutor = jbpmConfiguration.getJobExecutor();        jobExecutor.setNbrOfThreads(5);        jobExecutor.start();

结果喜剧了,我惊喜的发现,fork下的节点竟然同步执行了(当然同步的执行也会有先后)。

虽然这本来就是fork节点的基本作用,但实际用起来的时候还是会遇到各种战利品样的问题。原因就在这里,如果不设置其线程数,JobExecutor默认启动一个线程为工作,这样就导致fork下的节点进入了队列,结果就是串行执行了。

以上就是如何理解Java EE工作流管理系统jBPM的FORK中节点同步功能,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 如何理解Java EE工作流管理系统jBPM的FORK中节点同步功能

本文链接: https://www.lsjlt.com/news/289499.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解Java EE工作流管理系统jBPM的FORK中节点同步功能
    本篇文章给大家分享的是有关如何理解Java EE工作流管理系统jBPM的FORK中节点同步功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在Java EE工作流管理系统jBP...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作