现在的位置: 首页 > 综合 > 正文

JBMP 学习

2013年09月16日 ⁄ 综合 ⁄ 共 3425字 ⁄ 字号 评论关闭

1. JbpmConfiguration:获取jbpm的相关的配置信息

   a)JbpmConfiguration.getInstance(),载入默认设置
   b)载入指定的配置: 

Java代码 复制代码
  1. JbpmConfiguration.getInstance   (“com/blogs/jbpm.cfg.xml”);  

     
  

2.Jbpmcontext:用来保持Hibernate,进行流程的持久化操作,主要和事务打交道

a. Jbpmcontext.getCurrentJbpmContent () 是不被推荐的方法
b. Jbpmcontext.createJbpmContext () 是轻量级的

3. org.jbpm.db.GraphSession:表示流程图所对应的数据库运作

Java代码 复制代码
  1. GraphSession gs=JbpmConfiguration.getInstance().createJbpmContext().getGraphSession()  

   主要的,这个类包含了部署流程和删除流程的方法、以及获得流程定义的方法
deleteProcessInstance()、deleteProcessDefinition()、findLatestProcessDefinitions()这里的latest代表最新版本号的流程定义,相同的流程定义以版本号来区分

4. org.jbpm.graph.def.ProcessDefinition流程定义
         

Java代码 复制代码
  1. ProcessDefinition pdf=gs.findLatestProcessDefinition(“pdfName”);  

5. org.jbpm.graph.exe.ProcessInstance流程实例

ProcessInstance pi=pdf.createProcessInstance();
想象一下一个订票的流程,每个客户的订票动作都会更具订票流程定义而创建一个流程实例当一个ProcessInstance被创建后,负责执行主要路径的token也被创建,zhege token就是根token(root token),根token此时位于流程定义的开始状态start state

6. org.jbpm.graph.exe.Token令牌:

一个流程实例被创建的时候一个令牌被创建。该令牌叫做这个实例的根令牌(root token),并处于这个实例的开始状态

Token.single()方法调用node leave

7. 信号(single):

命令令牌继续执行,接收到一个未命名信号时,一个令牌将通过默认的”离开流向”离开当前节点

8. org.jbpm.graph.def.Node结点

两个责任:
a.执行java代码,如创建一个任务实例,发送一个通知,更新数据库
b.结点负责传播流程,即使流程继续执行
 不传播流程,这种情况表现为一个等待状态
 执行其中一个流向,流开当前结点,executionContext.leaveNode(String)
 创建新的执行轨迹,结点可以创建新的令牌,例如分支结点
 执行轨迹的结束结点
 通常,结点可以改变流程的整个运行时结构

9.结点类型

A. 任务结点(task-node):代表由人介入的一个或多个任务,因此当流程运行到一个任务节点时,会生成一个任务实例对象(taskInstance),并添加到参与人的任务列表中,之后结点会处于等待状态,知道参与人完成任务,并激活流程继续往下执行
B. 状态结点(state):一个典型的等待状态,不向任务列表添加任务实例
C. 判定结点(decision):用来决定业务流程的走向,有两个不同的裁决模式,两者区别在谁来做
a) 流程内部变量来做判定时,使用结点(decision)
b) 由外部程序给出,建议使用多个transition或具有等待状态的结点。可以通过外部的触发器结束一个等待状态并提供一个transition的判定
D.  分支结点(fork):将单个执行流程分裂成多个并发的执行流程,默认行为是为每个子流程生成一个子流程,并建立子令牌,和主流根令牌之间的父子关系
E.  合并结点(join):将分支收拢
F.  普通结点(node):用于提供用户制定自己的行为

10 org.jbpm.context.exe.ContextInstance(Jbpm上下文)

上下文Context其实就是处理流程变量的地方,流程变量使用键值来维护流程实例相关信息,上下文必须存储到数据库中。
通过上下文实例(ContextInstance)来和流程变量打交到,通过流程实例来获得上下文实例
ContextInstance cti=(ContextInstance)processInstance.getContextInstance();

常见操作包括,设置变量获得变量,删除变量

11.图元素org.jbpm.graph.def.GraphElement

是JBPM的定义,有一个名字name,一个描述,有多个事件event,使用Map来存储,有多个例外处理器execptionhandler,使用list来存储,有一个流程定义processDefinition

12.ExecutionContext(执行环境):

这个”环境”关联了Transition、Node、Token、ProcessInstance、TaskInstance、Task等对象,通过这个“执行环境”就能取得这些对象了

13.swimlane(泳道)
Swimlane是一个描述任务接收者的特殊的对象,可以是一个用户,也可以是一个角色,可以是任何东西,只要能根据swimlane算出有哪些action

14.变量
A. 流程范围的变量:
a) 瞬时变量:通过setTransientVarible()方法来设置,不会持久到数据库
b) 普通变量:通过setVarible()和setVaribleLocal()方法保存,通过getVarible()访问,这种变量在整个流程实例中都可以访问,会保存到库中
B. 任务实例范围变量:可以执行访问实例变量,即任务实例变量相当于局部变量,仅在当前流程中可见,流程实例变量相当于全局变量,在整个流程中可见。当通过任务实例去查找一个刘恒时,如果在当前任务实例中没有找到,将到流程实例中去找

15.相关接口说明

A. ActionHandler 动作处理接口
a) 这时jpdl中最常用的一个回调接口,它仅仅暴露了流程执行上下文变量ExecutionContext,用户通过ExecutionContext来了解流程的执行状态,并通过改变ExecutionContext中的属性来影响流程的执行
B. DecitionHandler 判定处理接口
a) 判定接口只适用于判定节点decision中,从它的接口方法可以看出,方法要返回一个字符串类型的结果,这个结果必须和判定结点拥有的转向集合中的一条转向名称相匹配
C. 委派处理接口(AssignmentHandler)
委派处理接口被用户任务元素task和委派子元素中,它的职责很明确,就是将任务分配给指定的人员或者角色

16.其他

A. 对一个结点来说,从定义角度只关心两个事情
a) 是什么类型的结点
b) 结点的转入transition和转出transition
B. 两个重要机制:过度调度机制和执行机制
a) 过度机制是如何正确的从一个结点转到下一个结点。通过processInstance.singal()、taskInstance.end()
C. 我们需要从数据库查找数据时,都是使用XXXSession方法。例如,TaskMgmtInstance
和TaskMgmtSession,前者用来创建任务实例,就是创建taskInstance,后者就是从jbpm数据库中查询某个参与者拥有的任务实例。其他接口有类似的规则
D. Gpd.xml记录的是结点的位置关系

抱歉!评论已关闭.