JTA/JTS如何处理事务超时问题



以下是我对JTA/JTS处理事务超时问题的理解。但是我找不到我的文件或材料来支持我的理解。我的理解对吗?你知道关于这个问题有什么资料吗?

Application Server遍历所有事务以检查超时。如果发生事务超时,应用服务器将为该事务标记回滚,并记录详细信息。但是此时应用服务器既没有抛出异常也没有中断事务。当事务线程继续尝试访问另一个事务资源(如JDBC/JMS)时,实现JTA接口的事务资源将首先检查回滚标志,然后再进行下一步操作。此时,抛出RollbackException。

==========

测试案例1:设置事务超时为10秒

。事务开始

二世。睡眠20秒

III。系统输出"Sleep end"

结果:超时发生在第10秒,系统退出记录超时细节,但不抛出异常。输出"Sleep end"

==========

测试用例2:设置事务超时为10秒

。事务开始

二世。睡眠20秒

III。第一次访问数据库

第四。访问数据库第2次

V。系统输出"Sleep end"

Result:超时发生在第10秒,并且system out记录超时细节,但不抛出异常。第一次访问数据库时抛出异常。"Sleep end"将不打印。

==========

测试用例3:设置事务超时为10秒

。事务开始

二世。访问db和db死锁

Result:超时发生在第10秒,system out记录超时详情。没有抛出异常,事务线程被卡住。所以事务超时控制不能处理数据库超时问题。我很困惑……

在我的理解中,上述行为在使用spring事务管理(JTA)和EJB时应该是相同的。我说的对吗?

谢谢你的帮助!

经过测试,证明我的理解应该是正确的。

将结果总结如下:

•事务超时控制只影响事务活动(例如:访问DB/发送JMS消息)。

•当超时发生时,应用服务器不立即中断当前事务线程,相反,应用服务器只记录细节。当事务提交或尝试访问下一个事务活动时,将抛出超时异常。

•DB死锁问题不能通过事务超时控制来处理。但是在某些情况下,DB2有防止死锁的机制来释放死锁并回滚事务。

相关内容

  • 没有找到相关文章

最新更新