正如我们所知,隔离性和原子性是两个不同的属性。原子性是“全有或全无”的属性,事务要么成功完成,要么完全失败。原子性得到了JTA和JTA所基于的X/Open XA两阶段提交标准的明确支持。
我的问题是: JTA支持隔离吗?我指的只是我们使用EJB和JDBC时的情况,没有框架(例如Spring)或JTA以外的事务管理器。
换句话说,假设我们有多个线程,假设其中一个线程执行全局事务,该事务对多个数据库执行访问和修改。其他线程在数据库上执行修改,但每个线程只在一个数据库上执行修改,并且在一个事务中执行。
我们是否会在全局事务中遇到诸如脏/可重复/幻影读取之类的并发问题?
AFAIK无法在JTA中指定隔离级别。
发布于 2017-05-04 23:24:43
孤立是酸家族的害群之马。严格地说,它不是事务管理器的属性。它完全由资源管理器(即数据库)控制。针对数据库的所有事务都在某个隔离级别上运行。XA (JTA)事务的不同之处在于如何选择该级别。
在大多数情况下,不可能实现对常规事务的每事务隔离级别选择控制,尽管一些资源管理器可能允许SQL set transaction isolation命令作为XA控制的事务分支中的第一条语句。有时使用的另一种模型是XAResource.start的自定义标志,例如oracle采用的一种方法。对于两者都不支持的数据库引擎,XA事务缺省为为数据库服务器全局配置的隔离级别。
请注意,即使对于“可序列化”的事务、JTA或其他事务,您仍然会遇到令人头疼的问题。阅读Peter Bailis优秀的ACIDRain论文,然后去找一个角落静静地流泪。
http://www.bailis.org/papers/acidrain-sigmod2017.pdf
https://stackoverflow.com/questions/43709565
复制相似问题