高级图形执行—jBPM开发指南(2)
让我们和你一起遵循这个过程。
clientExecution execution = processDefinition . StartProcessInstance();
开始新的执行意味着执行初始活动。因此,如果自动活动是初始活动,这意味着将立即选择第一个未命名的向外转移。这些都发生在startProcessInstance调用中。
然而,在这种情况下,初始活动是等待状态。因此,startProcessInstance方法将立即返回,执行将定位到初始活动& # 39;等待1 & # 39;新的执行将设置为& # 39;等待1 & # 39;。
然后外部触发器执行信号方法。
execution . signal();
像上面解释的引入等待状态一样,信号导致默认转换被选择。转移将执行移动到自动1活动并执行它。automatic 1中的显示活动执行方法向控制台打印一行,并且它不调用execution.waitForSignal()。因此,通过选择自动1之外的默认传输来执行。在这种状态下,信号方法已被阻止。另一种考虑的方式是执行该方法,例如,信号将使用客户端的线程来截取进程定义,直到它达到等待状态。
然后执行等待2并执行等待状态活动。该方法调用execution.waitForSignal(),这将导致信号方法返回。线程返回到调用信号方法的客户端。
因此,当信号方法返回时,执行被定义为等待2。一个信号将从& # 39;首字母& # 39;到& # 39;等待2 & # 39;。
然后执行等待一个外部触发器,比如内存中的一个对象(或者更准确地说是一个对象图),直到下一个外部触发器执行信号方法。
execution . signal();
第二次调用的信号将在返回之前引导执行进入等待3。
第二个信号让执行进入& # 39;等待3 & # 39;。
使用此示例的优势在于,可以在客户端执行模式下执行相同的流程定义(内存中不使用持久性),就像在持久性执行模式下一样,具体取决于应用程序和环境。
在持久模式下执行进程时,如何将进程绑定到数据库的事务?
持续模式下的事务超时
在大多数情况下,计算工作是需要完成的过程的一部分,外部触发后的部分(红色部分)实际上非常少。一般来说,处理流程执行和处理用户界面传递的请求的事务不会超过一秒钟。业务流程中的等待状态可能会超过几个小时、几天甚至几年。当等待状态开始时,线索变得清晰。在等待状态开始之前,事务中只包括计算工作的完成。