snakerflow教程文档
更新时间:2024-03-25 16:55:01 阅读量: 综合文库 文档下载
- snakerflow官网推荐度:
- 相关推荐
一、snakerflow工作流概述
1、Snakerflow工作流运作机制,其实就是围绕7张核心的增删改查进行运作。
1)首先你需要定义一个流程文件也就是*.snaker文件,这个文件是对流程的描述。 2)部署流程文件*.snaker,也就是在数据库中对wf_process新增一条记录,其中表wf_process的content字段就是存的流程文件内容。这表中的一条记录相当于一个模板,所有的流程实例都已据此生成。
3)启动一个流程,也就是我们所说的生成一个流程实例;生成时要指定wf_process表的一条记录的ID。启动成功后会在数据库中wf_order和wf_hist_order表中分别插入一条记录,两个表的ID是相同的,不带hist的表都是存储当前有效(执行中)的记录。带hist是存储的结束的(下同)。wf_hist_order比wf_order表多一个字段order_state,用来表示该流程实例是否已经结束,1进行中;0结束。所有字段的含义和枚举值都在源码bean中有解释。(下同)。Order表中variable字段存的是该流程实例的全局变量,你可以在任何节点的时候获取使用。
4)执行节点的任务A2,上述中wf_task存的是执行中的记录,也就是说在执行A2前,wf_task中肯定会有一条执行中的任务记录,假设为A1,那么执行A2时的增删改为先将wf_task和wf_task_actor表中A1的记录插入wf_hist_task和wf_hist_task_actor中;其次是删除wf_task和wf_task_actor中A1记录,然后将A2的信息插入到wf_task和wf_task_actor中。此时wf_task表的parent_task_id是历史表A2记录的Id,通过此可将所有任务串联起来。task表的variable中的值为局部变量只能在当前task中使用。有人会有疑问,假设有如下流程图,执行task1时会怎么样?
因为开始节点是一个比较特殊的nodemodel,群主称之为流转逻辑元素(下面总体设计思路中会有详细介绍),它只负责流转到下一节点不负责执行,也就没有数据库的增删改。这样直接流转到task1,插入wf_hist_task和wf_hist_task_actor,并且又直接流转到end节点,end节点也是一个流转元素,它会直接删除wf_order表的记录并更改该流程实例wf_hist_order表的order_state的状态。
至此一个流程的所有增删改查结束。
二、snakerflow工作流执行过程
此处结合源码分析整个执行过程:
1、工作流的入口类,是你在配置文件中配置SnakerEngine的实现类。比如集成spring你需要配置如下内容
该入口类包含5大服务和一个配置解析类
从上图可知,流程引擎SnakerEngine对象是由Configuration根据snaker.xml构建所得,并且包含五项服务:
1)ProcessService:负责部署、卸载、更新流程,并且可创建无流程定义的自由流程 2)OrderService:负责创建、更新、完成、终止流程实例 3)TaskService:负责创建、完成任务,并且可创建自由任务 4)ManagerService:负责提供与流程相关的管理服务 5)QueryService:负责与流程相关的查询操作
对于不使用其他框架IOC容器创建对象,就像上面所述流程引擎SnakerEngine对象是由Configuration根据snaker.xml构建所得,其他服务也配置在snaker.xml中,我们称之非托管容器,即所有对象的创建由snaker自身创建。如何做到的?说白了就是把类名存到内存map中需要的时候反射创建出一个对象来。
对于托管型容器,比如交给spring的ioc来创建对象,那么就应该在spring的配置文件里定义了。
1)不依赖其他框架时,入口类定义的是
用到的创建对象ioc容器是
如何构建流程引擎
Parser方法往下都是从ioc容器中创建五大服务对象,关键是parser方法都干了什么。
读取了几个配置文件,isCMB就是判断是否是容器托管,就是是否使用snaker自身的ioc容器。
也就是说会读取ext.config.xml文件
2)对于托管类,据spring为例,配置了SpringSnakerEngine
使用了SpringConfiguration
Ioc容器交给了spring的ApplicationContext,是否容器托管设置为了true,也就是说不会读取ext.config.xml
至此,在启动服务器时,snaker的初始化工作完成。
2、流程部署,那肯定是去找IProcess的实现类ProcessService啊
没什么好说的组织一个bean存到数据库wf_process表,关键是交给谁去saveProcess。这是在配置文件中配置的orm工具,交给mybatis的具体配置如下。
这里还要提到cache方法,为什么要提到它,因为它的方法里面有解析流程文件为具体哪个nodemodel。
Snaker崇尚简单,所以组件模型非常精简,主要由两类元素组成:
1)流转逻辑元素:StartModel,DecisionModel,ForkModel,JoinModel,EndModel 2)业务逻辑元素:TaskModel,CustomModel,SubProcessModel
也就是说你部署流程的同时,会在内存中缓存一个Process对象,并且这个对象中有ProcessModel包含了解析流程文件的所有节点信息。
3、启动实例
先从数据库获取指定id的流程bean,上述中提到cache方法,获取的同时也会缓存,解析成对应的nodemodel。 然后启动,
1)创建一个执行单元Execution,该执行单元包含了流程引擎对象,Process bean,Order bean 和执行人和参数。此处对数据库新增order相关表。 2)任务节点执行
注释写得很清楚,不赘述。
三、snakerflow的总体设计思路
此处不再做赘述,参考http://115.29.138.45/design.html
四、snakerflow详细介绍
五、snakerflow扩展
六、Snakerflow使用
1、首先进入系统,并分配流程管理权限
2、选择其中一个流程点设计按钮,进入流程设计画面
此时你将看到流程设计页面,画流程图的原则是必须要有一个开始节点和一个结束节点。
3、流程属性
点击空白处会出现该流程文件的属性
名称为必填项,实例启动Url也是必填项,指示流程启动时跳转显示业务数据的地址。
4、任务节点介绍
新增任务节点或者其他节点时,只需要点击左侧某类型节点不松鼠标,并将其拖至右侧画板区域即可显示该类型节点。
单击一个任务节点会弹出如下一个任务属性框,名称是必填项且不能与其他节点重复,参与者也是必填项,参与类型如果是普通任务就选普通参与,如果是会签任务,则必须选择会签参与,前、后置拦截器是用于更新业务数据,需要编写java代码,并将完整类名填写于此。 用键盘delete键可以删除任务节点。 5、决策节点
决策节点需要定义决策表达式,表达式的位置可以在三处: 1)决策节点上
2)决策节点处理类中 3)决策表达式出边上
6、连接线介绍
使用连接线时需要先选择左侧工具栏里面的连接线工具
连接时,先选中一个节点A,然后再选中另一个节点B,则节点A和B就会被连接,删除连接线也用delete键。
正在阅读:
snakerflow教程文档03-25
六年级15—16学年上学期语文(人教新课标)林海阅读训练(附答案02-29
砖混结构住宅楼技术标书08-24
2020年经典心情语录03-03
工程项目管理试卷及答案201602-29
爱打扮的妈妈作文800字07-11
事业单位类别界定的难点问题及对策研究10-18
《窃读记》说课稿04-16
第4节 生物对环境的适应教案 - 图文01-21
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- snakerflow
- 文档
- 教程