工作流引擎讲解

上传人:mg****85 文档编号:34281543 上传时间:2018-02-22 格式:DOCX 页数:11 大小:281.40KB
返回 下载 相关 举报
工作流引擎讲解_第1页
第1页 / 共11页
工作流引擎讲解_第2页
第2页 / 共11页
工作流引擎讲解_第3页
第3页 / 共11页
工作流引擎讲解_第4页
第4页 / 共11页
工作流引擎讲解_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《工作流引擎讲解》由会员分享,可在线阅读,更多相关《工作流引擎讲解(11页珍藏版)》请在金锄头文库上搜索。

1、1什么是工作流引擎,工作流引擎有什么作用,为什么需要工作流管理系统,在这里我们主要研究它的好处,你想要理解它的好处,就得知道不使用它会带来什么样的坏处。现在我们来讲工作流,什么是工作流?所谓的工作流就是通常所说的业务流程,那么所谓的业务流程换句话来讲就是多个人在一起去完成一件事情。这就可以称之为工作流。流程的本质就是一个参与者参与到一个过程里面来那么现在我们就想为什么需要工作流管理系统,工作流管理系统能给我们带来什么好处。我们就从这个角度出发来了解 JBPM 工作流引擎下面我们就来看关于为什么需要工作流管理系统,以及它给我们带来的好处。实际上它带来的好处就是使某些容易变化的东西抽象出去,我们能

2、够通过某种方式改变它,然后你就可以对你的某些核心部分不需要做什么变动现在就通过一个小例子来讲这个工作流引擎到底是一个什么东西举个请假流程的例子 一个请假的过程重点讲解 UML 里面的内容,确定 UML 里面流程图的讲解顺序请假流程 现在只看左边的内容,右边的后面再讲,我是方便讲解就将这点东西放到这个空白的地方、1、 、2 、 、ROSE 、 3 、API、4 、jpbm、5、6、7、 、8、 、一个简单的流程图 Main 模拟出请假的过程、 、 、 、2对提交请假单进行分析用一个用户来表示普通用户和审批者,只不过他们的权限不同,他们都能够登录到这个系统现在我们来看用户和请假单,分析他们之间的关

3、系,用户和请假单之间的联系有请假,用户填了一个请假单就创建了一个请假单对象,他们之该是一对多的关系。因为某一个用户可以请多次假 对吧(其实一般是一个请假单对应一个请假者,这个需求就应该得到客户的确定,客户说了算)那么用户和这个请假单之间还有没有其他联系?接下来是提交请假单。我首先将请假单提交给张三,那么张三就能够看到这个请假单,如果用户将请假单提交给张三,那么就可以在张三和请假单之间建立一个待审关系 他们之间的关系也是一对多的关系,因为张三可以同时审核几个请假单,就是这意思,一个请假单等待的用户是一个,从现在的需求来看。那么两者之间还有另外一个联系那就是已审,一个用户可以审批过多个请假单,请假

4、单也可以被多个用户审批 比如张三审批以后交给李四审批,李四审批以后交给王五审批,其实这个已审就是记录审批信息的,比如审批时间,审批意见,把它放在审批关联里边 这个就是一个基本的概念,了解这个概念之后我们就考虑它的设计,JBPM 实际上就是协助我们把这个请假单从一个用户手上转递到另一个用户手上。当把这个模型分析清楚了我们就要去实现它。这里重点分析提交,怎样去提交,在 SSH 架构体下,提交请假单这个业务逻辑,你可能就需要这样一个业务逻辑类,里边可能有这么一个方法专门来进行提交操作的,那么这个方法怎样设计,以及这个方法怎样去实现。了解这点你就可以了解 JBPM 干什么的,能给我们带来什么好处 (用

5、自己的话说明一下提交请假单的过程 ) 、ID 、ID、if then 、if、and、then 、 . .在这个过程里边写这些代码是比较麻烦的,现在还只是一个固定的流程,假设我现在在这里边变化一下 那么整个方案都要变动。 我现在希望有一个会签的功能 比如我现在要将这个这样的功能,把这个请假3单同时提交给多个审批者审批。 那这个时候你就不能够在请假单中间增加一个外键,把它整成审批者什么的,这个时候你就要新建一张表,在那个表里面记录这个请假单和审批者之间的关联,提交请假单实际上就是维护这个审批者与待审之间的关联假设我现在要新加一个审批者,或者要减少一个审批者,那么就要修改代码这就很麻烦。 。所以假

