用户事务是否可以控制本地事务



我必须编写使用第三方代码的代码(不能更改代码)。在我的代码中,我想使用JTA(在JBoss上),以便对我的代码(方法)中的所有操作执行全部或不执行任何操作。其中一个操作是对第三方API的调用,该第三方使用本地事务和自己的sql连接对DB执行实际的保存/更新操作。在我完成了其他操作之后,比如写入输出流等等,但如果没有完成所有的后续操作,我希望能够回滚(第三方API的)DB操作。我能做这个吗?我的意思是,我的用户交易可以控制第三方本地交易吗?

在JTA范围内,我将调用第三方API,该API使用本地事务和自己的sql连接对DB执行实际的保存/更新操作。我能做这个吗?

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

我的意思是,我的用户交易可以控制第三方本地交易吗?

这取决于您的第三方代码是否创建了自己的强制事务(begin和commit)。如果是这样的话,JTA不能控制第三方交易,因为规范不允许这样做

然而,JavaEE事务管理器有一个限制:它不支持嵌套事务。换句话说,在前一个事务结束之前,它不能启动实例的事务。https://docs.oracle.com/cd/E19798-01/821-1841/bnciz/index.html

最新更新