可配置包含与外部数据库或其他可恢复资源交互的消息流,以在单个全局事务中协调该消息流的全部处理。该协调确保所有处理成功完成或不完成任何处理。如果成功执行了所有处理,则落实事务;如果至少有一部分处理失败,则回滚事务。这表示所有受影响的资源(队列、数据库等)都保持在一致状态,且保留数据完整性。
要将消息流配置为协调的,设置消息流的协调属性。
对于某些输入节点,如 MQInput、或 SCADA 节点,可将流中有关节点的事务方式属性设置为自动;这表示,消息将成为全局事务的一部分,流被标记为事务性的(如果输入消息为持久的),以及流被标记为未协调的(如果输入消息不是持久的)。如果输入节点已将流标记为事务性的,则流中将“事务方式”属性设置为自动的后继节点将包含在全局事务中。
在分布式平台上消息流的事务协调由 WebSphere MQ 提供,而在 z/OS 系统上则由 RRS 提供。z/OS 上,消息流始终为全局协调,且无论消息流的协调属性是否指定为协调的。
未协调的流是未设置协调属性的流。未协调的流所使用的资源更新由独立资源管理器管理。某些资源管理器(如 WebSphere MQSeries)允许进行非事务性更新,或作为特定于资源的事务的一部分进行更新。 其他资源管理器(如数据库管理器)则始终使用特定于资源的事务。特定于资源的事务的范围受限于数据库或队列管理器等单个资源管理器所拥有的资源。
特定于资源的事务通常仅在流中只使用一种可恢复资源时使用。 (例如,流包含 MQInput 和 MQOutput 节点,但不访问任何数据库。)特定于资源的事务不应在存在多个资源时使用,且必须保持数据完整性。
对非事务性访问的资源进行的更新会立即落实。配置为非事务性的 MQInput 节点会将消息即刻从队列中除去,如果流失败消息便会丢失。
某些输入节点,如 MQInput 或 SCADA 节点,可通过将“事务方式”设置为自动而成为事务的一部分(取决于输入节点的持久性)。如果输入消息是持久的,则消息成为事务的一部分且流标记为事务性;如果消息不是持久的,则标记为非事务性。
错误处理程序样本演示了如何使用全局协调事务,并说明了数据库更新在进行协调时(主流)和不进行协调时(错误流)消息流的区别。