我的Websphere应用程序有3个datsources。其中两个是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。
答案 0 :(得分:1)
默认情况下,非XA资源不能参与分布式事务。所以你有以下选择:
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.
答案 1 :(得分:0)
启动第二个任务时,在您使用need to be commit or rolled back
注释时对XA数据源@Transaction
执行更新的上一个任务会自动完成一个事务,因此请勿使用@事务注释而不是它将每个任务放在单独的事务中