管理交易的最佳方式

时间:2009-09-15 07:48:08

标签: java hibernate jboss transactions jta

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

解决问题的最佳方法是什么?

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

在这种情况下,许多交易的管理是否更好。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

您是否可以使用JTA服务器(事务协调器)通过XA事务在多个步骤中执行事务? This posting对于一些可能适合您的开源软件有点狂热。

XA transactions允许您执行一系列较小的操作,并在一次命中中提交或回滚它们。尝试谷歌搜索'休眠xa交易'。大多数现代RDBMS平台(MySQL 5.x,PostgreSQL,SQL Server,Oracle,DB2,Sybase等)都支持XA事务。

答案 1 :(得分:1)

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


否则,我可以想到:

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

答案 2 :(得分:0)

我必须在JPA中做类似的事情(通过hibernate)。我在N次交易中进行了操作而不是一次大交易。此操作很少运行 - 这是一个自动化作业 - 因此没有用户在网页上等待结果。

您希望交易需要多长时间?你期望用户等多久?您经常发生此操作的频率。也许你的要求不明确。