春季-JTA / JTS如何处理事务超时问题?

下面是我的理解,JTA / JTS处理事务超时问题.但是我找不到我的文件或材料来支持我的理解.我的理解正确吗?您知道有关此问题的材料吗?

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

==========

测试用例1:
将交易超时设置为10秒

一,交易开始

二.睡眠20秒

三,系统输出“睡眠结束”

结果:超时发生在第10秒,并且系统注销记录了超时详细信息,但没有引发异常.将打印“睡眠结束”.

==========

测试案例2:
将交易超时设置为10秒

一,第一次访问数据库

IV.第二次访问数据库

V.系统退出“睡眠结束”

结果:超时发生在第10秒,但没有引发异常.第一次访问数据库时引发异常. “睡眠结束”将不会打印.

==========

测试案例3:
将交易超时设置为10秒

一,交易开始

二.访问数据库数据库死锁

结果:超时发生在第10秒,并且系统注销记录了超时详细信息.没有异常抛出,事务线程被卡住.因此,事务超时控制无法处理数据库超时问题.我对此很困惑.

以我的理解,在使用Spring事务管理(JTA)和EJB时,上述行为应该相同.我对吗?

感谢您的帮助!

最佳答案
经过测试,证明我的理解应该是正确的.

总结结果如下:

•事务超时控制仅影响事务活动(例如:访问数据库/发送JMS消息).

•应用程序服务器不会在发生超时时立即中断当前事务线程,而是,应用程序服务器仅记下详细信息.事务提交或尝试访问下一个事务活动时,将抛出超时异常.

•事务超时控制无法处理数据库死锁问题.但是,在某些情况下,DB2具有防止死锁并释放死锁并回滚事务的机制.

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...