本主题仅适用于 IBM Business Process Manager Advanced 配置。

微流动的事务行为

微流程是生存期较短的 BPEL 流程。它们可以在事务中运行,也可以在对该微流程的 SCA 组件指定的活动会话中运行。以下内容对作为事务一部分执行的微流程进行说明。

微流程不可中断。因此,微流程不能包含等待外部事件或用户交互的活动,例如人员任务活动。

微流程是瞬态流程。微流程的流程实例状态保存在内存中,而不是存储在运行时数据库中。但是,可以将微流程实例的状态保存在审计日志或公共基本事件中。

下图说明微流程的事务以及与微流程进行交互的服务。事务边界内的服务参与微流程事务;边界外的服务不参与该事务。

此图说明微流程的事务。事务边界内的所有服务都属于微流程事务。边界外的服务不参与微流程事务。

调用的服务以及微流程事务

微流程在一个事务中运行。然而,此微流程调用的服务可能会包含多个事务。这是因为,通过调用活动调用的服务既可以参与微流程的事务也可以在它自己的事务中运行。

下列设置确定该服务是参与微流程的事务还是在它自己的事务中运行。
  • 用于调用该服务的交互样式。
    交互样式可以是同步调用或异步调用。该样式由以下两个因素决定:目标服务组件体系结构 (SCA) 组件或 SCA 导入的首选交互样式,以及该操作是单向操作还是请求-响应操作,如下表所示:
    表 1.
    目标组件或导入的首选交互样式 单向操作 请求-响应操作
    任意 异步调用 同步调用
    同步方式 同步调用 同步调用
    异步 异步调用 同步调用
    注: 从请求-响应操作的微流程调用且首选交互样式为 “异步”的调用是服务调用反模式的典型示例。当调用的服务是长时间运行流程时,在该长时间运行流程完成之前,微流程事务可能会超时,并且出现运行时错误。
  • 对该流程以及所调用服务指定的 SCA 事务限定符:
    • 对流程组件的引用指定的 suspendTransaction 限定符确定,该流程的事务上下文是否传播到所要调用的服务。
    • 对服务接口指定的 joinTransaction 限定符确定,如果传播事务的话,服务是否参与其调用者的事务。

根据这些设置的不同,下列规则适用于所调用的服务:

同步调用
joinTransaction suspendTransaction = true suspendTransaction = false
joinTransaction = true 此服务不参与微流程事务 此服务参与微流程事务
joinTransaction = false 此服务不参与微流程事务 此服务不参与微流程事务

如果某个服务参与微流程事务,那么仅当落实微流程事务时,才会保存该服务对事务资源所作的更改。如果某个服务未参与微流程事务,那么可以保存该服务对事务资源所作的更改,即使该事务回滚亦如此。可以使用补偿来撤销该服务所作的更改。

异步调用
服务始终在自己的事务中运行。要确保异步 SCA 消息发送参与当前导航事务,必须将微流程的 asynchronousInvocation 限定符设置为 commit