先看一例子:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition
</process-definition>
编号 PD-001
对象 流程定义实体(Process Definition)
描述流程定义实体是对一个流程抽象的对象化定义,如图-002。一套系统中,用户可以定义保存多个流程定义实体,如:报销流程定义、请假流程定义、人事录用流程定义等。每个流程定义还可以有多个不同的版本,如:针对同样的报销流程可以有修订前和修订后的两个流程定义,同时存储于jPDL数库中。用户可以通过流程名称和版本号获取相应的流程定义。在默认请况下,系统启用最新的流程定义。
Java对象 org.jbpm.graph.def.ProcessDefinition
数据库表 JBPM_PROCESSDEFINITION该表存储流程定义的通用信息,如:流程名称、版本号
表关联说明 JBPM_PROCESSDEFINITION表中,每条记录有自己的数据库流水号
startstate_ 同JBPM_NODE(流程结点)表关联。此外键指向流程定义中的起始结点ID
流程结点(Node)
编号 PD-002
对象 流程结点(Node)
描述流程结点是对流程中的过程环节/行为的抽象对象化定义,如图-002中的每个方框即代表一个结点。结点有两个主要职责:一,实现某个指定行为,这在jBPM中就是执行一段制定的Java代码;二,转递、维持流程的延续,直至达到最终结点。在jPDL的结点设计中,系统开放了充分的用户行为模型,程序员可以基于这些行为接口,实现自定义的业务功能。在jPDL中,系统预定义了一系列的Node类型,同时也允许程序员开发定义自己的Node类型。
Java对象 org.jbpm.graph.def.Node
数据库表 JBPM_NODE该表存储结点的定义信息。
表关联说明 JBPM_NODE表中,每条记录有自己的数据库流水号
processdefinition_ - 此外键说明该Node从属的流程定义对象ID
subprocessdefinition_- 此外键指定了一个由该Node发起的子流程。在主流程离开当前结点之前,该子流程必须完成执行过程。action_ - 此外键指定该结点动作类的ID
superstate_ - 该外键是一个自关联键,指向结点的上级父结点ID。一个子流程中的多个结点从属于同一个父流程结点。
decisiondelegation_ – 该外键指定了结点委派的判定类ID(所谓委派判定类是指根据用户的业务逻辑,判定流程的下一个流向的Java Class)
流程转向(Transitions)
编号 PD-003
对象 流程转向(Transitions)
描述流程转向是描述流程中从一个结点到另一个结点的状态转换过程,因此一个转向一定有一个源结点和一个目标结点。在jPDL中transition的命名是通产是唯一的,结点依靠transition的命名来区别到下一结点的路径,当一个Node中存在有多个同名的transition的时候,第一个transition将会被选中。结点转向的过程中,排在transition列表第一位置的即是默认的transition。
Java对象 org.jbpm.graph.def.Transition
数据库表 JBPM_TRANSITION该表存储流程定义中的转向对象。
表关联说明 JBPM_TRANSITION表中,每条记录有自己的数据库流水号
processdefinition_ - 该外键指向transition所属的流程定义对象ID
from_ - 该外键指向transition的源结点ID
to_ -该外键指向transition的目标结点ID
动作(Actions)
编号 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_
processdefinition_ - 指明action所属的流程定义ID
event_ - 指明action绑定的event ID
actiondelegation_ - 指明action的委派对象ID
exceptionhandler_ - 指定action的异常处理ID
referencedaction_ - 指向当前action引用的action的ID
timeraction_ - 指向当前action引用的计时器action
事件(Events)
编号 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_
processdefinition_
node_
transition_
task_
任务(Task)
编号 PD-006
对象 任务(Task)
描述 任务作为流程定义中的一部分,定义了如何创建任务实例(Task instances)以及任务分配。任务可以在任务结点(Task-Node)和流程定义(process-definition)两个地方定义。通常会在一个任务结点中定义一个或多个的任务。在这种情况下,任务结点表示在流程中等待用户处理的交互操作。业务流程会停留在任务处,等待用户完成相应的操作之后继续。任务也可在流程定义中声明。通过任务名,可以找到相应的任务定义,并引用他们。实际上任何有命名的任务都可以通过名字被引用。在整个的流程定义中,任务名必须是唯一的。此外,还可以给任务设定优先级,这些优先级属性将成为任务实例化时的默认设置。任务实例可以在之后的运行中改变优先级。.
Java对象 org.jbpm.taskmgmt.def.Task
数据库表 JBPM_TASK该表存储流程定义中声明的任务对象。
表关联说明 JBPM_TASK表中,每条记录有自己的数据库流水号ID_
JBPM_TASK的外键(Foreign Keys):
processdefinition_
taskmgmtdefinition_ - 指向task引用的TaskMgmtDefintion对象ID
tasknode_ - 指向task所属的任务结点ID
startstate_ -指向task所属流程的起始结点ID
assignmentdelegation_ - 指定task委派处理的class对象的ID
swimlane_ - 指定task要授权的swimlane(角色)ID
taskcontroller_ - 指定一个task赋值的委托类
具体化的流程实例模型
流程实例中最重要的三个对象:流程实例(Process Instance)、令牌(Token)、任务实例(Task Instance).
流程实例(Process Instance)
编号 PI-001
对象 流程实例(Process Instance)
描述 流程实例是流程定义的运行时状态,它记录了一个流程运行的起始时间、结束时间等状态信息
Java对象 org.jbpm.graph.exe.ProcessInstance
数据库表 JBPM_PROCESSINSTANCE该表存储运行时的流程对象信息。
表关联说明 JBPM_PROCESSINSTANCE表中,每条记录有自己的数据库流水号
ID_JBPM_PROCESSINSTANCE的外键(Foreign Keys):
processdefinition_ - 该流程实例对应的流程定义的ID
roottoken_ - 该流程实例引用的跟令牌
superprocesstoken_ - 如果当前流程是某个流程实例的子流程,则指向该父流程的ID
令牌(Token)
编号 PI-002
对象 令牌(Token)
描述 令牌代表一个流程执行的路径,它维护着流程定义中各个结点的指针,同时记录了流程当前执行的位置。
Java对象 org.jbpm.graph.exe.Token
数据库表 JBPM_TOKEN该表存储运行时令牌对象信息,它表示当前流程执行到的位置。
表关联说明 JBPM_TOKEN表中,每条记录有自己的数据库流水号ID_ JBPM_TOKEN的外键(Foreign Keys):
processinstance_
subprocessinstance_ - 指向该令牌所属的子流程实例ID。
node_
parent_ - 如果当前令牌是一个分支流程或子流程的令牌,则该值指向其父令牌ID。
任务实例(Task Instance)
编号 PI-003
对象 任务实例(Task Instance)
描述一个任务实例对象可以分配给指定的操作者处理,当任务完成后,将触发流程继续下行。任务实例的生命周期很简单,生成实例-->开始处理-->任务结束。从弹性设计考虑出发,任务的分配不属于实例生命周期的一部分,任务是否被分配是不会影响其生命周期过程的。当流程进入一个任务结点的时候,结点上任务被实例化;用户通过访问系统的界面组件,获取自己的任务列表,可以进行任务委派、处理或直接结束任务。任务实例记录着任务创建的时间、结束时间,这些信息可以通过TaskInstance对象中的getter方法获取。一个任务实例的结束时间标识它的完成,在后绪的任务查询中,该实例不会被取出,但实例的记录仍保留于数据库中。
Java对象 org.jbpm.taskmgmt.exe.TaskInstance
数据库表 JBPM_ TASKINSTANCE该表存储运行时任务实例信息。
表关联说明 JBPM_TASKINSTANCE表中,每条记录有自己的数据库流水号ID_JBPM_TASKINSTANCE的外键(Foreign Keys):
task_ - 指向定义该实例的任务ID
token_ - 指向任务实例对应的令牌ID
swimlaneinstatnce_
taskmgmtinstance_