gpt4 book ai didi

java - 是否可以在一个事务中使用多个持久化单元,而不是 XA?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:50 25 4
gpt4 key购买 nike

我们的应用程序需要使用(只读)几个不同的持久化单元指向不同的数据库(不同的,商业供应商也是如此)。

我们没有预算在其中之一 (Sybase) 上启用 2pc。有没有一种方法可以在事务中使用这些而不必是 XA 事务?

我们将 Websphere 6.1、Sybase 12.5.3、Oracle 10g、Java EE 5 和 JPA 与 Hibernate Entity Manager 结合使用。

更新: oracle PU 很少每月更新 1 或 2 次,而 sybase PU 更新非常频繁 -- 每天多次。隔离绝对是后者的一个问题,两者之间的一致性没有必要强制执行。

最佳答案

小心。
只读并不总是意味着 2PC 不适用。如果你有两个数据库,你读取两个但只更新一个,你需要一个事务来保证一致的结果。假设您有一个场景,您读取数据库 A,然后使用这些结果读取和更新数据库 B。如果您未能使用数据库 A 的事务,那么有可能在您的操作处于 Activity 状态时,您从中读取的数据数据库 A 可以被另一个应用程序读取和更新。在这种情况下,您可以在数据库 B 中获得不一致的数据。

如果您确实正在读取两个数据库并且都没有更新,您可能会再次认为分布式事务及其伴随的锁定是不必要的。不过,也许不是。如果其他应用程序正在更新相同的数据库,您也可能在这种情况下获得不一致的读取。这取决于您的要求和数据库的其他用户。

我会建议 reading up on isolation levels深入了解适用于所有持久存储(如数据库)的锁定,即使在读取操作期间也是如此。事务锁定可能是不必要的;例如,如果您正在处理实际上不会更改的数据(任何 应用程序没有写入),则没有必要。

也许这里有一个商业解决方案 - 与您的供应商协商以降低 XA 支持的价格,然后支付。随着经济的发展,您可能会得到一笔您负担得起的交易。旁注:令我惊讶的是,您可以许可数据库而不进行交易。我不知道可以用那种方式授权 Sybase。

关于java - 是否可以在一个事务中使用多个持久化单元,而不是 XA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/871625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com