1

我有基于 JBoss 和 Hibernate 的系统。我需要处理两个长时间的操作。操作可能比事务的超时时间长。它的操作是在两个不同的事务中持续存在许多实体。如果出现问题,在此操作期间,我应该回滚事务的所有更改。

解决它的最佳方法是什么?

我认为,最好的方法是将所有操作合并到一个事务中,但它需要设置 LOng 事务超时,这对我们的系统来说是不可接受的。

在这种情况下管理许多事务是否更好。我该怎么做?

4

3 回答 3

2

您可以使用 JTA 服务器(事务协调器)通过 XA 事务分多个步骤执行事务吗? 这篇文章对一些可能对你有用的开源文章有一些扇出。

XA 事务允许您执行一堆较小的操作并一次提交或回滚它们。尝试使用谷歌搜索“休眠 xa 事务”。大多数现代 RDBMS 平台(MySQL 5.x、PostgreSQL、SQL Server、Oracle、DB2、Sybase 等)都支持 XA 事务。

于 2009-09-15T08:12:22.457 回答
1

使用一个事务是好的、健壮的等等。再次尝试说服您的管理员;-)


否则,我可以想到:

  • 使用较短的事务插入更少的行,使用标记表示“不完整”。这可能在现有列中或新列中(也许它可能在不同的表中?)。
  • 如果有任何事务回滚,请再试一次;如果您希望中止整个操作,您可以选择删除具有“不完整”标记的行。
  • 提交所有事务后,您可以打开最后一个事务,仅用于将所有行标记为“完成”(例如:)update ... where ...。这应该比完全插入要快得多,因此事务应该足够短。
于 2009-09-15T07:56:02.317 回答
0

我不得不在 JPA 中做类似的事情(通过休眠)。我在 N 笔交易而不是 1 笔大笔交易中进行了操作。这个操作很少运行——它是一个自动化的工作——所以没有用户在网页上等待结果。

您预计交易需要多长时间?您希望用户等待多长时间?您预计此操作多久发生一次。也许你的要求不明确。

于 2009-09-15T15:51:58.850 回答