CN116795378A - 基于代码动态编译的流程编排执行方法及装置 - Google Patents
基于代码动态编译的流程编排执行方法及装置 Download PDFInfo
- Publication number
- CN116795378A CN116795378A CN202311041710.4A CN202311041710A CN116795378A CN 116795378 A CN116795378 A CN 116795378A CN 202311041710 A CN202311041710 A CN 202311041710A CN 116795378 A CN116795378 A CN 116795378A
- Authority
- CN
- China
- Prior art keywords
- flow
- code
- executed
- arranging
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 187
- 230000008569 process Effects 0.000 title claims abstract description 144
- 230000005540 biological transmission Effects 0.000 claims description 23
- 238000004590 computer program Methods 0.000 claims description 12
- 230000000903 blocking effect Effects 0.000 claims description 8
- 230000002045 lasting effect Effects 0.000 claims description 7
- 238000003860 storage Methods 0.000 claims description 6
- 238000004458 analytical method Methods 0.000 claims description 5
- 238000005206 flow analysis Methods 0.000 claims description 5
- 238000004519 manufacturing process Methods 0.000 description 9
- 238000012360 testing method Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 238000007689 inspection Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 238000007711 solidification Methods 0.000 description 3
- 230000008023 solidification Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了基于代码动态编译的流程编排执行方法及装置,包括以下步骤:读取待执行流程;获取待执行流程对应的流程编排配置实体信息;对流程编排配置实体信息进行校验、解析和初始化操作;生成对应的流程编排代码;固化生成的流程编排代码,并将流程编排代码保存到数据库或者文件中;对生成的流程编排代码进行编译,动态加载到应用程序中,并在编译完成后将待执行流程解锁;执行编译后的流程编排代码,并定位到待执行流程当前所在的业务节点;执行业务节点操作;保存待执行流程的中间状态,返回待执行流程的各业务节点的执行结果;其优点在于:无需反复访问数据库或者文件获取流程编排配置,提升执行速度和执行效率,方便地定位到BUG所在位置。
Description
技术领域
本发明涉及信息技术的低代码流程编排领域,尤其涉及一种基于代码动态编译的流程编排执行方法及装置。
背景技术
低代码开发平台(Low-Code Development Platform, LCDP)是无需编码(0代码)或通过少量代码就可以快速生成应用程序的开发平台。目前市面上的低代码平台都是通过可视化进行应用程序开发的方法,使具有不同经验水平的开发人员可以通过图形化的用户界面,使用拖拽组件和模型驱动的逻辑来创建网页和移动应用程序。通过标准化的组件,低代码开发人员可以在低学习成本的情况下,在快速完成需求的同时大大减少程序的BUG。
如申请公布号为CN115639980A的发明专利公开文本公开了提供了一种低代码平台可拖拽的前端逻辑编排方法及装置,包括业务设计阶段,逻辑编排阶段和低代码应用运行阶段;其中,逻辑编排阶段包括:逻辑节点配置;对逻辑片段的节点进行节点名称和节点类型的建立和配置,将逻辑拆分节点以对象的方式描述出来并配置作为逻辑节点基本信息的存储;逻辑节点关系设置,编排结果导出,逻辑代码编写;所述低代码应用运行阶段是编排结果的应用,低代码平台解析运行。
再如申请公布号为CN115422063A的发明专利公开文本提供了一种低代码接口自动化系统、电子设备及存储介质,通过前端拖拽接口与控制器组装成对应的测试用例,通过定时执行测试用例以及通过数益云平台集成进CICD流程,完成对多系统服务的自动化接口测试及回归测试的需求;集成JaCoCo Agent以及分析线上流量与服务代码,从而分析用例的覆盖率情况。
流程编排,简言之是在前端通过拖拽可视化流程组件来编排流程,然后由流程引擎来执行整个流程,通过这种方式来提高业务软件的开发和运维效率。举例来说,在数字化工厂领域,一个订单从订单计划编制、订单计划下发、订单计划排产、计划切换、产量报工、产品质量判定、订单完工入库会经过很多流程节点,不同工厂、订单的流转过程又不尽相同。如此繁琐的流程,若全部依靠代码维护,系统规模将及其巨大,普通企业难以承受。但其中流程上的各个节点操作是不变的,流程编排可以将这些不变的操作抽象成流程节点,实现根据不同工厂的配置执行对应的流程,从而应对数字化工厂之间的流程变化。
然而,现有的流程编排引擎一般是解释型模型,后台服务端在收到流程请求时通常先行访问数据库或缓存,以获取流程配置,再根据流程配置去一步步执行,不仅效率低下,且对硬件容量和计算速度有较高的要求。
发明内容
鉴于现有的解释型模型的流程编排引擎执行效率低下,时间成本高的问题,本发明所要解决的技术问题是提供一种基于代码动态编译的流程编排执行方法,通过动态编译生成代码,并执行相应的流程,提升执行速度和执行效率。
本发明解决上述技术问题所采用的技术方案为:基于代码动态编译的流程编排执行方法,包括以下步骤:
步骤S101:读取待执行流程,根据前端请求的流程参数尝试进入流程;
步骤S102:判断系统是否已经解析编译过所述待执行流程,若是则执行步骤S109,否则对所述待执行流程进行加锁并执行步骤S103;
步骤S103:获取所述待执行流程对应的流程编排配置实体信息;
步骤S104:对所述流程编排配置实体信息进行校验和解析,并进行流程编排代码生成前的初始化操作;
步骤S105:根据解析后的所述流程编排配置实体信息,生成对应的流程编排代码;
步骤S106:判断系统是否已经对所述流程编排代码进行过固化操作,若是执行步骤S107,否则执行步骤S108;
步骤S107:固化生成的所述流程编排代码,并将所述流程编排代码保存到数据库或者文件中;
步骤S108:对生成的所述流程编排代码进行编译,动态加载到应用程序中,并在编译完成后将所述待执行流程解锁;
步骤S109:执行编译后的所述流程编排代码,并定位到所述待执行流程当前所在的业务节点;
步骤S110:执行所述业务节点操作;
步骤S111:判断当前所述待执行流程是否执行结束,即判断当前业务节点是否是所述待执行流程的最后一个业务节点,若是则执行步骤S113,否则执行步骤S112;
步骤S112:在流程编排的所有业务节点执行完成前,保存所述待执行流程的中间状态,以供后续业务节点使用;
步骤S113:在流程编排的所有业务节点执行完成后,返回所述待执行流程的各业务节点的执行结果。
本发明解决上述技术问题所采用的优选的技术方案为:所述步骤S102中,在加锁状态下,其他线程进入所述待执行流程时会先阻塞,暂不执行步骤S102,直至所述步骤S108中编译完成后将所述待执行流程解锁。
本发明解决上述技术问题所采用的优选的技术方案为:所述步骤S105中,基于模版引擎实现所述流程编排代码的生成;所述模版引擎包括开源的模版引擎,或者自定义模版引擎;
遍历根据业务节点或连接线规则解析成的所述数据传输对象,基于对应模版为每个所述数据传输对象生成对应的代码字符串;
在所有所述数据传输对象均生成完对应的所述流程编排代码后,将所述流程编排代码整合,拼接成为代码字符串,同时将生成的所述代码字符串通过文件或数据库方式持久化存储;
所述步骤S108中,将生成的所述代码字符串编译成机器可识别执行的代码。
本发明解决上述技术问题所采用的优选的技术方案为:所述开源的模版引擎包括Java的Velocity、Python的Jinja;所述机器可识别执行的代码包括Java的字节码或机器码。
本发明解决上述技术问题所采用的优选的技术方案为:所述步骤S113中,在流程编排的所有业务节点执行完成后,根据自定义结束策略,选择是否清除之前保存的所述待执行流程中间状态。
本发明解决上述技术问题所采用的另一技术方案为:基于代码动态编译的流程编排执行装置,包括:
流程编排DAO模块,用于获取待执行流程对应的流程编排配置实体信息,以及对流程编排配置实体信息的保存、查询、删除、复制;
流程解析模块,用于对所述流程编排配置实体信息进行校验和解析,并通过对应的业务节点或连接线规则将所述流程编排配置实体信息解析成数据传输对象后进行结果输出;
代码生成模块,用于根据解析后的所述流程编排配置实体信息,生成对应的流程编排代码;
动态编译模块,用于对生成的所述流程编排代码进行编译,动态加载到应用程序中,并在编译完成后将所述待执行流程解锁;
流程编排执行模块,用于执行编译后的所述流程编排代码,并定位到所述待执行流程当前所在的业务节点,执行所述业务节点操作;
流程编排状态机,用于在流程编排的所有业务节点执行完成前,保存所述待执行流程的中间状态,以供后续业务节点使用,并在流程编排的所有业务节点执行完成后,对所述待执行流程中间状态执行结束策略;
代码固化模块,用于固化生成的所述流程编排代码,并将所述流程编排代码保存到数据库或者文件中;
程序启动初始化模块,用于程序启动时将已经固化的代码直接编译。
本发明解决上述技术问题所采用的另一技术方案优选为:所述流程编排DAO模块用于获取所述待执行流程对应的流程编排配置实体信息的同时,所述流程编排执行模块用于对所述待执行流程进行加锁阻塞;
在加锁状态下,其他线程进入所述待执行流程时会先阻塞,即暂停对系统是否已经解析编译过所述待执行流程进行判断,直至编译完成后,所述流程编排执行模块用于将所述待执行流程解锁。
本发明解决上述技术问题所采用的另一技术方案优选为:所述代码生成模块基于模版引擎用于实现所述流程编排代码的生成;所述模版引擎包括开源的模版引擎,或者自定义模版引擎;
所述代码生成模块用于遍历根据业务节点或连接线规则解析成的所述数据传输对象,基于对应模版为每个所述数据传输对象生成对应的代码字符串;
在所有所述数据传输对象均生成完对应的所述流程编排代码后,所述代码生成模块用于将所述流程编排代码整合,拼接成为代码字符串,同时将生成的所述代码字符串通过文件或数据库方式持久化存储;
所述动态编译模块用于将生成的所述代码字符串编译成机器可识别执行的代码。
本发明解决上述技术问题所采用的另一技术方案优选为:在流程编排的所有业务节点执行完成后,所述流程编排状态机用于根据自定义结束策略,选择是否清除之前保存的所述待执行流程中间状态。
本发明解决上述技术问题所采用的另一技术方案优选为:所述流程编排执行模块用于统筹整个流程编排执行过程,包括用于判断系统是否已经解析编译过所述待执行流程、对所述待执行流程进行加锁阻塞、定位到所述待执行流程当前所在的业务节点和编译时各个模块之间的路由流转。
本发明解决上述技术问题所采用的另一技术方案为:一种计算机设备,包括存储器和处理器,所述存储器存储计算机程序,所述处理器执行所述计算机程序时,实现基于代码动态编译的流程编排执行方法的步骤。
本发明解决上述技术问题所采用的另一技术方案为:一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现基于代码动态编译的流程编排执行方法的步骤。
本发明解决上述技术问题所采用的另一技术方案为:一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现基于代码动态编译的流程编排执行方法的步骤。
与现有技术相比,本发明的优点是:在执行流程时,无需反复访问数据库获取对应的流程编排配置,节省了数据库查询的时间成本;通过动态编译生成的字节码执行流程,而非根据配置来进行解释型执行,执行速度和执行效率大大提升,进一步缩短时间成本;由于生成的是真实的代码,在执行出现问题时可以更加方便地定位到BUG所在位置;支持配置生成的代码的热更新。
附图说明
以下将结合附图和优选实施例来对本发明进行进一步详细描述,但是本领域技术人员将领会的是,这些附图仅是出于解释优选实施例的目的而绘制的,并且因此不应当作为对本发明范围的限制。此外,除非特别指出,附图仅示意在概念性地表示所描述对象的组成或构造并可能包含夸张性显示,并且附图也并非一定按比例绘制。
图1为基于代码动态编译的流程编排执行装置的结构示意图;
图2为基于代码动态编译的流程编排执行方法的流程总图;
图3为基于代码动态编译的流程编排执行方法及装置的应用场景示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示为本实施例提供的基于代码动态编译的流程编排执行装置,包括流程编排DAO模块、流程解析模块、代码生成模块、动态编译模块、流程编排执行模块、流程编排状态机、代码固化模块和程序启动初始化模块八大功能模块。这是一种适用于流程编排运行时的应用方法,可以将页面拖拉拽所配置出来的流程翻译成代码,并进行动态编译,从而以一种全新的执行逻辑管理流程编排的执行,实现执行效率的大大提升。
首先,具体来看八大功能模块在基于代码动态编译的流程编排执行中的相应职责功能:
(1)流程编排DAO模块:用于获取待执行流程对应的流程编排配置实体信息,以及对流程编排配置实体信息的保存、查询、删除、复制。
流程编排通常以节点和连接线的方式在页面上拖拉拽生成,流程编排配置实体就是这些节点或连接线的配置详情,用户在页面上以拖拉拽的方式完成流程编排或者需要暂存流程编排时,将调用此模块的功能,将流程编排配置实体进行持久化存储,方便下次进行查询、再编辑等操作。
(2)流程解析模块:用于对所述流程编排配置实体信息进行校验和解析,并通过对应的业务节点或连接线规则将流程编排配置实体信息解析成数据传输对象后进行结果输出。
具体地,先通过流程编排DAO模块进行查询操作,从持久层中获取流程编排配置实体;随后通过流程解析模块对流程编排配置实体进行参数的校验,无法通过参数校验的流程编排配置实体将无法进行解析;接着流程解析模块会将所有的流程编排配置实体通过对应的业务节点或连接线规则解析成Data Transfer Object(数据传输对象),这些数据传输对象就是解析模块的输出结果。
(3)代码生成模块:用于根据解析后的流程编排配置信息,生成对应的流程编排代码。代码生成模块主要基于一些模版引擎实现,如Java的Velocity、Python的Jinja等开源的模版引擎或者自定义的模版引擎。代码生成模块将遍历根据业务节点或连接线的数据传输对象,基于各自对应的模版为每个数据传输对象生成对应的代码字符串。
在所有数据传输对象都生成完对应的流程编排代码后,代码生成模块将根据预先设置的规则,将流程编排代码整合到一起,拼接成为代码字符串,同时将生成的代码字符串通过文件或数据库等方式持久化存储下来,方便下次快速生成或者启动时的快速加载。
(4)动态编译模块:用于对生成的流程编排代码进行编译,动态加载到应用程序中,并在编译完成后将待执行流程解锁。具体地,动态编译模块将生成的流程编排代码编译成Java的字节码,或者机器码等机器可识别执行的代码,并动态加载到应用程序中。动态编译完成后,应用程序就可以通过固定的方法入口快速调用这些流程编排代码去执行,应用程序包括但不限于Java应用程序。
本实施例中,一个流程编排配置生成的流程编排代码是固定唯一的,因此在应用程序中也必须一一对应。在动态编译模块中,编译一个流程编排配置前需要对经过编译的流程编排代码进行加锁以防止其他线程同时编译此流程编排代码,在完成编译后进行解锁,加锁和解锁通过流程编排执行模块完成。
(5)流程编排执行模块:用于执行编译后的流程编排代码,并定位到待执行流程当前所在的业务节点,执行业务节点操作。流程编排执行模块执行流程编排代码,同时保存流程数据到状态机中。
当有业务数据需要进入流程编排进行处理时,由流程编排执行模块统筹整个流程编排执行过程,包括判断系统是否已经解析编译过待执行流程、对待执行流程进行加锁阻塞、定位到待执行流程当前所在的业务节点,以及编译时各个模块之间的路由流转,即流程代码编译时的整个中间过程。
(6)流程编排状态机:用于在流程编排的所有业务节点执行完成前,保存待执行流程的中间状态,以供后续业务节点使用,并在流程编排的所有业务节点执行完成后,根据自定义结束策略,选择是否清除之前保存的待执行流程中间状态。结束策略可以由用户自定义,选择保存则可以方便后续的回溯查看。
可见,一条任务流程从出生到死亡的全过程的所有中间状态都会存储在状态机中。当任务流程从开始节点进入时,会根据规则生成唯一标识,中间节点所生成的相关数据将会存储在流程编排状态机中,方便后面流程节点的获取和使用。当任务流程到达结束节点时,该条任务流程在流程编排状态机中的数据将会被清除或者存储到磁盘中持久化下来。
(7)代码固化模块:用于固化生成的流程编排代码,并将流程编排代码保存到数据库或者文件中。具体地,代码固化模块可以将流程编排配置固化为代码,方便下次直接编译,省去代码生成的过程。为提高执行效率,可以在程序启动前批量地将流程编排配置固化为代码保存下来,在启动后初始化时直接编译代码,也可以在程序运行过程中进行代码固化,方便下次启动时代码的快速编译。
(8)程序启动初始化模块:用于程序启动时将已经固化的代码直接编译。具体地,程序启动初始化模块在应用程序最开始启动时,编译加载之前代码固化模块已经固化下来的流程编排代码,进而这部分流程在第一次执行时就不需要重新进行代码生成、编译等步骤。
需说明的是,程序启动初始化模块是应用程序启动时的任务模块,因此其不在本实施例提供的基于代码动态编译的流程编排执行方法的执行步骤中直接体现出来。
如图2所示为本实施例提供的基于代码动态编译的流程编排执行方法,其依托基于代码动态编译的流程编排执行装置实现,通过其具体执行步骤可以直观地体现上述功能模块的职责功能,及相互之间的时序配合关系,具体包括以下步骤:
步骤S101:读取待执行流程,根据前端请求的流程参数尝试进入流程;
步骤S102:流程编排执行模块判断系统是否已经解析编译过待执行流程,若是则执行步骤S109,否则对待执行流程进行加锁并执行步骤S103;
在加锁状态下,其他线程进入待执行流程时会先阻塞,暂不执行步骤S102,直至步骤S108中编译完成后将待执行流程解锁。
此处需说明的是,待执行流程加锁阻塞包括两种场景,第一种是在待执行流程尚未执行动态编译时,第一个线程调用该待执行流程时,流程编排执行模块会对此流程进行加锁操作;第二种是在待执行流程正在进行动态编译但尚未完成的进程中,其他线程已经开始进行编译且该待执行流程已加锁,此时其他线程尝试执行该流程时,流程编排执行模块会进行阻塞直至流程动态编译完成并解锁。
步骤S103:流程编排DAO模块获取待执行流程对应的流程编排配置实体信息;
步骤S104:流程解析模块对流程编排配置实体信息进行校验和解析,并进行流程编排代码生成前的初始化操作;
步骤S105:代码生成模块根据解析后的流程编排配置实体信息,生成对应的流程编排代码;
此步骤中,代码生成模块基于模版引擎实现所述流程编排代码的生成,模版引擎包括Java的Velocity、Python的Jinja等开源的模版引擎,或者自定义模版引擎;代码生成模块遍历根据业务节点或连接线规则解析成的数据传输对象,基于对应模版为每个数据传输对象生成对应的代码字符串;在所有数据传输对象均生成完对应的流程编排代码后,将流程编排代码整合,拼接成为代码字符串,同时将生成的代码字符串通过文件或数据库方式持久化存储。
步骤S106:判断系统是否已经对流程编排代码进行过固化操作,若是执行步骤S107,否则执行步骤S108;
步骤S107:代码固化模块固化生成的流程编排代码,并将流程编排代码保存到数据库或者文件中;
代码固化可以在流程编排编译完成后将所编译的流程编排代码持久化保存下来,方便下次机器重启时的流程编排代码快速生成,具体地,固化后的流程编排代码即指根据流程编排配置进行代码固化后生成的代码字符串。
步骤S108:动态编译模块对生成的流程编排代码进行编译,动态加载到应用程序中,并在编译完成后将待执行流程解锁;
具体在本实施例中,动态编译模块对生成的代码字符串编译成Java的字节码或机器码等机器可识别执行的代码。
步骤S109:流程编排执行模块执行编译后的流程编排代码,并定位到待执行流程当前所在的业务节点;
步骤S110:执行业务节点操作;
步骤S111:判断当前待执行流程是否执行结束,即判断当前业务节点是否是待执行流程的最后一个业务节点,若是则执行步骤S113,否则执行步骤S112;
步骤S112:流程编排状态机在流程编排的所有业务节点执行完成前,保存待执行流程的中间状态,以供后续业务节点使用;
步骤S113:在流程编排的所有业务节点执行完成后,流程编排执行模块返回待执行流程的各业务节点的执行结果;
此时,流程编排状态机根据自定义结束策略,选择是否清除之前保存的待执行流程中间状态。
在整个上述基于代码动态编译的流程编排执行方法的步骤当中,流程编排执行模块负责统筹整个流程编排执行过程,包括判断系统是否已经解析编译过待执行流程、对待执行流程进行加锁阻塞、定位到待执行流程当前所在的业务节点和编译时各个模块之间的路由流转。
以下为某个数字化工厂的订单从订单计划编制到最终完工入库的流程编排执行过程,以此将本发明提供的抽象的基于代码动态编译的流程编排执行方法和装置,具象到一个产业应用中的具体实施例,更为直观地展现其执行进程和提升执行效率的有益效果。
如图3所示,该数字化工厂的订单执行权生命周期分为三个独立流程,每个独立地流程相当于一个待执行流程编排的流程。其中,流程一包含8个业务节点,流程二包含4个业务节点,流程3包含7个业务节点。不仅业务节点多,三个流程的节点之间还存在时序上的衔接关系,或者两个流程同步地执行。
这种复杂的流程执行情况下,若全程依靠代码来维护,系统规模将相当庞杂。此外,针对不同的订单需求,不仅流程需要作出相应变化,每个节点的参数设置也不同,并且,流程之间存在上下游关系时,如本实施例中的流程二和三之间,需要上下游之间进行配合,当下游质检速度放慢时,就需要在上游加上一个Hold单的操作,防止将下游质检流水线压垮。
不过,三个流程中各个业务节点的执行算法是相对固定的,本发明提供的基于代码动态编译的流程编排执行方法及装置的底层发明构思,就是把变化的待执行流程抽象成业务节点,实现每个业务节点的复用,快速灵活地应对流程变化,提升执行效率。
首先来看流程一,工作人员先根据甲方订单中的详细需求进行订单计划编制、生成订单计划;订单计划下发到工厂进行生产,生产过程中涉及一些产品参数校验,这些产品参数校验需根据不同的订单需求选择不同的校验组件;校验完成后,生产线上的工人就可以通过数字化工厂系统看到该批订单计划,并根据计划进行计划切换。
此时流程一将暂时挂起,等待接收计划达成的事件,即订单产品的生产和质量检验的流程完成,再继续进行后续流程。
自此为止,流程一已经执行到了第6个业务节点,每个业务节点均涉及上一个节点的流程输入和节点执行结果的输出,从而每个业务节点均执行本发明提供的基于代码动态编译的流程编排执行方法,到等待接收计划达成的事件这一节点时,流程挂起,开始生产端的流程二。
流程二和三存在上下游关系,即流程二为产品的生产流程,期间即时上报这批订单的产量,流程三为产品的质检流程,当完成产品时,流程三开始,工人将对生产的产品进行质量判定,并对合格品向下流转,不合格品返工并重新判定质量。在合格数达到产量要求时,发送计划达成的事件并结束流程三。流程二返回的业务节点执行结果将下发至流程三,流程三返回的业务节点执行结果将下发流程一的等待接收计划达成的事件节点,随后流程一继续往下执行直至流程结束。
同样的,流程二和流程三的每个节点也执行本发明提供的基于代码动态编译的流程编排执行方法。通常对于同一笔订单,在第一轮流程编排执行完毕后,部分节点的流程编排代码可重复利用,即可以直接由步骤S102跳转至步骤S109,部分节点固化生成的流程编排代码被保存到数据库或文件中,可以反复调用,即可以直接由步骤S106跳转至步骤S108,效率将越来越高。
此外,针对不同的工厂,流程编排的规则、校验和解析的规则不尽相同,而通过本发明提供的基于代码动态编译的流程编排执行方法进行流程编排执行,软件程序的提供方只需要提供相应的热插拔的组件即可,用户可以自由配置。
应注意到:相似的标号在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中可能不再对其进行进一步定义和解释。
以上对本发明所提供的基于代码动态编译的流程编排执行方法及装置进行了介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明及核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (13)
1.基于代码动态编译的流程编排执行方法,其特征在于,包括以下步骤:
步骤S101:读取待执行流程,根据前端请求的流程参数尝试进入流程;
步骤S102:判断系统是否已经解析编译过所述待执行流程,若是则执行步骤S109,否则对所述待执行流程进行加锁并执行步骤S103;
步骤S103:获取所述待执行流程对应的流程编排配置实体信息;
步骤S104:对所述流程编排配置实体信息进行校验和解析,并进行流程编排代码生成前的初始化操作;
步骤S105:根据解析后的所述流程编排配置实体信息,生成对应的流程编排代码;
步骤S106:判断系统是否已经对所述流程编排代码进行过固化操作,若是执行步骤S107,否则执行步骤S108;
步骤S107:固化生成的所述流程编排代码,并将所述流程编排代码保存到数据库或者文件中;
步骤S108:对生成的所述流程编排代码进行编译,动态加载到应用程序中,并在编译完成后将所述待执行流程解锁;
步骤S109:执行编译后的所述流程编排代码,并定位到所述待执行流程当前所在的业务节点;
步骤S110:执行所述业务节点操作;
步骤S111:判断当前所述待执行流程是否执行结束,即判断当前业务节点是否是所述待执行流程的最后一个业务节点,若是则执行步骤S113,否则执行步骤S112;
步骤S112:在流程编排的所有业务节点执行完成前,保存所述待执行流程的中间状态,以供后续业务节点使用;
步骤S113:在流程编排的所有业务节点执行完成后,返回所述待执行流程的各业务节点的执行结果。
2.根据权利要求1所述的基于代码动态编译的流程编排执行方法,其特征在于,
所述步骤S102中,在加锁状态下,其他线程进入所述待执行流程时会先阻塞,暂不执行步骤S102,直至所述步骤S108中编译完成后将所述待执行流程解锁。
3.根据权利要求1所述的基于代码动态编译的流程编排执行方法,其特征在于,
所述步骤S105中,基于模版引擎实现所述流程编排代码的生成;所述模版引擎包括开源的模版引擎,或者自定义模版引擎;
遍历根据业务节点或连接线规则解析成的所述数据传输对象,基于对应模版为每个所述数据传输对象生成对应的代码字符串;
在所有所述数据传输对象均生成完对应的所述流程编排代码后,将所述流程编排代码整合,拼接成为代码字符串,同时将生成的所述代码字符串通过文件或数据库方式持久化存储;
所述步骤S108中,将生成的所述代码字符串编译成机器可识别执行的代码。
4.根据权利要求3所述的基于代码动态编译的流程编排执行方法,其特征在于,
所述开源的模版引擎包括Java的Velocity、Python的Jinja;所述机器可识别执行的代码包括Java的字节码或机器码。
5.根据权利要求1所述的基于代码动态编译的流程编排执行方法,其特征在于,
所述步骤S113中,在流程编排的所有业务节点执行完成后,根据自定义结束策略,选择是否清除之前保存的所述待执行流程中间状态。
6.基于代码动态编译的流程编排执行装置,其特征在于,包括:
流程编排DAO模块,用于获取待执行流程对应的流程编排配置实体信息,以及对流程编排配置实体信息的保存、查询、删除、复制;
流程解析模块,用于对所述流程编排配置实体信息进行校验和解析,并通过对应的业务节点或连接线规则将所述流程编排配置实体信息解析成数据传输对象后进行结果输出;
代码生成模块,用于根据解析后的所述流程编排配置实体信息,生成对应的流程编排代码;
动态编译模块,用于对生成的所述流程编排代码进行编译,动态加载到应用程序中,并在编译完成后将所述待执行流程解锁;
流程编排执行模块,用于执行编译后的所述流程编排代码,并定位到所述待执行流程当前所在的业务节点,执行所述业务节点操作;
流程编排状态机,用于在流程编排的所有业务节点执行完成前,保存所述待执行流程的中间状态,以供后续业务节点使用,并在流程编排的所有业务节点执行完成后,对所述待执行流程中间状态执行结束策略;
代码固化模块,用于固化生成的所述流程编排代码,并将所述流程编排代码保存到数据库或者文件中;
程序启动初始化模块,用于程序启动时将已经固化的代码直接编译。
7.根据权利要求6所述的基于代码动态编译的流程编排执行装置,其特征在于,
所述流程编排DAO模块用于获取所述待执行流程对应的流程编排配置实体信息的同时,所述流程编排执行模块用于对所述待执行流程进行加锁阻塞;
在加锁状态下,其他线程进入所述待执行流程时会先阻塞,即暂停对系统是否已经解析编译过所述待执行流程进行判断,直至编译完成后,所述流程编排执行模块用于将所述待执行流程解锁。
8.根据权利要求6所述的基于代码动态编译的流程编排执行装置,其特征在于,
所述代码生成模块基于模版引擎用于实现所述流程编排代码的生成;所述模版引擎包括开源的模版引擎,或者自定义模版引擎;
所述代码生成模块用于遍历根据业务节点或连接线规则解析成的所述数据传输对象,基于对应模版为每个所述数据传输对象生成对应的代码字符串;
在所有所述数据传输对象均生成完对应的所述流程编排代码后,所述代码生成模块用于将所述流程编排代码整合,拼接成为代码字符串,同时将生成的所述代码字符串通过文件或数据库方式持久化存储;
所述动态编译模块用于将生成的所述代码字符串编译成机器可识别执行的代码。
9.根据权利要求6所述的基于代码动态编译的流程编排执行装置,其特征在于,
在流程编排的所有业务节点执行完成后,所述流程编排状态机用于根据自定义结束策略,选择是否清除之前保存的所述待执行流程中间状态。
10.根据权利要求6所述的基于代码动态编译的流程编排执行装置,其特征在于,
所述流程编排执行模块用于统筹整个流程编排执行过程,包括用于判断系统是否已经解析编译过所述待执行流程、对所述待执行流程进行加锁阻塞、定位到所述待执行流程当前所在的业务节点和编译时各个模块之间的路由流转。
11.一种计算机设备,包括存储器和处理器,所述存储器存储计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现权利要求1-5中任一所述的基于代码动态编译的流程编排执行方法的步骤。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-5中任一所述的基于代码动态编译的流程编排执行方法的步骤。
13.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1-5中任一所述的基于代码动态编译的流程编排执行方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311041710.4A CN116795378B (zh) | 2023-08-18 | 2023-08-18 | 基于代码动态编译的流程编排执行方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311041710.4A CN116795378B (zh) | 2023-08-18 | 2023-08-18 | 基于代码动态编译的流程编排执行方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116795378A true CN116795378A (zh) | 2023-09-22 |
CN116795378B CN116795378B (zh) | 2023-11-21 |
Family
ID=88039943
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311041710.4A Active CN116795378B (zh) | 2023-08-18 | 2023-08-18 | 基于代码动态编译的流程编排执行方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116795378B (zh) |
Citations (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013036703A2 (en) * | 2011-09-09 | 2013-03-14 | Microsoft Corporation | Profile guided jit code generation |
CN104461522A (zh) * | 2014-11-26 | 2015-03-25 | 盈世信息科技(北京)有限公司 | 基于脚本的辅助业务实现方法 |
CN107463421A (zh) * | 2017-07-14 | 2017-12-12 | 清华大学 | 一种静态流程模型的编译执行方法及系统 |
CN111078315A (zh) * | 2019-12-12 | 2020-04-28 | 拉扎斯网络科技(上海)有限公司 | 微服务编排、执行方法及系统、架构、设备、存储介质 |
CN111414170A (zh) * | 2020-03-05 | 2020-07-14 | 莱诺斯科技(北京)股份有限公司 | 一种可视化编排测试过程的装置及方法 |
CN112379884A (zh) * | 2020-11-13 | 2021-02-19 | 李斌 | 基于Spark和并行内存计算的流程引擎实现方法及系统 |
CN112947934A (zh) * | 2021-02-25 | 2021-06-11 | 山东爱城市网信息技术有限公司 | 一种动态变换业务逻辑的方法、设备及介质 |
CN113885844A (zh) * | 2021-09-26 | 2022-01-04 | 上海微盟企业发展有限公司 | 一种业务服务编排方法及相关装置 |
CN114428613A (zh) * | 2021-12-21 | 2022-05-03 | 阿里巴巴(中国)有限公司 | 一种流程编排方法、系统、介质及计算机程序产品 |
CN115129304A (zh) * | 2022-05-20 | 2022-09-30 | 武汉爱科软件技术股份有限公司 | 一种基于零代码平台的可视化业务服务编排方法及装置 |
US20220327006A1 (en) * | 2021-04-09 | 2022-10-13 | Nb Ventures, Inc. Dba Gep | Process orchestration in enterprise application of codeless platform |
CN115422063A (zh) * | 2022-09-06 | 2022-12-02 | 宁波数益工联科技有限公司 | 一种低代码接口自动化系统、电子设备及存储介质 |
CN115639980A (zh) * | 2022-10-08 | 2023-01-24 | 浙江中控技术股份有限公司 | 一种低代码平台可拖拽的前端逻辑编排方法及装置 |
CN115658041A (zh) * | 2022-12-27 | 2023-01-31 | 南京国睿信维软件有限公司 | 基于在线业务流程编排的低代码增强业务实现方法 |
CN116339690A (zh) * | 2022-12-26 | 2023-06-27 | 中国电信股份有限公司 | 业务流程的执行方法及其装置、电子设备及存储介质 |
CN116506187A (zh) * | 2023-04-28 | 2023-07-28 | 北京蒸汽记忆科技有限公司 | 一种基于编排的自定义认证相关流程方法 |
CN116594622A (zh) * | 2023-04-03 | 2023-08-15 | 南京大学 | 基于类型推导与数据流分析的Python程序编译方法及系统 |
-
2023
- 2023-08-18 CN CN202311041710.4A patent/CN116795378B/zh active Active
Patent Citations (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013036703A2 (en) * | 2011-09-09 | 2013-03-14 | Microsoft Corporation | Profile guided jit code generation |
CN104461522A (zh) * | 2014-11-26 | 2015-03-25 | 盈世信息科技(北京)有限公司 | 基于脚本的辅助业务实现方法 |
CN107463421A (zh) * | 2017-07-14 | 2017-12-12 | 清华大学 | 一种静态流程模型的编译执行方法及系统 |
CN111078315A (zh) * | 2019-12-12 | 2020-04-28 | 拉扎斯网络科技(上海)有限公司 | 微服务编排、执行方法及系统、架构、设备、存储介质 |
CN111414170A (zh) * | 2020-03-05 | 2020-07-14 | 莱诺斯科技(北京)股份有限公司 | 一种可视化编排测试过程的装置及方法 |
CN112379884A (zh) * | 2020-11-13 | 2021-02-19 | 李斌 | 基于Spark和并行内存计算的流程引擎实现方法及系统 |
CN112947934A (zh) * | 2021-02-25 | 2021-06-11 | 山东爱城市网信息技术有限公司 | 一种动态变换业务逻辑的方法、设备及介质 |
US20220327006A1 (en) * | 2021-04-09 | 2022-10-13 | Nb Ventures, Inc. Dba Gep | Process orchestration in enterprise application of codeless platform |
CN113885844A (zh) * | 2021-09-26 | 2022-01-04 | 上海微盟企业发展有限公司 | 一种业务服务编排方法及相关装置 |
CN114428613A (zh) * | 2021-12-21 | 2022-05-03 | 阿里巴巴(中国)有限公司 | 一种流程编排方法、系统、介质及计算机程序产品 |
CN115129304A (zh) * | 2022-05-20 | 2022-09-30 | 武汉爱科软件技术股份有限公司 | 一种基于零代码平台的可视化业务服务编排方法及装置 |
CN115422063A (zh) * | 2022-09-06 | 2022-12-02 | 宁波数益工联科技有限公司 | 一种低代码接口自动化系统、电子设备及存储介质 |
CN115639980A (zh) * | 2022-10-08 | 2023-01-24 | 浙江中控技术股份有限公司 | 一种低代码平台可拖拽的前端逻辑编排方法及装置 |
CN116339690A (zh) * | 2022-12-26 | 2023-06-27 | 中国电信股份有限公司 | 业务流程的执行方法及其装置、电子设备及存储介质 |
CN115658041A (zh) * | 2022-12-27 | 2023-01-31 | 南京国睿信维软件有限公司 | 基于在线业务流程编排的低代码增强业务实现方法 |
CN116594622A (zh) * | 2023-04-03 | 2023-08-15 | 南京大学 | 基于类型推导与数据流分析的Python程序编译方法及系统 |
CN116506187A (zh) * | 2023-04-28 | 2023-07-28 | 北京蒸汽记忆科技有限公司 | 一种基于编排的自定义认证相关流程方法 |
Non-Patent Citations (3)
Title |
---|
TOMOKO OHYA等: "Theoretical Analysis on Effects of Room Arrangement on Inhabitant Behaviors", SICE ANNUAL CONFERENCE 2007, pages 1558 - 1562 * |
万书鹏等: "基于微服务架构的新一代调控系统服务编排技术", 电力系统自动化, vol. 43, no. 22, pages 116 - 121 * |
凌明;武建平;冯克环;: "一种Dalvik虚拟机的自适应编译系统", 电子学报, no. 08, pages 1622 - 1627 * |
Also Published As
Publication number | Publication date |
---|---|
CN116795378B (zh) | 2023-11-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7090778B2 (ja) | 影響分析 | |
CN108614770B (zh) | 自动化测试断言方法、装置、存储介质及设备 | |
CN107273286B (zh) | 针对任务应用的场景自动化测试平台及方法 | |
CN103150249B (zh) | 一种自动化测试的方法和系统 | |
US8739150B2 (en) | Systems and methods for dynamically replacing code objects via conditional pattern templates | |
US6385765B1 (en) | Specification and verification for concurrent systems with graphical and textual editors | |
Koehler et al. | Declarative techniques for model-driven business process integration | |
US20090210858A1 (en) | Method and apparatus for generating virtual software platform based on component model and validating software platform architecture using the platform | |
CN112148278A (zh) | 可视化的区块链智能合约框架及智能合约开发部署方法 | |
EP1548581A2 (en) | Methods, apparatus and programs for system development | |
CN111459504A (zh) | 智能合约的处理方法、装置、设备和存储介质 | |
US20100122258A1 (en) | Versioning and effectivity dates for orchestration business process design | |
Schneid et al. | Static analysis of BPMN-based process-driven applications | |
CN116795378B (zh) | 基于代码动态编译的流程编排执行方法及装置 | |
Rahman et al. | A Framework for Modelling Blockchain based Supply Chain Management System to ensure soundness of Smart Contract Workflow. | |
US9396239B2 (en) | Compiling method, storage medium and compiling apparatus | |
Dürr et al. | An evaluation of modeling options for cloud-native application architectures to enable quality investigations | |
CN110851516B (zh) | 主机运控系统及方法 | |
WO2011041246A1 (en) | Systems and methods for analyzing and transforming an application from a source installation to a target installation | |
Kanchana et al. | Automated Development and Testing of ECUs in Automotive Industry with Jenkins | |
Pereira et al. | Development of self-diagnosis tests system using a DSL for creating new test suites for integration in a cyber-physical system | |
da Cruz et al. | Using explicit control processes in distributed workflows to gather provenance | |
CN117234466B (zh) | 企业管理软件开发方法、系统、设备及存储介质 | |
EP4287027A1 (en) | Method and system for generating test cases for an engineering program | |
KR102004592B1 (ko) | 자동차 제어 소프트웨어의 정형검증을 위한 장치 및 방법, 이를 수행하기 위한 기록 매체 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |