jbpm -----Process 部分

jbpm -----Process 部分

前面我们看过,我们下面几种方式来创建process
1.可以通过eclipse或者Guvnor web 来编辑图形化的process
2.通过xml文件来创建process
3.通过Process API来定义process

那么接下来我们需要去调用相应的api来实现和代码的整合
分这么几步骤:
1.Creating a Knowledge Base:

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource("MyProcess.rf"),ResourceType.BPMN2 );
KnowledgeBase kbase = kbuilder.newKnowledgeBase

2.启动process
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.startProcess("com.sample.hello");
其中 com.sample.hello为process id
此外还可以添加额外的参数给process,调用
startProcess(String processId, Map parameters)

3.本身process有下面这些属性(properties)
Id: 唯一编号
Name: process name.
Version: process版本
Package:
Variables: 可存放数据的变量
Swimlanes:
Connection Layout: 有'Manual','Shortest path','Manhattan' 3种

4.process 节点(Node)类型
(1)Start Event : 开始节点,有id和name两个属性
(2)End Event: 结束节点,有id,name和Terminate 三个属性
其中Terminate,如果process is terminated(终结),那么所有活动的node被cancel,如果没有终结,那么活动的node还
仍然有效。
(3)Rule Task:规则任务,规则以Drools规则格式来编写放入独立的文件中,他有Id,Name和RuleFlowGroup 三个属性
其中RuleFlowGroup表示规则流程组的名称
(4)Diverging Gateway:分离网关,允许在process中创建分支,一个Diverging Gateway有一个接入和一个以上接出。他有下面三种类型的gateway nodes获得支持。
AND:多接出同时存在
XOR:
OR:
Diverging Gateway的属性有:
id:node唯一号
Name:名称
Type: The type of the split node, i.e., AND, XOR or OR (see above).
Constraints: The constraints linked to each of the outgoing connections (in case of an (X)OR split).
(5)Converging Gateway:合并网关,多个接入合并为一个接出。有两种类型提供
AND :所有接入满足后才继续
XOR:几个接入满足就继续

(6)Reusable Sub-Process:可重用的子过程,一个接入一个接出,可调用其他process 他有下面属性
ID: node 唯一标识
Name: 显示名称
ProcessId: 需要执行的process的id
Wait for completion:是否等待调用的subprocess完成才继续
Independent:如果设置为true,执行的subprocess可独立于调用它的process进行运行,而不受父过程影响。
On-entry and on-exit actions: Actions that are executed upon entry or exit of this node, respectively.
Parameter in/out mapping:
in mapping 变量,
out mapping变量,当子系统完成后,将out mapping变量拷贝到父过程作为变量

(7)Script Task: 脚本任务,通过脚本能控制执行那个action node

(8)Timer Event:定时器,一个接出一个接入
(9)Error Event: 标记错误事件,一个接入没有接出,当到达error event,他会抛出相应的异常,process会根据异常查询相应的handler,如果没有相应的handler,那么process就终止。
属性有:
Id:唯一标识
Name:名称
FaultName: 出错的name,process通过它来查找对应的handler
FaultVariable: 出错的变量,用来传递给相应的handler
(10)Message Event: 消息事件,他没有接入只有一个接出。他有个eventType表示期望的事件类型,当
该事件类型被侦查到,那么他就会执行。因为他没有接入,所有他是靠监听来触发事件的。他因此有个监听的范围scope,如果只在本过程实例有效,可以processInstance.signalEvent(String type, Object data);如果作为外部监听,那么可以ksession.signalEvent(String type, Object event)。
(11)User Task: 过程中的任务有些少不了人工干预,那么就用user Task。他具有下面这些属性
Priority:task优先级
Comment:备注
ActorId:负责参与该任务的人的id 可以多个用分号分开
GroupId:负责参与任务的组的id,可以用分号分开
Skippable:表示是否可以跳过该任务
Content:task 相关的数据
Swimlane:
On.entry and on-exit actions:
Parameter mapping:允许process的变量值复制到task。
Result mapping:允许task结果值复制到process中。

(12)Sub-Process:扮演node 容器的角色,他这个node可以包含其他node,
(13)Multiple Instances:一种特殊的Sub-Process,可以产生多个process实例
CollectionExpression:
VariableName:
(14)Service Task (or Work Item node): 如果task需要调用外部的服务就要用到Service Task,比如发送邮件,记录日志等
他除了有On-entry and on-exit actions:Parameter mapping:Result mapping: 等属性
还有Additional parameters: 除了传统Parameter mapping,本身service会很多因此需要额外的变量来定义,比如email,他需要定义变量rom, To, Subject and Body等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值