由于自己最近迷上了Golang,而自己对于对于activiti等工作流引擎有比较深入的研究,而GoLang目前并没有一个成熟开源的企业级工作流引擎存在,于是乎,自己突然就有了一个将activiti初步移植到GoLang平台上的想法。
那么,要想符合BPMN规范,就必须符合BPMN2.0的规范,于是自己开始参照activiti-bpmn-model模块的源码去写解析器。
首先为大家介绍一下activiti-bpmn-model模块,它是activiti-core中的一个核心包,activiti要想解析bpmn文件必须以它为基础,通过activiti-bpmn-converter将bpmn文件的各类标签及属性转成我们所熟悉的model类。
至于转换过程,两种语言实现的难易程度暂且不谈(实践证明,在数据处理及io这方面,Java对比golang,Java那是拍马都赶不上,不管是速度还是代码量),但为什么说才到解析的阶段就失败了呢?
在写了一个demo进行尝试的过程中,突然意识到,在bpmn规范中,有一些元素只适合Java语言适配,举个例子,监听器的执行指定方式就有一个是java类,在事件触发时通过指定Java监听器类的全路径类名来找到该监听器,从而执行监听器的功能函数。还有其它很多元素等等。
鉴于以上原因,直接放弃这个费力不讨好的计划!
其实,GoLang不是不能这么做,而是对于去适配BPMN规范,会导致许多额外的工作量,让Golang在自己的优势领域无法发挥出其效能;
其实我们可以换个思路就如go-workflow一般,采用json格式的数据去做可视化流程设计,后端通过Golang去解析并按我们自己规定的规范去执行。当然,这个工程量无疑是十分巨大的。
(本人现在还是一名大三学生,希望各路大佬能提提意见)