Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring JTA/JTS如何处理事务超时问题?_Spring_Transactions_Timeout_Ejb_Jta - Fatal编程技术网

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

Spring JTA/JTS如何处理事务超时问题?,spring,transactions,timeout,ejb,jta,Spring,Transactions,Timeout,Ejb,Jta,以下是我对JTA/JTS处理事务超时问题的理解。但我找不到支持我理解的文件或材料。我的理解正确吗?你知道有什么材料是关于这个问题的吗 应用服务器迭代所有事务以检查超时。如果发生事务超时,application server将标记该事务的回滚,并记录详细信息但应用服务器此时既不会引发异常也不会中断事务。当事务线程继续尝试访问另一个事务资源(如JDBC/JMS)时,实现JTA接口的事务资源将首先检查回滚标志,然后再继续。然后在这一时刻,抛出RollbackException ========== 测

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

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

==========

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

一、交易开始

二,。睡20秒

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

结果:超时发生在10秒,系统将注销超时详细信息,但不会引发异常。将打印“睡眠结束”

==========

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

一、交易开始

二,。睡20秒

三、 第一次访问数据库

四、 第二次访问数据库

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

结果:超时发生在10秒,系统将注销超时详细信息,但不会引发异常。第一次访问数据库时引发异常。“睡眠结束”将不会打印

==========

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

一、交易开始

二,。访问数据库和数据库死锁

结果:超时发生在10秒,系统将记录超时详细信息。没有异常抛出,事务线程被卡住因此事务超时控制无法处理数据库超时问题。我对此感到非常困惑

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


谢谢你的帮助

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

将结果总结如下:

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

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

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