6、设一开始客户就告诉你这个期间可能会有人员的变动。那这个时候我们就应该怎么办?有什么样的思路? 我们是不是就应该对这一些变化进行一个小小的封装?怎样去封装或者怎样来封装呢?我们以前是不是经常把那些数据库里面的用户名,密码什么的放在一个配置文件里面 因为它可能经常发生变化。所以这里我们也是将他们整合到一个配置文件里面 当你在思考如何来创建这么一个文件 给它指定某种规则来描述这个流程 然后再写一段代码来解释这个规则 然后根据这个规则来调度这个流转 这件事情的时候 你就是在设计一个工作流引擎提交请假单怎样提交,工作流引擎就是做这种事情的工作流引擎做两件事情1、给你提供某种规范来定义规则,如何定义一个流

7、程的这种规范。你可以根据它提供的相关概念来定义更为复杂的流程。这就是工作流引擎做的第一件事情叫做定义流程2、工作流引擎还得解释这个规则,还要负责流转 这个过程就叫执行流程JBPM 的核心就是定义流程和执行流程总的来说(这是一段总结性的语言,稍微有点官方)工作流引擎为我们提供相关概念的定义,给我们提供了相关 API 调用这个引擎去执行流程如果我们不用这个工作流引擎,那么我们的代码就会非常的复杂,而且维护起来非常困难流程的操作实际上就是工作流引擎提供相关的 API 我们去调用它接下来我们就来看 工作流管理系统的构成(在 UML 的 ”请假流程”里面)工作流引擎(这个是核心,后面的是一些常用功能)工

8、作流设计器 (设计流程(ROSE) 、定义流程 我们是使用它,而不是自己做一个 )流程操作(流程引擎提供的一些 API 我们去调它。比如启动、结束、挂起、查询流程)工作流客户段程序(用工作流的那些客户端。比如将 jpbm 集成到某个系统,那个系统对工作流引擎来说就是客户端程序)流程监控(对流程流转进行监控)表单设计器(表单的设计)与表单的集成与应用程序的集成参考模型WFMC核心调度算法1 、FMS2 、 PetriNet(令牌,JBPM 就是通过令牌来调度的,意思就是你的请假单从张三提交到李四的时候,它就是通过令牌知道的,令牌就从张三指向李四。 。 。我觉得应该是令牌先指向李四的,或者说是同时

9、进行的)接下来讲解 JBPM 架构,我这个图是在网上找的只不过添加了一些中文注释,因为考虑到大部分人英语还是没有过六级的,但是过了六级也不一定知道的,4流程定义的基本概念5从请假流程图里面可以看出一个流程是多个点和线构成,看图上的箭头是实心的。点和线之间的关系是什么样的关系?一个点就是一个 node 对象,一个线就是一个 transition 对象。第一根线(连接开始和张三审批)第二跟线(连接张三审批和李四审批) ,他们的起点和终点不同,而且他们都有方向。线就是描述从一个节点到另一个节点。也就是 fromto!Node 这个节点就是普通节点 它没什么行为, 它的行为需要你自己来定义 (接下来按

10、顺序解释图片上的内容) (讲到 fork join 的时候要画一个带有同步杆的图)讲到任务节点的时候提问什么是任务?任务就是某件事情需要由某些人去做?就像我现在向你们提问,这就是一个任务接下来讲解流程执行的概念6JBPM 流程引擎核心调度过程(要把这部分讲清楚)调用 Processinstace()方法、 :Procesinstance RotToken : From :Node :Transitonto :Node1: signal( )2: 、3: signal( )4: leave()5: 、transition、signal()、traitioName、trnsitin、transii

