JBPM(Java Business Process Management),业务流程管理,是Jboss(现已被Redhat收购)旗下的开源工作流引擎,是覆盖了业务流程管理,工作流,服务协议等领域的一个开源的,灵活的,易扩展的可执行流程语言框架。主要解决一些复杂,易变化等工作流程问题。

 

          一,首先看一下工作流(workflow:


          1,介绍:工作流就是工作需要遵循一定流程,需要经过层层节点,级别才能完成的。它有三个要素:a,这个过程要做什么,这是事情的主题;b,要经过多少个步骤,这是这类事情的特点;c,每个步骤都由谁来做,做什么,怎么做,这是事情节点的内容。例如一些物资的审批问题,请假的审批问题,需要经过多道关卡才能完成事,JBPM会使其变的非常简单。当然了解决工作流的问题,不仅仅有JBPM,还有OSWorkFlow,国内的普元工作流等。

 

          2,详解:看一下工作流的理论知识吧,当然这个不仅仅JBPM是这样,所有的工作流工具都是用的这些知识,所以还是非常核心的。


           a,流程定义(ProcessDefinition,基于有向图对业务进行描述,图是由节点(活动)和转移(Transition构成的,节点是有类型的,节点的类型决定了到达该节点做的事情,不同的节点做的事情不一样,转移描述了一个流向或路径,转移表示了from to ..的关系。这里相当于我们创建了一个类。

 

           b,流程实例(ProcessInstance,流程实例就是流程定义的具体化,一个流程定义会有多个流程实例,相当于对上边的类进行了实例化。

 

           c流程变量(Process variable,流程变量保存了上下文信息,流程变量采用Map结构存储,采用键值对的方式,流程变量是流程实例的一部分,流程变量的生命周期是随着流程实例的消亡而消亡的,流程变量的值在此流程中的任何节点都可以读取和修改(和ThreadLocal类似)。


           d,任务节点(Task,当流程到达该节点将会创建任务实例(TaskInstance)分别分配给参与者,(只要有人参与活动,一般就使用任务节点,因为要分配给人处理)。

 

           e起始节点(Start,流程定义中必须有一个起始节点,而且只能有一个。

 

           f,结束节点(End,流程定义中可以没有结束节点,也可以有多个结束节点。

 

           g,决策节点(Decision,决策节点是由流程自动决策的,不需要人为干预,该节点相当于ifelse .决策节点可以嵌入java代码或使用脚本语言进行判断。

 

           h,分支节点(Fork,将一个路径可以分解为多个并发的子路径(并发任务,会签),只有所有的子路径到达联合节点(Join,主路径才会继续执行事件(Event,当流程离开、到达某个节点或执行转移的时候,都会触发事件的。

 

          其实细细想想,这些东西和UML中的活动图的画法是非常类似ActivityDiagram的,就连那些画图的图表都是类似的。  

 

         二,JBPM4.4知识介绍:


          1,数据库设计:JBPM4.4的持久层是采用的Hibernate,大大提高了程序了移植性,和数据库进行了解耦。它通过18张表进行数据处理,我们可以通过PowerDesigner进行反向工程,导出数据物理设计图,进行查看这些表之间的结构。这里仅仅看一下表的作用吧:

 

表名称

说明

jbpm4_deployment

保存部署id

jbpm4_deployprop

部署文件相关属性

jbpm4_execution

存放当前执行信息

jbpm4_hist_actinst

存放历史活动(TaskStateForkJoin等等)信息

jbpm4_hist_detail

保存流程变量的变更

jbpm4_hist_procinst

保存历史流程实例

jbpm4_hist_task

历史任务

jbpm4_hist_var

历史变量

jbpm4_id_group

jbpm4_id_membership

用户和组的关系

jbpm4_id_user

用户

jbpm4_job

存放timer

jbpm4_lob

存放流程定义的JPDL内容和流程定义图片

jbpm4_participation

和用户相关

jbpm4_property

Id维护表

jbpm4_swimlane

存放泳道

jbpm4_task

存放当前任务

jbpm4_variable

存放当前流程变量

 

          其中想提一下,这里的每一张表采用了没有业务含义的字段作为主键,这是大力提倡的;          数据库的命名规范都是通过下划线来区分各个单词,避免了不必要的冲突;           看这里的表有存放当前信息,存放历史信息的,体现了表的分层设计,大大提高了处理数据的效率;          最后就是主键的生成策略,这里是通过第三方表jbpm4_property来进行维护主键,这也是大大提高了其移植性等。这些表设计都是非常值得我们学习的。

 

            2,核心类ProcessEngine,这是使用JBPM的外观接口,通过ProcessEngine来获取各种类,例如最重要的6Service。其实就像Hibernate中的核心工厂SessionFactory,Ibatis的核心类sqlMapClient一样。通过此核心类来进行JBPM的各种处理。

 

          3,核心的6Service,当然了这6Service都是通过核心类ProcessEngine创建的,主要作用如下表:

接口名称

作用

RepositoryService

主要和流程定义相关,如:部署流程、删除流程、查看流程

ExecutionService

和流程实例相关,启动流程

HistoryService

JBPM4的数据库设计发生了改变,区分了历史表和当前表,主要适合于大量流程下的使用,HistoryService主要是查询历史的

TaskService

和任务相关,取得个人任务,组任务,结束任务、一参与者的完整任务=个人任务(findPersonalTasks + 组任务(findGroupTasks

IdentityService

身份相关,创建用户、创建组、主要和我们组织机构整合时用的

ManagementService

管理定时任务的(job

 


        三,工作流的优缺点:


         1,优点:

          a,可以实现流程和业务逻辑的分离,分离后流程的变化不会影响到业务逻辑,业务逻辑的改变也不会影响到流程,能够更好的适应需求的变化。(体现了设计模式中的责任链模式)。


          b,转变了开发的思路,使我们把更多的精力放到流程开发上,因为它进行了很大的封装。


         2,缺点:

           采用工作流会带来很大的开发成本和学习成本。对于一些流程变化不频繁的项目,使用工作流也体现不出它的优势。

          

           综上为工作流的一些基础知识,JBPM的运用前必知知识,理解好工作流这方面的业务,理解好工作流实现的原理,在对以后的运用上起着非常大的作用。后边会带来工作流的运用篇。

 
posted on 2022-06-20 00:34  itprobie-菜鸟程序员  阅读(281)  评论(0编辑  收藏  举报