事务类型和连接行为

所有连接都在全局事务或局部事务容器 (LTC) 范围中使用。 每种事务类型对连接有不同的需求,并且以不同的方式影响连接设置。

连接共享和复用

可在全局事务作用域中共享连接(假设符合其他共享规则)。 还可在可共享 LTC 中共享连接。 您可以在 LTC 范围中连续复用连接。 某一获取/使用/关闭连接模式(后跟对同一数据源或连接工厂的另一个获取/使用/关闭实例)使您能复用同一连接。 请参阅主题“不可共享和可共享连接”以获取更多详细信息。

JDBC 自动落实行为

缺省情况下,所有 JDBC 连接在第一次通过 getConnection 调用获取时,都包含设置 AutoCommit = TRUE。 但是,不同事务作用域和设置可能导致更改 AutoCommit 值,或仅仅覆盖 AutoCommit 值。
  • 如果在 LTC 中进行操作,并且将其解析控制设置为 Application,那么 AutoCommit 仍为 TRUE(除非应用程序进行了更改)。
  • 如果在 LTC 中进行操作,并且将其解析控制设置为 ContainerAtBoundary,那么应用程序一定不能更改 AutoCommit 设置。 这WebSphere® Application Server运行时设置AutoCommit值错误的在工作开始之前,然后在 LTC 范围结束时根据需要提交或回滚工作。
  • 如果您在全局事务中使用连接,那么数据库忽略 AutoCommit 设置,以便控制落实和回滚处理的事务服务可以管理该事务。 无论用户如何更改 AutoCommit 设置,第一次使用此连接工作时,都会执行该操作。 事务完成后,AutoCommit 值返回至第一次使用连接之前的值。 因此,即使在全局事务中使用连接前将 AutoCommit 的值设置为 TRUE,但由于数据库忽略该值,您也无需将该值设置为FALSE。 在此示例中,事务完成后,连接的 AutoCommit 值返回为 TRUE
  • 如果您在全局事务中使用多个不同的连接,那么保证所有工作一起落实或回滚。 对于局部事务容器(LTC 范围),那么不属于这种情况。 在一个 LTC 中,不同连接上完成的工作是独立落实或回滚的。

一阶段落实连接和两阶段落实连接

那些必须通过应用程序访问的资源管理器(如数据库服务器)的类型和数目通常会确定应用程序事务需求。 因此,每种类型的资源管理器对连接行为有不同的需求。
  • 两阶段落实资源管理器可支持事务的两阶段协调。 该支持是涉及其他资源管理器的事务所必需的;这些事务是全局事务。 请参阅主题: WebSphere Application Server以获得进一步的解释。
  • 一阶段落实资源管理器仅支持一阶段事务或 LTC 事务,该资源在这些事务中是唯一参与的数据存储。 请参阅主题: WebSphere Application Server以获得进一步的解释。

一阶段落实资源是指在一阶段连接上完成的工作不能与其他连接上完成的工作混合,这样就确保了在所有连接上的工作以不可分割的方式完成或失败。 该产品不允许在一个全局事务中有多个一阶段落实连接。 此外,它不允许在具有一个或多个两阶段提交连接的全局事务中存在单阶段提交连接。 您只能协调全局事务中的多个两阶段落实连接。

WebSphere Application Server提供最后参与者支持,它使单个单阶段提交资源能够与一个或多个两阶段提交资源一起参与全局事务。

注意,任何时候您使用指定 res-sharing-scope=Unshareable 的资源引用多次调用 getConnection() 时,都将获取多个物理连接。 该情况还在 res-sharing-scope=Shareable 时出现,但共享规则被破坏。 无论在哪种情况下,如果在全局事务中运行,那么确保为两阶段落实启用涉及的资源(有时也称为启用 JTA)。 操作失败将导致 XA 异常,它将记录以下消息:
WTRN0063E: An illegal attempt to enlist a one phase capable resource with existing two phase capable 
resources has occurred.