java – 事务TimeOut EJB对线程的影响
关于EJB的问题:
假设我有一个具有无限循环的会话bean.它在EJB事务下运行.现在当EJB的事务超时时,会导致无限循环线程中断或容器将停止运行无限循环的线程. 解决方法
这个答案基于我在OC4J 10.3.x,WebSphere 6.x和WebLogic 10.x上执行了几年的逆向工程,并且可能以类似的方式应用于其他容器.据我所知,事务超时检测在不同容器中的实现方式不同,但它们都采用了如下所述的某些共同原则: >事务超时检测通常在容器管理的不同线程中执行.相关线程休眠指定的持续时间(通常为1秒),然后唤醒并迭代所有正在进行的事务.如果任何事务超过了指定的超时(通常在各种级别–JTA容器,EJB等),则线程将标记事务以进行回滚.不会尝试向执行事务的线程发出关于事务状态的信号. 基于以上所述,可以推断,除非抛出TransactionRolledBackException,否则永远不会破坏无限循环.换句话说,只有在循环内尝试事务活动时才会中断循环;如果没有执行这样的活动,那么循环将保留它的属性以无限期地执行. 请注意,某些容器(如WebLogic)允许检测“卡住”线程.这意味着此类容器能够检测线程是否已执行超过配置持续时间的延长时间段.这并不意味着容器在检测到一个卡住时会终止或中断线程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |