Process">
--nodes-->
--connections-->
BPMNDiagram>
BPMNPlanebpmnElement="com.sample.hello">
BPMNShapebpmnElement="_1">
Boundsx="16"y="16"width="48"height="48"/>
BPMNShape>
BPMNShapebpmnElement="_2">
Boundsx="96"y="16"width="80"height="48"/>
BPMNShape>
BPMNShapebpmnElement="_3">
Boundsx="208"y="16"width="48"height="48"/>
BPMNShape>
BPMNEdgebpmnElement="_1-_2">
waypointx="40"y="40"/>
waypointx="136"y="40"/>
BPMNEdge>
BPMNEdgebpmnElement="_2-_3">
waypointx="136"y="40"/>
waypointx="232"y="40"/>
BPMNEdge>
BPMNPlane>
BPMNDiagram>
API方式:
为了屏蔽内部API,不推荐使用。
重要的流程已经定义在org.jbpm.workflow.core和org.jbpm.workflow.core.node包中。
你可以通过工厂来创建流程。
示例在源码包的junittests中。
packageorg.jbpm.process;
importorg.jbpm.JbpmTestCase;
importorg.jbpm.ruleflow.core.RuleFlowProcessFactory;
publicclassProcessFactoryTestextendsJbpmTestCase{
publicvoidtestProcessFactory(){
RuleFlowProcessFactoryfactory=RuleFlowProcessFactory.createProcess("org.drools.process");
factory
//header
.name("Myprocess").packageName("org.drools")
//nodes
.startNode
(1).name("Start").done()
.actionNode
(2).name("Action")
.action("java","System.out.println(\"Action\");").done()
.endNode(3).name("End").done()
//connections
.connection(1,2)
.connection(2,3);
factory.validate().getProcess();
}
}
更多代码:
5.使用流程
5.1.创建知识库
KnowledgeBuilderkbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("MyProcess.bpmn2"),
ResourceType.BPMN2);
KnowledgeBasekbase=kbuilder.newKnowledgeBase();
5.2.创建会话启动流程
流程启动需要显式调用startProcess方法。
StatefulKnowledgeSessionksession=kbase.newStatefulKnowledgeSession();
ksession.startProcess("com.sample.hello");
参数com.sample.hello代表流程ID。
startProcess(StringprocessId,Mapparameters)方法的Map参数可传入额外的参数,这些参数是键值对。
注意这些参数将被复制到流程实例,作为流程的顶级变量。
顶级变量是指变量的作用或是顶级的。
5.3.结点类型的细节解释
流程有如下属性:
ID:
惟一
NAME:
显示名称
VERSION:
版本
Package:
命名空间
Variables:
变量,用于传递数据
Swimlanes:
泳道(专用通道),指定执行人工任务的actor
ConnectionLayout连接布局
Manual :
人工
Shortestpath :
最短路径
Manhattan :
曼哈顿
BMPN支持结点类型如下:
开始事件与结束事件,一个流程必须有一个开始事件,一个或多个结束事件。
结束事件的Terminate如果为TRUE,那么将结束整个流程,否则若有多个结束事件只会结束对应结束事件的路径。
如T2-E2.
|-T1-E1(Terminate=false)
S-+
|-T2-E2(Terminate=false)
RuleTask代表需要执行一组规则集。
规则定义在多个分离的文件中,格式要求为Droolsruleformat。
规则可以成为标准规则流组的一部分通过在头部使用ruleflow-group属性。
ruleflow-group的执行可认为是一个队列。
新来的必须等前面的执行完才会执行。
DivergingGateway 分支结点,一进多出。
Gateway不好翻译,所以省略。
ANDparallel与,并行, 两个都要满足(同步)
XORorexclusive 异或,排斥,只选择其中一个
ORorinclusive或,包含,至少只要有一个满足即可(不同步)
ConvergingGateway合并结点,多进一出。
ANDparallel与,并行, 两个都要满足(同步)
XORorexclusive 异或,排斥,只选择其中一个
ReusableSub-Process 可复用子流程
Waitforcompletion等待完成
On-entryandon-exitactions:
绑定入口与出品action.
Parameterin/outmapping:
in表示输入参数out表示输入参数和返回,只有当Waitforcompletion为true时,out才可以使用。
ScriptTask代表一个可执行的脚本。
支持Java,MVEL方言。
脚本绑定到Action.
Action:
绑定的Action.
TimerEvent定时器事件
Timerdelay延迟时间ms
ErrorEvent异常事件
FaultName异常处理器名
FaultVariable异常变量
.MessageEvent消息事件,没有输入
EventType监听事件类型
VariableName事件数据
Scope
internal流程内部事件external外部事件
.UserTask用户任务(人工任务)
ActorId责任人,多个人用逗号“,”分隔
GroupId组,多个组用逗号“,”分隔
Skippable表示这个任务是否可忽略,即不执行就结束。
Swimlane泳道
On.entry/on-exitactions:
绑定入口、出口Action
Parametermapping传入参数
Resultmapping返回结果
Content:
任务数据
.Sub-Process子流程
.MultipleInstances多实例子流程,特殊的子流程,允许执行多次
ServiceTask(WorkItemnode)代表一个抽象的任务。
可通过它扩展任务。
Additionalparameters扩展参数定义
Data
变量,顶级、子级,继承树
约束:
包括代码约束和规则约束
Actions
Action可以访问全局,流程变量,知识库上下文预定义变量,访问运行时,启动流程,分发事件,插入数据。
Events
事件类型-事件监听(消息事件)-事件处理(action)
事件分发:
内部事件流程管理
外部事件action
Timers
定时器
更新流程
//createthesessionandstarttheprocess"com.sample.process"
KnowledgeBuilderkbuilder=...
StatefulKnowledgeSessionksession=...
ProcessInstanceprocessInstance=ksession.startProcess("com.sample.process");
//addanewversionoftheprocess"com.sample.process2"
kbuilder=KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(...,ResourceType.BPMN2);
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
//migrateprocessinstancetonewversion
Mapmapping=newHashMap();
//toplevelnode2ismappedtoanewnodewithid3
mapping.put("2",3L);
//node2,whichispartofcompositenode5,ismappedtoanewnodewithid4
mapping.put("5.2",4L);
WorkflowProcessInstanceUpgrader.upgradeProcessInstance(ksession,processInstance.getId(),"com.sample.process2",mapping);
第4章 BPMN2.0
目前jBPM5没有完全实现BPMN2.0规范。
因此本章略过。
第5章 API
本章是代码,前面已经贴过,不再多说。
讲解了知识库、会话、流程的关系及如何创建。
第6章 人工任务
人工任务规范
jBPM5使用UserTask结点表示人工任务(需要与actor交互的任务)。
UserTask任务结点支持定义任务类型、actors和任务关联的数据。
通过TaskService可管理UserTask。
为了使用人工任务,你必须定义UserTask结点。
一个UserTask表示一个需要actor执行的自动化任务。
人工任务其实可以简单认为是任何类型的外部服务。
外部服务需要被调用,可看成特殊类型的workitem实现。
人工任务惟一的特色是支持泳道来简化给用户分配任务。
UserTask结点属性:
*Id:
结点惟一标识
*Name:
结点名称
*TaskName:
任务名称
*Priority:
优先级(整数)
*Comment:
任务注释
*ActorId:
actor,多个使用逗号","分隔
*Skippable:
任务可跳过(不执行就结束)
*Content:
任务关联的数据
*Swimlane:
泳道,可以简化分配多个人工任务给同一个actor
*Waitforcompletion:
是否等待人工任务执行完成,若为False,则创建完人工任务后继续流程。
*On-entryandon-exitactions:
绑定入口、出品事件处理器-action
*Parametermapping:
参数
*Resultmapping:
结果
*Timers:
定时器
*ParentId:
父人工服务ID
6.泳道
说明:
这个译法对于大家来讲,不明白怎么回事?
但名词而已,纯靠前辈误导,慢慢误导就理解