- 浏览: 124355 次
- 性别:
- 来自: 黑龙江
文章分类
最新评论
-
Mr_lee_2012:
总有人无私的奉献着,感谢。。。
BPM jPDL 用户开发手册 3.2.3 (全文pdf) -
sinodragon21:
学习!
工作流之大局势 -
yuzhenling:
楼主大好人啊 大好人
BPM jPDL 用户开发手册 3.2.3 (全文pdf) -
楚天阔:
楼主 我居然下不下来。。。谢谢您分享了这么多好资料
jBPM各版本及新手工具包下载地址 -
bingxinhan_aman:
xiaor186 写道题目是工作流之大趋势,可是我只看到了工作 ...
工作流之大局势
第10章流程建模
10.1. 概述
在令牌进入节点后,这个节点被执行。节点自己负责图执行连续(continuation of the graph execution)。图执行连续完成后使令牌离开这个节点。每个节点类型为图执行连续实现一个不同的行为。不传播执行的节点将成为状态节点。
10.2. 流程图
图 10-1 拍卖流程图
<process-definition>
<start-state>
<transition to="auction" /> </start-state>
<state name="auction"> <transition name="auction ends" to="salefork" /> <transition name="cancel" to="end" /> </state>
<fork name="salefork"> <transition name="shipping" to="send item" /> <transition name="billing" to="receive money" /> </fork>
<state name="send item"> <transition to="receive item" /> </state>
<state name="receive item"> <transition to="salejoin" /> </state>
<state name="receive money"> <transition to="send money" /> </state>
<state name="send money"> <transition to="salejoin" /> </state>
<join name="salejoin"> <transition to="end" /> </join>
<end-state name="end" /> </process-definition>
|
10.3. 节点
一个流程图由节点和转换组成。更多的关于图和它的执行模型的信息,参考第4章 面向图的程序设计。
10.3.1. Node职责
· 1、不传播执行。那样的话这个节点相当于等待状态。
· 2、通过节点的离开转换中的一个来传播执行。这就意味着最初到达节点的令牌(token)使用API调用executionContext.leaveNode(String)方法通过其中的一个离开转换。这个节点将扮演一个自动节点,从某种意义上说,它可以执行一些定制的程序逻辑并且而后不用等待自动地继续流程执行。
· 3、创建新的执行路径。一个节点决定创建新的令牌。每个新令牌代表一个新的执行路径并且每个新令牌可以通过节点的离开转换被启动。这种行为相当的例子就是一个分支(fork)节点。
· 4、结束执行路径。节点能够决定执行路径的终点。那意味着令牌被结束并且执行路径被完成。
· 5、通常,节点可以修改整个流程实例的运行时结构。运行时结构是包含令牌树的一个流程实例。节点能够被创建并结束令牌、在图的一个节点上设置令牌以及通过转换启动令牌。
jBPM包含(像任何工作流和BPM引擎一样)一系列预实现的有明确的文档化配置和行为的节点类型。但关于jBPM和面向图的程序设计基础的唯一的事情是我们为开发人员展现了这样的模型。开发人员可以非常容易地写他们自己的节点行为以及在流程中使用它。
传统工作流和BPM系统更加封闭。他们通常提供一套固定的节点集合(叫流程语言)。它们的流程语言是封闭的并且执行模型是隐藏在运行时环境中。工作流模型的研究已经显示出任何的流程语言都不是足够强大的。我们选定了一个简单的模型并允许开发写自己的节点类型。那就是JPDL流程语言最后开放的途径。
10.3.2. task-node节点类型
10.3.3. state节点类型
10.3.4. decision节点类型
At runtime the decision node will FIRST loop over its leaving transitions THAT HAVE a condition specified. It will evaluate those transitions first in the order as specified in the xml. The first transition for which the conditions resolves to 'true' will be taken. If all transitions with a condition resolve to false, the default transition (the first in the XML) is taken.
Another approach is to use an expression that returns the name of the transition to take. With the 'expression' attribute, you can specify an expression on the decision that has to resolve to one of the leaving transitions of the decision node.
当决策被外部方(意思是:不是流程定义的部分)处理时,你应该使用多个转换离开一个状态或等待状态节点。然后离开转换能够被等待状态完成后恢复执行的外部的触发器提供。例如:Token.signal(String transitionName)和TaskInstance.end(String transitionName)。
10.3.5. fork节点类型
10.3.6. join节点类型
10.3.7. node节点类型
10.4. 转换
转换能够可选的来命名。注意jBPM的大部分属性依赖转换的命名的唯一性。如果有多个转换有相同的名称,第一个命名的转换将被处理。万一多个重复转换名称占用一个节点,方法Map getLeavingTransitionsMap()返回的元素要比List getLeavingTransitions()少。
10.5. 动作
动作(actions)是在流程执行里的事件上执行的java代码片段。图是关于软件需求沟通上一个重要的工具。而且图正好也是将要被开发的软件的一个视图(项目)。它隐藏了许多的技术细节。动作是在图形化表示外面增加技术细节的一个机制。一旦图放在那里,它可以被动作修饰。这就意味着在不改变图的结构的情况下可以让java代码同图关联起来。主要事件类型是进入节点(entering a node)、离开节点(leaving a node)和处理转换(taking a transition)。
注意下动作放在事件和放在节点上的不同。动作放在事件上当事件被触发时执行。事件上的动作没有办法去影响流程的控制流。它同观察者模式(observer pattern)很相似。另一方面,放置在节点上的动作有责任来传播执行。
图 10-2 数据库更新动作
public class RemoveEmployeeUpdate implements ActionHandler { public void execute(ExecutionContext ctx) throws Exception { // 从流程变量上取得被操作的员工 String firedEmployee = (String) ctx.getContextInstance().getVariable("fired employee");
// 得到同jbpm更新使用的一样的同一个数据库连接,我们为我们的数据库更新
// 重用jbpm的事务
Connection connection = ctx.getProcessInstance().getJbpmSession().getSession().getConnection();
Statement statement = connection.createStatement(); statement.execute("DELETE FROM EMPLOYEE WHERE ..."); statement.execute(); statement.close(); } }
|
<process-definition name="yearly evaluation"> ... <state name="fire employee"> <transition to="collect badge"> <action class="com.nomercy.hr.RemoveEmployeeUpdate" /> </transition> </state>
<state name="collect badge"> ...
</process-definition>
|
10.5.1. 动作配置
10.5.2. 动作引用
10.5.3. 事件
10.5.4. 事件传播
10.5.5. 脚本
脚本(script)是一个动作执行的beanshell脚本。更多的关于beanshell的信息,请看beanshell网站。缺省情况下,所有流程变量可以当作脚本变量使用而且不会有脚本变量被写入流程变量中。下面的脚本变量是可用的:
- executionContext
- token
- node
- task
- taskInstance
<process-definition>
<event type="node-enter"> <script> System.out.println("this script is entering node "+node); </script> </event> ... </process-definition>
|
<process-definition>
<event type="process-end"> <script> <expression> a = b + c; </expression> <variable name='XXX' access='write' mapped-name='a' /> <variable name='YYY' access='read' mapped-name='b' /> <variable name='ZZZ' access='read' mapped-name='c' /> </script> </event> ... </process-definition>
|
10.5.6. 定制事件
注意也可能在流程执行期间触发你自自己的事件。事件通过图的组成元素(节点、转换流程定义和超级状态是图元素)以及事件类型(java.lang.String)唯一地定义。jBPM为节点、转换和其他的图元素定义一系列的触发事件。在动作中、自定义的节点实现中或甚至流程执行的外面,你可以调用GraphElement.fireEvent(String eventType, ExecutionContext executionContext);。事件类型的名称可以被自由的选择。
10.6. 超级状态
10.6.1. 超级状态转换
10.6.2. 超级状态事件
10.6.3. 分层命名
<process-definition>
... <state name="preparation"> <transition to="phase one/invite murphy"/> </state> <super-state name="phase one"> <state name="invite murphy"/> </super-state> ... </process-definition>
|
<process-definition>
... <super-state name="phase one"> <state name="preparation"> <transition to="../phase two/invite murphy"/> </state> </super-state> <super-state name="phase two"> <state name="invite murphy"/> </super-state> ... </process-definition>
|
10.7. 异常处理
注意在一个处理异常的动作里,它可能使用Token.setNode(Node node)方法来放置这个令牌在图的任意一个节点上。
10.8. 流程组成
<process-definition name="hire"> <start-state> <transition to="initial interview" /> </start-state> <process-state name="initial interview"> <sub-process name="interview" /> <variable name="a" access="read,write" mapped-name="aa" /> <variable name="b" access="read" mapped-name="bb" /> <transition to="..." /> </process-state> ... </process-definition>
|
这个hire流程包含一个产生interview流程的流程状态。当执行到达“first interview”时,一个 interview流程的新的执行(=process instance)被创建。如果没有明确版本被指定,当部署hire流程时已知子流程的最新版本将被使用。为了让jBPM实例化一个特定版本,可选的版本属性可以被指定。为了延迟绑定指定的或最新的版本直到真正创建子流程时,可选的绑定属性应该被设置为late。然后hire流程的变量“a”被复制进入interview流程的变量“aa”中。同样的方法,hire流程的变量“b”被复制进入interview流程的变量“bb”中。当interview流程完成时,只有interview流程的变量“aa”被复制回hire流程的变量“a”中。
10.9. 定制节点行为
图 10-3 更新ERP例子的流程片段
public class AmountUpdate implements ActionHandler { public void execute(ExecutionContext ctx) throws Exception { // 业务逻辑
Float erpAmount = ...从ERP系统中获取数量...;
Float processAmount = (Float) ctx.getContextInstance().getVariable("amount"); float result = erpAmount.floatValue() + processAmount.floatValue(); ...update erp-system with the result...; // 图执行传播
if (result > 5000) {
ctx.leaveNode(ctx, "big amounts"); } else {
ctx.leaveNode(ctx, "small amounts"); }
}
}
|
它也可能创建并合并令牌在定制的节点实现里。就如何做这个的例子,到jbpm源代码检出Fork和Join节点实现吧 :-)。
10.10. 图执行
图 10-4 图执行的相关方法
- Token.signal(Transition)
- --> Node.leave(ExecutionContext,Transition)
- --> Transition.take(ExecutionContext)
- --> Node.enter(ExecutionContext)
- --> Node.execute(ExecutionContext)
10.11. 事务划分
同样的解释在10.10 图执行部分和第4章 面向图的程序设计,jBPM在客户端线程中运行流程而且天生就是同步的。那意味着token.signal()或taskInstance.end()当流程已经进入新的等待状态时将只是返回。
我们这里描述的jPDL属性是来自第15章 异步连续的建模视图。
...
<start-state>
<transition to="one" /> </start-state>
<node async="true" name="one"> <action class="com...MyAutomaticAction" /> <transition to="two" /> </node>
<node async="true" name="two"> <action class="com...MyAutomaticAction" /> <transition to="three" /> </node>
<node async="true" name="three"> <action class="com...MyAutomaticAction" /> <transition to="end" /> </node>
<end-state name="end" /> ...
|
...start a transaction... JbpmContext jbpmContext = jbpmConfiguration.createContext(); try { ProcessInstance processInstance = jbpmContext.newProcessInstance("my async process"); processInstance.signal(); jbpmContext.save(processInstance); } finally { jbpmContext.close(); }
|
发表评论
-
BPM jPDL 用户开发手册 3.2.3 (全文pdf)
2008-10-16 12:58 9095最近太忙了,实在没有时间详细校稿,应大家要求,现在在将全文转为 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第24章
2008-09-27 08:35 2556第24章 可插拨架构 jBPM功能特性分裂成模块。每个模块都有 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第23章
2008-09-27 08:31 1526第23章 工作流的TDD文件 23.1.工作流TDD介绍 既然 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第22章
2008-09-27 08:30 1986第22章 安全 jBPM的安全属性还处于alpha阶段。本章归 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第21章
2008-09-27 08:27 1929第21章 jBPM流程定义语言(JPDL) JPDL指定一个X ... -
jBPM jPDL 用户开发手册 3.2.3 - 第20章
2008-09-23 09:04 1831第20章 业务流程仿真 jBPM包含一个仿真组件,这个是jB ... -
jBPM jPDL 用户开发手册 3.2.3 - 第19章
2008-09-23 09:00 1987第19章 日志 日志的目标是保持追踪流程执行的历史。在运行时 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第18章
2008-09-23 08:59 2079第18章 Web Services支持 本章描述了jBPM ... -
jBPM jPDL 用户开发手册 3.2.3 - 第17章
2008-09-23 08:57 3266第17章 邮件支持 本章描述了jBPM jPDL中随包发行的邮 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第16章
2008-09-23 08:22 1670第16章 商务日历 本章描述了jBPM的商务日历。商务日历知道 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第15章
2008-09-23 08:20 2089第15章 异步连续 15.1. ... -
工作流之大局势
2008-09-22 08:49 33901. 从奴隶社会到封建后期 工作流(WorkFlow)的概 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第12章
2008-09-12 15:06 2822第12章 任务分配 jBPM的 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第14章
2008-09-04 13:02 176214章 定时器 本章描述了jBPM如何和定时器工作一起工作。 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第13章
2008-09-03 20:49 1652第13章 文档管理 这仍然是一个试验性的属性。 为了使用这个 ... -
jBPM jPDL 用户开发手册 3.2.3 - 第11章
2008-09-03 20:45 2019第11章 上下文 上下文是关于流程变量的。流程变量是维护同流程 ... -
jBPM jPDL 用户开发手册 - 第9章
2008-08-24 06:24 2384第9章Java EE 应用服务器工具 本章将描述jBPM提供的 ... -
jBPM各版本及新手工具包下载地址
2008-08-22 17:40 4431由于一些刚开始学习jBPM的朋友看文档时,一般会提到 j ... -
jBPM jPDL 用户开发手册 - 第8章
2008-08-22 08:13 2795第8章 jBPM 数据库 8.1. 切 ... -
jBPM jPDL 用户开发手册 - 第7章
2008-08-20 17:24 2868第7章持久化 大多数的情况,jBPM用于维护流程的执行跨度很 ...
相关推荐
1.程序功能说明: MATLAB实现多种群遗传算法(完整代码) 逼近C=[9,8,7,6,5,4,3,2,1]的9维向量. 2.代码说明:注释清晰,参数和变量说明清晰,方便更改、方便初学者使用,模块化编程,方便替换目标函数。运行环境Windows7及以上操作系统,MATLAB2014a及以上版本。 3.适用专业:计算机、电子信息工程、数学、物理、机械工程、土木工程等专业的大学生、研究生毕业设计,各类专业的课程设计、海外留学生作业等。 4作者介绍:资深算法工程师, 从事Matlab、Python算法仿真工作15年,专业研究遗传算法、粒子群算法、蚁群算法、鲸鱼算法、狼群算法等. 有问题联系QQ: 1579325979
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
小学元旦晚会PPT 模版
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
MATLAB中的语义分割技术探究与应用实践,matlab,语义分割 ,matlab; 语义分割,Matlab语义分割技术解析
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
1、文件内容:pulseaudio-10.0-6.el7_9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/pulseaudio-10.0-6.el7_9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
"基于OpenCV与深度学习的人脸表情识别系统:利用Python与PyQt构建的可视化实时检测工具",基于OpenCV的人脸表情识别系统 相关技术:python,opencv,pyqt,深度学习 (请自行安装向日葵远程软件,以便提供远程帮助) 可编译为.exe文件。 软件说明:摄像头实时检测,加载照片,视频均可。 有基础的同学,可自行修改完善。 第一张和第二张为运行截图。 ,基于OpenCV的人脸表情识别系统; Python; OpenCV; PyQt; 深度学习; 实时检测; 照片和视频支持; 可编译为.exe文件; 运行截图。,"基于OpenCV与深度学习的人脸表情识别系统"
,步进方案,步进源码,两相步进矢量控制,超前角控制两种模式,成熟产品方案 支持特殊功能定制
三相储能PCS双向能量流动与Matlab仿真控制研究——基于SVPWM调制技术的建模与应用,三相储能PCS(Matlab仿真) 1.可实现Grid to Battery,Battery to Grid的能量双向流动。 2.本仿真基于Matlab仿真建立的模型, 3.采用SVPWM进行控制 ,三相储能PCS; 双向能量流动; Matlab仿真; SVPWM控制,三相储能PCS:能量双向流Matlab仿真模型(SVPWM控制)
deepseek部署教程.md
nodejs010-nodejs-ansicolors-0.3.2-1.el6.centos.alt.noarch.rpm
基于三菱PLC的四路抢答器控制系统原理及实践:含带解释的梯形图与IO分配图解,三菱 MCGS 基于PLC的四路抢答器控制系统 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,三菱MCGS; PLC四路抢答器; 控制系统; 梯形图接线图; 原理图图纸; IO分配; 组态画面。,三菱PLC四路抢答器控制系统原理图及组态画面解析
基于运动数据时空特征提取的人类运动片段.pdf
基于机器学习的选股模型及投资组合研究.pdf
ollama安装包。。。。。。。。。。。。。。。。。
nodejs010-nodejs-ansistyles-0.1.3-1.el6.centos.alt.x86_64.rpm
Screenshot_20250201_111207_com_tencent_mm_LauncherUI.jpg
基于时空Transformer的端到端的视频注视目标检测.pdf