用户事务能否控制本地事务

can user transaction take control over local transaction

我必须编写使用第三方代码的代码(无法更改代码)。 在我的代码中,我想使用 JTA(在 JBoss 上)以便对我的代码(方法)中的所有操作强制执行全部或不执行。其中一个操作是调用第三方 API,它正在使用本地事务和它自己的 sql connection.After 对数据库进行实际的 save/update 操作 我还有其他操作喜欢写入输出流等等,但我希望能够回滚数据库操作(第三方 API),如果不是所有的操作都完成的话。 我可以这样做吗?我的意思是我的用户交易可以控制第三方本地交易吗?

Inside the JTA scope I will call the third party API that is doing the actual save/update operation to DB with local transaction and with its own sql connection. Can I do this ?

我认为这是可能的,但如果在两种情况下使用相同的数据库和相同的表,您可能需要在 JTA 事务中刷新数据。

I mean can my user transaction can take control over the third party local transaction ?

这取决于您的第三方代码是否强制创建自己的事务(开始并提交)。 如果是这种情况,JTA 无法控制第三方事务,因为规范不允许这样做。

However, the Java EE transaction manager does have one limitation: It does not support nested transactions. In other words, it cannot start a transaction for an instance until the preceding transaction has ended. https://docs.oracle.com/cd/E19798-01/821-1841/bnciz/index.html