jBPM-4.0中文开发指南-第7章 高级图形执行 - 编程入门网
.activity("automatic 4").behaviour(new Display("four"))
.transition().to("wait 3")
.activity("wait 3").behaviour(new WaitState())
.done();
让我们和你一起顺着流程的执行一起走。 ClientExecution execution = processDefinition.startProcessInstance(); 启动一个新执行意味着初始活动被执行。 所以如果一个自动活动是初始活动,这意味着第一个未命名的向外转移会被立刻选择。 这些都发生在startProcessInstance调用的内部。 然而在这种情况下,初始活动是一个等待状态。 所以startProcessInstance方法会立刻返回, 执行会定位到初始活动''wait 1''.一个新执行会被定为到''wait 1''. 图 7.2. 一个新执行会被定为到''wait 1''. 然后一个外部触发器会执行signal方法。 execution.signal(); jBPM-4.0中文开发指南-第7章 高级图形执行(4)时间:2011-09-24像上面解释的介绍WaitState, signal会导致选择默认的转移。 转移会把执行移动到automatic 1活动,并执行它。 automatic 1中的Display活动的execute方法, 向控制台打印一行,它不会 调用execution.waitForSignal()。 因此,执行会通过选择automatic 1外部的默认转移进行执行。 在这种状态,signal方法一直阻塞着。另一个需要考虑的方式是执行方法, 像signal会使用客户端的线程 来拦截流程定义,直到到达一个等待状态。 然后执行到达wait 2, 执行WaitState活动。那个方法会调用 execution.waitForSignal(),这会导致signal方法返回。 线程会返回到调用signal方法 的客户端。 所以,当signal方法返回时,执行定义到wait 2.一个signal会把执行从''initial''带到''wait 2''. 图 7.3. 一个signal会把执行从''initial''带到''wait 2''. 然后执行会等待一个外部触发器, 像是一个对象(更准确的是一个对象图)在内存中, 直到下一个外部触发器执行signal方法。 execution.signal(); 第二个调用的signal会直接让执行进入wait 3, 在它返回之前。 第二个signal让执行进入''wait 3''. 图 7.4. 第二个signal让执行进入''wait 3''. 使用这个范例的好处是相同的流程定义可以在 客户执行模式中执行 (在内存内不使用持久化),就像在持久化执行模式, 依赖应用和环境。 当在持久化模式下执行一个流程,你如何绑定 流程执行到数据库的事务上。 持久化模式下的事务超时 图 7.5. 持久化模式下的事务超时 jBPM-4.0中文开发指南-第7章 高级图形执行(5)时间:2011-09-24在大多情况下,计算工作是流程需要完成的一部分, 在外部触发器(红色部分)之后的部分,其实很少。 一般来说,处理流程执行和处理UI传递过来的请求 的事务不会超过一秒。 而业务流程中的等待状态可能超过几小时,几天甚至几年。 当等待状态启动后,线索就变得很清晰, 在等待状态启动之前,只有计算工作的完成包含在事务中。 考虑一下这种方式: "当到达审批时,所有的自动流程需要做的是什么, 在流程系统需要等待另一个外部触发器之前?". 除非pdf需要被创建,或大邮件需要被发送, 大部分时候,它消耗的时间都是可以忽略的。 这就是为什么在默认的持久化执行模式下, 流程工作在客户端线程下执行。 这个原因也保证着流程同步路径的情况。 当一个执行的单独路径切分成流程同步路径, 流程花在计算上的时间是可忽略的。 所以为什么分支或切分活动实现是有意义的, 目标持久化模式产生的同步路径在同一个线程中按顺序执行。 基本上它们都只是在同一个事务中的计算工作。 因为分支或切分知道每个执行的同步路径会返回,所以这只能被完成, 当出现一个等待状态的时候。 因为这里有一个困难的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |