以下是我的理解,JTA/JTS处理事务超时问题。但是我找不到我的文档或材料来支持我的理解。我的理解是正确的吗?你知道任何材料是指这个问题吗?JTA/JTS如何处理交易超时问题?
Application Server遍历所有事务以检查超时。如果发生事务超时,则应用程序服务器标记回滚事务,并记录详细信息。 但是Application Server既不会抛出异常也不会中断事务。当事务线程继续尝试访问另一个事务资源(如JDBC/JMS)时,实现JTA接口的事务资源将在继续之前先检查回退标志。然后在这个时候抛出RollbackException。
==========
测试案例1: 设置事务超时10秒
一交易开始
II。睡眠20秒
三。系统输出“睡眠结束”
结果:超时发生在第10秒,系统输出记录超时细节,但不抛出异常。 “睡眠结束”将被打印。
==========
测试案例2: 设置事务超时10秒
一交易开始
II。睡眠20秒
三。访问db第一次
四。 Access数据库第2次
五,制出“休眠结束”
结果:超时发生在第10秒,并制出记录下来超时的细节,而不是抛出异常。第一次访问数据库时抛出异常。 “睡眠结束”将不会被打印。
==========
测试案例3: 设置事务超时10秒
一交易开始
II。访问数据库和数据库死锁
结果:超时发生在第10秒,系统输出记录超时详细信息。没有异常抛出,事务线程卡住了。 因此,事务超时控制无法处理数据库超时问题。我对此很困惑。
在我的理解中,使用spring事务管理(JTA)和EJB时,上述行为应该是相同的。我对吗?
感谢您的帮助!