11、tion、 6: take() 7: entr()8: 、token、9: excute()excute()、node-nter、node-lave、transition、首先客户端调用 processinstance 里面的 signal 方法,然后判断流程实例是否结束,然后调用这个token 的 signal 方法,这个 token 的 signal 方法肯定是跟一个节点相关的 那么它是怎样找到这个节点的,实际上这个 Node 里面有一个 leave 方法,这个是节点里面的一个方法。但是从一个节点出发可以有多个离开的线,那它是怎样选择离开的线的?实际上在流程实例里面还有一个 signal

12、方法,这个 signal方法是带参数的,里面有一个名称。所以在第 1 步调 signal 方法的时候你指定了名称,那么执行到第 4步的时候他就会通过这个名称来找到那根离开的线,如果一开始没有指定名称,那么它就随机的找到一根离开的线,意思就是随机的找到一根线离开,所以它在第 5 步有一个任务就是找到要离开的 transition。然后它离开到下一个节点也是通过名字找到 transition,调用 transition 里面的 take 方法,然后就找到下一个节点,调用里面的 enter 方法。然后到了这个节点内部他会把 token 指向的节点改为自身。这样token 的引用就从 from 节点到

13、了这个 to 节点。然后在这个节点里边还要执行一个 excute 方法,这是它内部的一个方法,这个方法就是这个节点行为的体现。因为不同的节点有不同的行为。接下来在 myeclipse 上看看 JBPM 到底是一个什么东西,不用你们敲代码 我来演示给你们看 设计器里面的内容(前面的这些我们已经了解过了,开始,结束什么的 )这里面就只有 process State 和 super Stage 在前面没有讲解过 process state 用来连接一个子流程,因为 jbpm 支持把两个节点连接起来,就是到一个节点以后启动一个新流程然后这个流程执行完了以后又回到这个节点Super state 讲的是这

14、样一个过程 假如你现在有个非常复杂的流程,有几十个步骤,那么你就可以用 superstate 将其中一些步骤组织起来,形成一个阶段一个阶段的接下来看 source 里面的内容xmlns=“urn:jbpm.org:jpdl-3.2”这个文件在我们流程设计的时候会有一些自动的流程代码提示,去掉也没关系 name 流程定义的名字 比如请假单 报销单等Action 相当于你要定义一个类去处理某种事情,那么把 Action 写到 transition 内部,那么它处理的就是 transition 事件,这个事件在调用 take 方法的时候发生,在 take 里面只能抛出 transition 事件类型

15、7如果把一个 Action 直接放到一个 state 内部,就是放到节点内部。实际上它是不清楚的,不清楚究竟在什么时候调用它,如果 你要定义在这个节点内部你要在它的外部加上一个 eventtype=node-enter 就是指在 node-enter 的时候调接下来就来看 Action 里面的内容name 名称这个东西不重要 重要的是后面的 class,它就是一个类, jbpm 在从第一个节点转向到第二个节点,就是这里的起点转向到 first 节点这个过程里边会触发类里面的某个方法被调用,就是这个意思,这个类在 MessageActionHandler.java 里面。 (然后将页面转向到此处

16、)在 JBPM 里边 action 都要实现 actionhandler 接口 (handle:处理器处理机的意思)ActionHandle 里面对应的这个方法叫做 excute 方法 (excute:处决)这个 excute 方法是 jbpm 主动调用的,当事件发生的时候这个方法就自动被调用 然后这个里边有个 ExecutionContext,这个就是执行上下文,实际上就是执行环境,可以把它理解为一个大杂脍,如果我想在这里边对数据库进行操作的话,你可以从这里边拿到 hibernatesession,也可以拿到流程实例,流程容器等Action 就讲到这里,然后这里边又嵌套了一个 message这个 message 的作用就是将里面的内容自动注入

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号