如果,你掌握了一个流程引擎的灵魂,你才有能力理解它的全部。否则,一个引擎对你来说,可能只是一个复杂的结构,丰富多彩API、令人眼花缭乱的“功能”和“服务”而已。------引自:“揭秘jbpm流程引擎内核设计思想及构架 ”胡长城
fork:
有一个分支到达流程就可以继续执行的效果了,如下:
- import org.jbpm.graph.def.ActionHandler;
- import org.jbpm.graph.exe.ExecutionContext;
- import org.jbpm.graph.node.Join;
-
- public class JoinAction implements ActionHandler {
-
- public void execute(ExecutionContext arg0) throws Exception {
- Join join=(Join)arg0.getNode();
- join.setDiscriminator(true);
- }
-
- }
decision:
一个decision用以决定在多个执行路径中哪个才可以被执行。如果你是一个程序员,把它可以理解成switch case结构即可,一个decision能够具有许多离开的transition。Handler所指定的DecisionHandler的实现类里的decide方法返回一个字符串,表示要执行哪个transition,如下例:
java 代码
- import org.jbpm.graph.exe.ExecutionContext;
- import org.jbpm.graph.node.DecisionHandler;
-
- public class ForkDecision implements DecisionHandler {
-
- public String decide(ExecutionContext arg0) throws Exception {
- String dayCount = (String) arg0.getVariable("dayCount");
- String go = "to boss approve";
- if (Integer.parseInt(dayCount) > 10) {
- go = "to join";
- }
- return go;
- }
-
- }
event:
JBPM定义了一系列与工作流节点元素相关联的事件,例如,流程实例运行过程中,可以触发节点进入(node-enter)、节点离开 (node-leave)、流程启动(process-start)、流程结束(process-end)、任务创建(task-create)、 任务分派(task-assign)、任务启动(task-start)等事件。
个人理解,event为action服务,在action外面包一层,使action更加灵活。
timer:
定时器timer可以被用于decision fork join node process-state state super-state task-node,可以设置开始时间duedate和频率repeat,定时器动作可以是所支持的任何动作元素,如action或script。
timer 还有一个很重要的属性cancel-event,这个是timer和task结合时使用的,任务定时器的cancel-event可以被定制。默认情况 下,当任务被结束时(=完成)任务上的定时器将被取消,这是通过在定时器上使用cancel-event属性,流程开发者可以定制诸如task- assign或task-start。cancel-event支持多个事件,通过在属性中指定一个用逗号分割的列表,可以组合cancel-event 的类型。
Task:
Task 是是流程定义里的一部分,它决定了task instance的创建和分配。
swimlane:
实际应用中,一个人是一个流程中多个Task的参与者(actor)的情况是很常见的。在jbpm中通过创建一个swimlane并且把swimlane赋给一个task的方式来设置当前task的参与者(actor)。一个业务流程中的swimlane可以被看做为一个参与者的参与者对象的名称,当然它不一定是固定的某个人,它可以是一个用户组,一个特定用户的角色等。首次执行到达一个Task,赋给该Task的一个swimlane就会算出参与者(actor)。
controller(控制器):
在任务执行时,可能需要读、写流程变量;在任务完成并提交时,可能需要写流程变量。为此,jBPM提供了"任务变量"的概念。在某些情况下,任务变量和流 程变量并非简单的一一对应关系,例如,三个流程变量代表三个月的销售额,任务变量只需要它们的平均值。为实现任务与流程实例之间的信息交流,jBPM设置 了任务控制器机制。该机制也采用递进模式:首先,jBPM提供基本(默认)的任务控制器;如果不敷使用,二次开发人员可以使用自定义的任务控制器。 jBPM的任务控制器机制在流程变量和任务变量之间架起了一座桥梁。
例子:
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <process-definition xmlns="" name="test">
-
- <start-state name="start">
- <transition name="" to="fork1"></transition>
- </start-state>
-
- <fork name="fork1">
- <transition name="tr1" to="top-state"></transition>
- <transition name="tr2" to="test-sub-process"></transition>
- </fork>
-
- <state name="top-state">
- <transition name="to test-task" to="test-task"></transition>
- </state>
-
- <task-node name="test-task" signal="first">
- <task name="task-a"></task>
- <task name="task-b"></task>
- <task name="task-c"></task>
- <transition name="to buttom-node" to="buttom-node"></transition>
- </task-node>
-
- <node name="buttom-node">
- <transition name="" to="join1"></transition>
- </node>
-
- <process-state name="test-sub-process">
- <event type="node-enter">
- <action name="enter-sub-process-action"
- class="gaojie.process.action.EnterSubProcessAction">
- </action>
- </event>
- <transition name="" to="join1"></transition>
- </process-state>
-
- <join name="join1">
- <transition name="" to="end"></transition>
- </join>
-
- <end-state name="end"></end-state>
- </process-definition>
分享到:
相关推荐
jBPM工作流详解,jBPM工作流详解 jBPM工作流详解,jBPM工作流详解 jBPM工作流详解,jBPM工作流详解
jbpm工作流引擎基于J2EE的轻量级,纯java,开源的工作流管理系统。
JBPM4.4 工作流 入门 例子 HelloWorld
斯坦福特jbpm入门资料,内容不错,由浅入深,系统讲解了jbpm,是不错的入门资料噢
jbpm入门,开发,jbpm入门,开发,jbpm入门,开发,jbpm入门,开发,jbpm入门,开发,jbpm入门,开发,
工作流程 JBPM工作流管理工作流程 JBPM工作流管理工作流程 JBPM工作流管理工作流程 JBPM工作流管理
jbpm工作流详解
jbpm工作流基础视频,讲解工作流流程定义的整个过程,适合于jbpm的初学者学习
jbpm开发指南 jbpm开发指南 jbpm 工作流 自定义
JBPM工作流全套学习资料!比较全面的介绍了jbpm,可以作为学习工作流的参考资料.
NULL 博文链接:https://depravedangel.iteye.com/blog/369987
jbpm工作流引擎介绍以及出差报销实例,详细的图解和流程
一个JBPM工作流例子,JBPM实现销售批复
JBPM5.1入门学习 jBPM5_用户手册-中文版 jbpm5环境配置-myeclipse
jbpm5环境配置-myeclipsev
jBPM 开发入门指南+JBPM3.1Help(中文).chm+jbpm开发指南.pdf,入门级宝典。
spring+jbpm的配置示例,jbpm配置,希望大家一起进行学习,共同提高
关于jbpm工作流的一些常用的问题jbpm工作流的一些常用的问题
jbpm相关资料,入门,ssh和jbpm集成
利用jbpm工作流实现的一个工作流开发例子。对初学者有很好的参考价值。