繁体   English   中英

在两阶段提交事务中使用非XA数据源时引发异常

[英]Exception thrown when using non-XA datasource in two-phase commit transaction

我的Websphere应用程序有3个数据源。 其中两个是XA,另一个是非XA。

我通过使用@transactional注释对方法进行注释来使Java方法具有事务性。

在该方法中,执行了3个任务。 第一个使用一个XA数据源进行一些更新,然后第二个使用非XA数据源选择一些记录,最后一个任务使用另一个XA数据源再次进行一些更新。

但是,会引发异常,并出现以下错误: An illegal attempt to commit a one phase capable resource with existing two phase capable resources

我想知道为什么即使我的应用程序仅使用非XA来选择一些数据并且不需要提交,还是会发生上述错误,如果不允许我将非XA数据源更改为XA,如何解决该问题? 。

默认情况下,非XA资源无法参与分布式事务。 因此,您有以下选择:

  • 将数据源更改为XA-您写道无法执行此操作
  • 尝试启用最后一个参与者支持 -最后一个参与者支持是事务服务的扩展,它使单个一阶段资源可以使用一个或多个两阶段资源参与两阶段事务。
  • 如果您不需要事务,则将此(nonXA)数据源设置为非事务性的。 它将不会参与交易:
 Select Resources > JDBC > Data sources Select the name of the data source that you want to configure. Select WebSphere Application Server data source properties from the Additional Properties heading. Select Non-transactional data source. Click OK. 
  • 将那个nonXA调用包装在EJB中,并将其标记为不支持事务。
  • 手动管理交易-不使用容器管理的交易,而是使用Transaction API在您的方法内部手动处理交易。

当开始第二个任务时,在使用@Transaction注释时, need to be commit or rolled back在XA数据源上更新的前一个任务,整个任务会自动执行一次事务,因此请不要使用@Transaction注释,而应使用@Transaction注释将每个任务放在单独的事务中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM