Bat*_*u89 5 java concurrency transactions jta isolation
我们知道隔离和原子性是两个不同的属性.原子性是"全有或全无"属性,无论是事务成功完成还是完全失败.JTA和JTA基于的X/Open XA两阶段提交标准完全支持原子性.
我的问题是:JTA是否支持隔离?我只是指我们使用EJB和JDBC,没有框架(例如Spring)或除JTA之外的事务管理器的情况.
换句话说,让我们假设我们有多个线程,让我们说其中一个执行全局事务,它对多个数据库执行访问和修改.其他线程对数据库执行修改,但每个线程仅对一个数据库执行修改,并在事务中执行修改.
我们是否会在全局事务中出现诸如脏/可重复/幻像读取之类的并发问题?
AFAIK无法在JTA中指定隔离级别.
小智 3
隔离是 ACID 家族中的害群之马。严格来说,它不是事务管理器的属性。它完全由资源管理器(即数据库)控制。针对数据库的所有事务都在某种隔离级别上运行。XA (JTA) 事务的区别在于如何选择该级别。
在大多数情况下,不可能实现常规事务的每事务隔离级别选择控制,尽管某些资源管理器可能允许 SQL 设置事务隔离命令作为 XA 控制的事务分支中的第一个语句。有时使用的另一种模型是 XAResource.start 的自定义标志,这是 Oracle 等公司采用的方法。对于不支持这两者的数据库引擎,XA 事务默认为数据库服务器全局配置的隔离级别。
请注意,即使对于“可序列化”事务、JTA 或其他事务,您仍然会感到头疼。阅读 Peter Bailis 出色的 ACIDRain 论文,然后找个角落静静地哭泣。
http://www.bailis.org/papers/acidrain-sigmod2017.pdf