F2工作流引擎这工作流引擎体系架构(二)
为了能更好的了解F2工作流引擎的架构体系,花了些时间画了整个架构的体系图。F2工作流引擎遵循参考WFCM规范,目标是实现轻量级的工作流引擎,支持多种数据库及快速应用到任何基于.net管理系统,实现工作流审批、业务流(BPM)的智能性、灵活性、简单实用性,具有强大的扩张性、集成性、独立性、开放性和稳定性,实现了可视化的流程设计或优化,流程的定制完全是通过鼠标拖、拉、拽的方式来完成,常见的串行、并行、分支、聚合都可以非常方便快捷地实现,依托于工作流强大的自定义,管理员还可以随时根据企业的情况调整流程,真正做到企业流程的不断优化。图形化、可视化设计流程定义通过Web端纯JS流程设计器无需编程的“拖、拉”式图形用户流程设计环境,支持通用流程条件,多节点,多流向。
关于轻量级:易集成、真可嵌入式架构决定其是否为真正轻量级,所谓轻量级就是易用易集成,没有臃肿的第三方框架,大量使用第三方的框架会使使用者的门槛很高,大量的应用第三方框架不仅集成时非常困难,而且要解决各种版本冲突问题,最终导致自称轻量级的工作流却无法达到真正嵌入式集成或者要做嵌入式集成时要花费大量的时间和人力成本来解决种种版本冲突问题,百度搜索到的几乎都自称轻量级,但是决多数都是为了自称轻量级而叫轻量级,但实际应用还是依然是重型工作流,整合嵌入非常困难,各种DLL或Jar包冲突。
从我的理解,首先为什么要做到轻量级呢,原因就是你是要为别的系统服务的,做为工作流引擎是要面对各种业务系统,被业务系统集成整合进去的,由于这样的应用就决定了工作流引擎自身必须是一个非常纯净的代码环境。所以最极致轻量级的就是C#或Java的原生代码,整个引擎最多使用一种行业最常用的架构,比如Java的SpringMVC,.net的asp.net MVC,除此以外不使用任何第三个架构,这样你的引擎代码将十分纯洁,而且可以只编译成一个DLL或一个Jar包。这样不仅整合时没有任何冲突,而且也不会导致因为过多的引用使原来的业务系统环境就得更加杂锁复杂进而会导致将来的维护成本直线上升。
F2BPM工作流引擎的架构设计就是基于极致轻量级的设计,真正做到轻量级这个称呼。实务做好事情,比漂亮的宣传带来实实在在的成就。

上图:F2BPM工作流引擎微内核技术架构

