使用长期事务的方案

下面的方案介绍如何使用长期事务。

方案 1:使用具有超时的长时间运行的事务

长期作用域可与某一超时关联,超时是长期工作必须在此时间范围内完成的逻辑时间。 如果范围未在指定时间内完成,则会引发预定义的系统异常 TimeoutException

您可以通过将整个业务流程标记为长期的,或者通过让外部长期作用域嵌套任何其他作用域,创建长期进程。 在前一个方案中,系统提供的异常处理程序将运行,而后一个方案则允许特定的异常处理程序与外部作用域相关联。 默认的系统提供的异常处理程序将为每个成功完成的嵌套事务性作用域(如果有)运行补偿处理程序,运行顺序与其完成顺序相反。 您可以通过在异常处理程序中将补偿形状用于长期事务,通过自补偿实现同一任务。

下面的业务流程介绍如何将超时与长期事务相关联。

具有超时设置的长时间运行的事务

具有超时BTS_Trans_Orch_Fig7的长时间运行的事务

有时候,您可能需要连接以批处理形式操作的旧式系统。 此方案显示了一个要接收并发送到旧式系统的采购订单。 此旧式系统处理该采购订单,并且发送回采购订单确认。 该发送操作采用采购订单号初始化某一相关集,并且接收操作将遵循该相关集。 该接收操作还处于具有超时值的长期作用域中。

业务流程引擎将冻结正等待接收的业务流程实例。 相关将确保在接收消息后调用同一业务流程实例。 如果采购订单确认未在超时值指定的时间间隔内到达,则将引发 TimeoutException

方案 2:使用具有自定义补偿的长时间运行的事务

以下业务流程阐释如何关联自定义补偿以及调用与整个业务流程相关联的自定义补偿。 此方案将插入一个新客户以及插入该客户的订单明细。 业务流程的逻辑规定如果订单插入失败,您应该回滚该客户插入。 该客户插入可由旧式系统执行,因此,在单独的可调用业务流程中阐释。 调用的业务流程具有用于补偿的 Custom 属性集,该属性提供单独的工作表来执行补偿过程。 该补偿是要删除新插入的客户。

调用业务流程具有要执行订单插入的长期作用域。 此作用域嵌套在某一外部长期作用域中。 该外部作用域具有关联的异常处理程序,以便捕获任何异常。 该处理程序使用补偿形状来定义与调用的业务流程相关联的自定义异常,以便回滚在对业务流程的调用中可能发生的任何更改。

具有自定义补偿的长时间运行的事务

使用自定义补偿BTS_Trans_Orch_Fig8长时间运行的事务

调用的业务流程(主要)

调用业务流程 (main)

调用的业务流程(补偿)

调用业务流程 (补偿)