`
linliangyi2007
  • 浏览: 1009232 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

jBPM-jPDL学习笔记—框架设计简介(二)

阅读更多

 

...上接 jBPM-jPDL学习笔记—框架设计简介(一)

 

jPDL业务流程模型

 

理解现实生活中的业务流程

       下面我们通过一个简单的部门借款流程来了解现实中的业务流程概念,流程图如下:

jBPM-007

上图表达了一个抽象的流程定义(Process Definition)。之所以称之为抽象,是因为它没有表示确切的执行者。当上述的借款人被具体化为“张三”,部门主管就成为张三的部门经理“李四”,而财务则明确为“王五”的时候,这个流程定义就被具体化,成为了一个流程实例(Process Instance)。此外,过程中的相关人员我们称之为参与者(Actor);过程中需要参与者介入的环节称之为任务Task;每个任务在流程实例中的具体化称之为任务实例(Task Instance);从一个任务(结点)到另一个任务(结点)的转化过程叫做流转(Transition)而在流程中,由程序预先设定的行为如发送邮件,我们称之为活动(Action)。         通过上述样例,我们了解了业务流程中一些专有名词和概念。接下来,我们要从程序设计的角度来讲述jPDL中定义的流程对象模型。

         jPDL中,对流程的建模被划分为两大部分,一是针对“流程定义”的静态模型部分;二是针对具体“流程实例”的运行时动态模型。在这一章节,我们将详细的讲述jPDL的对象及对应的数据库设计。

 

静态的流程定义模型

编号PD-001
对象流程定义实体(Process Definition
描述流程定义实体是对一个流程抽象的对象化定义,如图-002一套系统中,用户可以定义保存多个流程定义实体,如:报销流程定义、请假流程定义、人事录用流程定义等。每个流程定义还可以有多个不同的版本,如:针对同样的报销流程可以有修订前和修订后的两个流程定义,同时存储于jPDL数库中。用户可以通过流程名称和版本号获取相应的流程定义。在默认请况下,系统启用最新的流程定义。
Java对象org.jbpm.graph.def.ProcessDefinition
数据库表JBPM_PROCESSDEFINITION该表存储流程定义的通用信息,如:流程名称、版本号
表关联说明

JBPM_PROCESSDEFINITION表中,每条记录有自己的数据库流水号

 

 

ID_JBPM_PROCESSDEFINITION的外键(Foreign Keys):

  • startstate_ JBPM_NODE(流程结点)表关联。此外键指向流程定义中的起始结点ID
 
编号PD-002
对象流程结点(Node
描述流程结点是对流程中的过程环节/行为的抽象对象化定义,如图-002中的每个方框即代表一个结点。结点有两个主要职责:一,实现某个指定行为,这在jBPM中就是执行一段制定的Java代码;二,转递、维持流程的延续,直至达到最终结点。jPDL的结点设计中,系统开放了充分的用户行为模型,程序员可以基于这些行为接口,实现自定义的业务功能。jPDL中,系统预定义了一系列的Node类型,同时也允许程序员开发定义自己的Node类型。
Java对象org.jbpm.graph.def.Node
数据库表JBPM_NODE该表存储结点的定义信息。
表关联说明

JBPM_NODE表中,每条记录有自己的数据库流水号

 

ID_JBPM_NODE的外键(Foreign Keys):

  • processdefinition_ - 此外键说明该Node从属的流程定义对象ID
  • subprocessdefinition_- 此外键指定了一个由该Node发起的子流程。在主流程离开当前结点之前,该子流程必须完成执行过程。action_ - 此外键指定该结点动作类的ID
  • superstate_ - 该外键是一个自关联键,指向结点的上级父结点ID。一个子流程中的多个结点从属于同一个父流程结点。
  • decisiondelegation_ – 该外键指定了结点委派的判定类ID(所谓委派判定类是指根据用户的业务逻辑,判定流程的下一个流向的Java Class

 

Node类型祥解:

 

 任务结点(task-node任务结点是代表由人介入的一个或多个任务。因此当流程运行到一个任务结点时,会生成“任务实例对象(task instances)”,并添加到参与人的任务列表中,之后结点会处于等待状态,直到参与人完成他们的任务,并激活流程继续向下执行。

 

状态结点(state

状态结点是一个典型的等待状态。同任务结点不同的是,状态结点不会向任务列表添加任务实例。当业务进程需要等待外部系统的干预时,这种结点是很有用的。假设如下情况:在进入该结点时,通过node-enter事件向外部系统发送一个消息,然后结点进入等待状态;当外部系统完成处理,并回送一个消息,这将导致触发一个token.signal()方法的运行,该方法重新激活正在等待的流程继续下行。

 

 判定结点(decision判定节点的作用就同它的命名一样,用来决定业务流程的走向。有两个不同裁决模式,两者的区别在“谁”来做决定:是由流程内部的变量,还是由外部实体来提供决定的依据。当需要对流程执行方向做判定时,就要使用“判定结点(decision)”。有两种方法来指定判定条件。最简单的是在转向(transitions)中添加条件元素,条件可以是能返回boolean值的EL表达式或者beanshell脚本。在运行过程中,判定结点将首先轮训有条件设定的转向(leaving transitions),轮训的顺序是按照XML文件中指定的。当找到第一个条件返回为true的转向时,该出口将被选中。如果所有的表换中的条件判定都是false,则选择XML文件中排在第一位的转向作为出口。还有一种途径是在判定结点上定义一个返回转向名称的表达式,通过表达式计算返回的名称,决定选择哪个transition.另一方式是在结点上设定“处理(handle)”元素。在结点上指定一个实现了DecisionHandler接口的Java处理类,该类通过返回选定的transition的名称来决定流程的出口方向。

当判定结点的出口是由外部程序来给出的时候,建议使用多个transition或者具有等待状态的结点。可以通过外部的触发器结束一个等待状态并提供一个transition的判定。

 

 分支结点(fork

         分支结点的作用是将单个执行流程分裂成多个并发的执行流程。默认的行为是为每个子流程生成一个子令牌,并建立子令牌和主流程根令牌之间的父子关系。

 

 合并结点(join

         相对于fork结点的分支,join结点将分支收拢。默认的行为模式是当所有的分支(由同一个fork衍生出来的分支)都到达该结点的时候,join结点将结束这些分支上的子token,并通过token上的父子关系找到上一级流程的token,将此token通过唯一的transition传播下去。如果只有分支中的部分token到达时,join结点将处于等待状态。

 

 普通结点(node普通类结点主要用于提供用户定制自己的程序代码。普通结点拥有一个action子元素,当流程到达该结点时,这个action就会被执行。可以通过实现ActionHandler接口来执行你想要的任何代码。此外普通结点也一样要负责流程的延续。

 

         在流程图上,普通结点用来表达一个用户关心的、与业务相关的处理逻辑;相比而言Action(下文中将会提到)则允许添加业务逻辑以外的程序处理,这些程序处理在流程图上是不可见的,也是业务流程分析所不用关心的。

 

 
编号PD-003
对象流程转向(Transitions
描述流程转向是描述流程中从一个结点到另一个结点的状态转换过程,因此一个转向一定有一个源结点和一个目标结点。 jPDLtransition的命名是通产是唯一的,结点依靠transition的命名来区别到下一结点的路径,当一个Node中存在有多个同名的transition的时候,第一个transition将会被选中。结点转向的过程中,排在transition列表第一位置的即是默认的transition
Java对象org.jbpm.graph.def.Transition
数据库表JBPM_TRANSITION该表存储流程定义中的转向对象。
表关联说明

JBPM_TRANSITION表中,每条记录有自己的数据库流水号

 

ID_JBPM_TRANSITION的外键(Foreign Keys):

  • processdefinition_ - 该外键指向transition所属的流程定义对象ID
  • from_ - 该外键指向transition的源结点ID
  • to_ -该外键指向transition的目标结点ID
 
编号PD-004
对象动作(Actions
描述Actions是指一系列的在流程事件中运行的Java代码。流程图是软件需求的传达的重要手段,但它只是软件需求的一个投影,隐藏了很多技术实现的细节。Actions则是向流程图添加技术实现细节的一种机制,它可以很好的补充和修饰流程图。这意味着在不改变流程图结构的情况下,可以将Java的代码与之关联。Actions通过事件(Events)同流程绑定,常用的主要事件包括:进入结点、离开结点、进行转向。请注意,同Events关联的Actions和处于Node中的Actions是有不同的。处于Events中的Actions是通过事件触发执行的,它是典型的观察者模式,是无法影响流程控制的流向。而处于Node中的Action则要承担起流程传递的责任。此外,Actions是可以命名的。可以通过Actions的命名在任何地方引用该Actions。命名的Actions可以作为主流程定义的公用子元素。这个功能可以提高对Actions定义的复用。
Java对象org.jbpm.graph.def.Action
数据库表JBPM_ACTION该表存储流程定义中的动作对象。
表关联说明

JBPM_ACTION表中,每条记录有自己的数据库流水号ID_

 

JBPM_ACTION的外键(Foreign Keys):

  • processdefinition_ - 指明action所属的流程定义ID
  • event_ - 指明action绑定的event ID
  • actiondelegation_ - 指明action的委派对象ID
  • exceptionhandler_ - 指定action的异常处理ID
  • referencedaction_ - 指向当前action引用的actionID
  • timeraction_ - 指向当前action引用的计时器action
 
编号PD-005
对象事件(Events
描述事件表示流程执行中的某个特定的时刻。在流程执行的过程中,通过jBPM的引擎触发事件,这通常发生在jbpm计算后续状态的时候。事件总是和流程中的元素绑定,这些元素包括:流程定义(process definition)、流程结点(node)、流程转向(transition)和任务(task)。不同的元素会触发不同的事件,拿node元素来说,有 node-enter事件和node-leave事件。事件是action的钩子,一个事件可以回调一系列的action。当jBPM引擎触发事件的时候,事件中绑定的action就会被执行。jBPM中,事件模型是可传播的。一个子元素触发的事件,将逐层向上传播到顶层的流程定义元素。这样的设计使得事件可以被集中化处理。
Java对象org.jbpm.graph.def. Event
数据库表JBPM_EVENT该表存储流程定义中的事件对象,这些事件与相关的action绑定。
表关联说明

JBPM_EVENT表中,每条记录有自己的数据库流水号ID_

 

  • JBPM_EVENT的外键(Foreign Keys):
  • processdefinition_  - 指向event所属的流程定义ID
  • node_  - 指向event所属的node ID
  • transition_  - 指向event所属的transition ID
  • task_  -  指向event所属的任务ID

 

 

 

(----续 jBPM-jPDL学习笔记—框架设计简介(三))

 

 

 

 

 

 

 

 

48
1
分享到:
评论
11 楼 zhglhy 2011-06-28  
  感谢LZ分享,自己一直在学习这方面的知识,对我帮助很大!同时期待LZ有时间多出一些工作流实例方面的帖子。
10 楼 linliangyi2007 2009-04-03  
f32647908 写道

当上述的借款人被具体化为“张三”,部门主管就成为张三的部门经理“李四”,而财务则明确为“王五”的时候,这个流程定义就被具体化,成为了一个流程实例(Process Instance)。
这句话是错误的!! 流程实例的意思我相信楼主懂。也相信楼主晓得 任务参与者动态指定的概念!希望修改下,不然这些都感谢的人都要受你误导!


我反复看了,感觉没有错啊!能否请指出你觉得错在啥地方呢?或者说表述产生哪种歧义?俺马上改!

谢谢关注啊
9 楼 f32647908 2009-04-03  
当上述的借款人被具体化为“张三”,部门主管就成为张三的部门经理“李四”,而财务则明确为“王五”的时候,这个流程定义就被具体化,成为了一个流程实例(Process Instance)。
这句话是错误的!! 流程实例的意思我相信楼主懂。也相信楼主晓得 任务参与者动态指定的概念!希望修改下,不然这些都感谢的人都要受你误导!
8 楼 asukamk2 2008-08-01  
正苦恼不知道相关概念,歇息楼主了~
7 楼 zjs712 2008-07-30  
不知道怎么持久化,任务实例,怎么持久化呢,是要自己手动save(),还是会自动持久化呢?
看别人的例子,获得JbpmContext时,有个JbpmContext.setSession(session)的方法,这是做什么呢?
6 楼 My_Choice 2008-06-06  
顶!文章不错
5 楼 laolian1226 2008-05-29  
对我太有用了,谢谢楼主
4 楼 g_bon_jovi 2008-05-13  
请问 jbpm针对 fork和join节点如何回退,直接用程序生成一根从join指向fork的transition吗?
请指教!!谢谢
3 楼 ychw668 2008-04-21  
2 楼 piggy 2008-04-16  
这东西对我太有用了,我刚接触.
1 楼 fantasycs 2008-04-14  
楼主太好了!
主题:jBPM-JPDL v3.2环境部署——发布到Tomcat + MySQL

我是从你JavaEye帖子过来的,写的很好很强大! 谢谢

 

相关推荐

    网易招聘的scrapy spider

    网易招聘的scrapy spider

    ACM计算两整数相加的多语言代码示例与注解

    内容概要:提供了基于不同编程语言的一个简单的 ACN(以计算两个整数的和为例)源代码,涉及三种语言:C++, Java 和 Python。每个示例都包含了详细的步骤来演示用户输入是如何接收和进行运算以及结果显示出来的。 适用人群:编程初学者、有一定编程经验希望熟悉多种语言实现方式的技术爱好者。 使用场景及目标:帮助理解不同编程语言基本操作方法,包括输入获取、数据处理、输出结果展示及其语法差异等知识点的运用。 其他补充:由于例子较为简易,便于作为教学案例或是新手练习之用,亦可用于快速对比几种主流编程语言的基础应用形式和技术特点。

    java-ssm+vue健身房管理系统实现源码(项目源码-说明文档)

    会员管理页面提供给管理员的功能有:对会员信息的一个管理,不同会员看到的页面是不一样的,会员信息也是不同 健身房信息管理页面提供给管理员的功能有:查看已发布的健身房区域数据,修改健身房区域信息或更换健身房区域内容,健身房区域信息作废,即可删除。 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:ssm 前端技术:Vue 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog

    51Proteus仿真LCD1602+定时计数器实现可调电子时钟的编程

    51Proteus仿真LCD1602+定时计数器实现可调电子时钟的编程

    【高创新】基于侏儒猫鼬优化算法DMO-Transformer-BiLSTM实现故障识别Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    Linux安装python3_脚本_linux_install_py3.zip

    Linux安装python3_脚本_linux_install_py3

    BWO-Catboost白鲸算法优化Catboost分类预测,优化前后对比(Matlab完整源码和数据)

    1.Matlab实现BWO-Catboost白鲸算法优化Catboost分类预测,优化前后对比,Matlab调用Python的Catboost库(完整源码和数据)。 2.输出对比图、混淆矩阵图、预测准确率,运行环境Matlab2023及以上,配置Python的Catboost库。兼容测试链接:https://ww2.mathworks.cn/support/requirements/python-compatibility.html 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 5.作者介绍:机器学习之心,博客专家认证,机器学习领域创作者,2023博客之星TOP50,主做机器学习和深度学习时序、回归、分类、聚类和降维等程序设计和案例分析,文章底部有博主联系方式。从事Matlab、Python算法仿真工作8年,更多仿真源码、数据集定制私信

    4-3_Business_GREEN_2017_02-CL-20180524MTAX.potx

    微软演示材料

    【高创新】基于龙格库塔优化算法RUN-Transformer-BiLSTM实现故障识别Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    【高创新】基于人工蜂鸟优化算法AHA-Transformer-BiLSTM实现故障识别Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    java基于ssm+vue小说阅读平台系统源码

    1、开发环境:ssm框架;内含Mysql数据库;VUE技术 2、需要项目部署的可以私信 3、项目代码都经过严格调试,代码没有任何bug! 4、该资源包括项目的全部源码,下载可以直接使用! 5、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 6、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。

    人工智能产品经理最佳实践__第三部分系统架构篇_aipm-1.zip

    人工智能产品经理最佳实践__第三部分系统架构篇_aipm-1

    【高创新】基于能量谷优化算法EVO-Transformer-BiLSTM实现故障识别Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    Mentor Graphics EDA介绍(九)--Zuken Interconnect Solutions.docx

    Mentor Graphics EDA介绍(九)--Zuken Interconnect Solutions

    VB+ACCESS班级管理系统(源代码+可执行程序+论文+开题报告+外文翻译+答辩ppt).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    4-3_Business_GREEN_2017_03.potx

    微软演示材料

    VB+sql学生管理系统(源代码+系统).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    java-ssm+vue大学生心理健康系统实现源码(项目源码-说明文档)

    在技术实现部分采用了Java作为开发后台的编程语言,客户端使用html技术,数据库选择MySQL。最后进行了代码的编写,并说明了实现流程。最终,通过软件测试来验证大学生心理健康平台的功能要求。 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:ssm 前端技术:Vue 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog

    一键安装+开防火墙+改连接数+自启动守护_矿池代理,支持TCP和SSL协议,支持自

    一键安装+开防火墙+改连接数+自启动守护_矿池代理,支持TCP和SSL协议,支持自定义抽水,高性能高_MinerProxy303

Global site tag (gtag.js) - Google Analytics