上图:F2BPM流程引擎五大接口
l Web建模工具:也叫“流程设计器” 即基于浏览器纯JS流程设计器无需编程的“拖、拉”式图形用户流程设计器工具。
l 流程引擎:调度,推进工作流过程和活动。
l 任务管理器:维护活动,为外部系统调用参与者任务列表提供数据
l 组织模型:流程任务最终是应用到人,达到人机交互的效果,为流程运转提供参与者。
l 支持多数据库的ORM:工作流引擎需要应用到各个系统中去,需要有自己的ORM数据库访问层,同时支持多种数据库类型。
l 流程数据:即模型库数据,流程定义相关数据。
l 相关数据:即运动库数据,相关待办事项任务,活动实例等运动数据,流程上下文数据等。
l 流程实例:流程实例工单数据。
l 任务数据:待办工作项数据。
l 形参数据:外部Tools,Apps中规定的参数类型数据。
l 控制数据:迁移的前驱ID,后续活动ID,工作流对象状态等数据。
l 业务表单数据:工作任务活动界面的数据,即表单展现
l 外部组织模型数据:外部系统的用户组织角色数据
l 外部应用数据:外部数据执行所需要的数据
工作流:Workflow
工作流定义:WorkflowDefinition
活动Activity:活动即是步骤的意思。
参与者Actor:参与者是直接或间接参与执行工作的人、机器或组织单元。
任务Task:用户待办任务实例,是工作的最小单位,即工作项。
迁移:流转转向,即带剑头的线所表示。即Petri网中的变迁
SplitXOR:异或散发,即后续步骤只能选择一条分支。
SplitOR:或散发,即后续步骤可选择大于等于1的分支
JoinXOR:异或汇聚,即前继步骤只要有一条分支聚合就满足
JoinOR:聚合,根据规则需要聚合1条或多条分支
WorkFlowEnactmntService(工作流执行服务)这个组件就是我们平常说的工作流执行服务或工作流引擎包含了多个工作流机,主要功能是读取工作流定义、根据工作流定义驱动工作流的流转,分为三个阶段:
1、模型建立阶段:利用工作流建模工具设计,并把XPDL文件解析导入到模型库。
2、模型实例化阶段:模型库数据库导入到运动库,并做好状态初始化,并分配每个活动执行所需要的资源参数等。
3、模型执行阶段:根据运行库的状态,条件判定,推动流程状态的迁移,并完成相关任务,同时提供注程实例运转过程的监控跟跟踪。
F2工作流引擎这工作流引擎体系架构(二)的更多相关文章
- GPU体系架构(二):GPU存储体系
GPU是一个外围设备,本来是专门作为图形渲染使用的,但是随着其功能的越来越强大,GPU也逐渐成为继CPU之后的又一计算核心.但不同于CPU的架构设计,GPU的架构从一开始就更倾向于图形渲染和大规模数据 ...
- .net之工作流工程展示及代码分享(二)工作流引擎
在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程.流程步骤.流程实例.流程步骤实例类. 流程类: [Serializable] public class Flow { [Xml ...
- InnoDB引擎体系架构
InnoDB引擎架构介绍 innodb存储引擎的体系架构,可简单划分成三层: 数据文件 :磁盘上的数据文件 内存池:缓存磁盘上的数据,方便读取,同时在对磁盘文件数据修改之前在这里缓存,然后按一定规刷新 ...
- Java工作流引擎表单引擎之JS表单字段输入脚本验证
关键字: 表单设计器, 字段验证. workflow,ccform, ccBPM. 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流bpm工作流系统 java工作流 ...
- MySQL InnoDB存储引擎体系架构 —— 索引高级
转载地址:https://mp.weixin.qq.com/s/HNnzAgUtBoDhhJpsA0fjKQ 世界上只两件东西能震撼人们的心灵:一件是我们心中崇高的道德标准:另一件是我们头顶上灿烂的星 ...
- 逻辑引擎、工作流、CMDB小感
工作流是啥? 在界面上画画点点就能生成代码,这是很吸引人的事情,也是很多自动化工具追求的目标.工作流就是这么一个东西,通过定义流程和输入,就能实现你想要的东西,不需要编写代码. 工作流的实现 通过解析 ...
- mysql的体系架构和存储引擎
定义数据库和实例 数据库:物理操作系统的文件或其他形式文件类型的集合.在mysql数据库中,数据库文件可以是frm.MYD.MYI.ibd结尾的文件. 实例:MySQL数据库由后台线程以及一个共享内存 ...
- 《BI那点儿事》SQL Server 2008体系架构
Microsoft SQL Server是一个提供了联机事务处理.数据仓库.电子商务应用的数据库和数据分析的平台.体系架构是描述系统组成要素和要素之间关系的方式.Microsoft SQL Serve ...
- 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台
面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...
随机推荐
- angularJS中的Promise对象($q)的深入理解
原文链接:a better way to learn AngularJS - promises AngularJS通过内置的$q服务提供Promise编程模式.通过将异步函数注册到promise对象, ...
- 面对对象之@classmethod、@staticmethod用法
@classmethod用法(修饰的函数,第一个参数cls默认是类名,调用方法:实例对象或类对象.方法) class C_mthod(object): name = "f**k" ...
- [转]RAID基础,RAID10与RAID01比较,RAID10与RAID5比较
原文:http://blog.itpub.net/787018/viewspace-666280/ 文档内容3部分:1.基本的RAID级别介绍2.RAID10和RAID01的比较3.RAID10和RA ...
- JAVA中取余(%)规则和介绍
在java中%的含义为取余. java :a%b 数学公式a%b=a-(a/b)*b
- 关于C语言宏定义 使用do{ xxxx }while()
暂时感觉像是由于":"的原因,关于使用习惯方面的问题!! 下面是copy的: 这样的宏见过么: Cpp代码 #define FOO(x) do {\ some_code_line_ ...
- node.js + expres 的安装
一 windows下安装 首先去官网下载msi安装包. 两篇很有参考价值的文章: http://cnodejs.org/topic/4fae80c02e8fb5bc650a8360 http://bl ...
- Write a script to check an interesting game 6174
# -*- coding: utf-8 -*-#from ftplib import FTPimport osdef sort_reverse(x,y): if x>y: return -1 i ...
- 《与小卡特一起学Python》 Code2
下边是一个猜数字的小游戏: 几乎所有语言都这样做的…… here we go! import random secret = random.randint(1,99) guess = 0 tries ...
- 关于C#调用C++ 的DLL传送字符串显示乱码的解决
最近在做一个程序,想把某些功能用C++写成DLL供C#调用,但是在写好DLL用C#传递字符串参数时,在DLL中显示传送过来的字符串是乱码,DLL里的代码根本无法用这些字符串进行其它的处理.为此,花了一 ...
- Servlet开发详解
一.Servlet简介 Servlet是sun公司提供的一门用于动态web资源的技术 sun公司在其API中提供了一个Servlet接口,用户若想开发一个动态web资源,需要完成两个步骤: 编写一个J ...