Tha*_*Luo 5 spring timeout ejb transactions jta
以下是我的理解 JTA/JTS 处理事务超时问题。但是我找不到我的文件或材料来支持我的理解。我的理解对吗?你知道任何材料是指这个问题吗?
Application Server 遍历所有事务以检查超时。如果发生事务超时,应用程序服务器会标记该事务的回滚,并记录详细信息。但是此时Application Server既没有抛出异常,也没有中断事务。当事务线程继续尝试访问另一个事务资源(如 JDBC/JMS)时,实现 JTA 接口的事务资源将首先检查回滚标志,然后再进一步。那么此时抛出RollbackException。
==========
测试用例 1:将事务超时设置为 10 秒
一、交易开始
二、睡眠 20 秒
三、系统退出“睡眠结束”
结果:超时发生在第 10 秒,系统退出会记录超时详细信息,但不会抛出异常。将打印“睡眠结束”。
==========
测试用例 2:将事务超时设置为 10 秒
一、交易开始
二、睡眠 20 秒
三、第一次访问数据库
四、第二次访问数据库
五、系统退出“睡眠结束”
结果:超时发生在第 10 秒,系统退出会记录超时详细信息,但不会抛出异常。第一次访问数据库时抛出异常。不会打印“睡眠结束”。
==========
测试用例 3:将事务超时设置为 10 秒
一、交易开始
二、访问db和db死锁
结果:超时发生在第 10 秒,系统退出会记录超时详细信息。没有异常抛出,事务线程卡住了。所以事务超时控制无法处理数据库超时问题。我对这个很困惑..
根据我的理解,使用 spring 事务管理(JTA)和 EJB 时,上述行为应该是相同的。我对吗?
谢谢你的帮助!
经过测试,证明我的理解应该是正确的。
\n\n总结结果如下:
\n\n\xe2\x80\xa2 事务超时控制仅影响事务活动(例如:访问 DB/发送 JMS 消息)。
\n\n\xe2\x80\xa2 当超时发生时,应用服务器不会立即中断当前事务线程,而是仅记录详细信息。事务提交或尝试访问下一个事务活动时将引发超时异常。
\n\n\xe2\x80\xa2 DB死锁问题无法通过事务超时控制来处理。但DB2有死锁预防机制,可以在某些情况下释放死锁并回滚事务。
\n| 归档时间: |
|
| 查看次数: |
3041 次 |
| 最近记录: |