我有时会在会话作用域组件上遇到此错误,但仍未找出导致此失败的原因。有什么想法吗?
ERROR [Exceptions] handled and logged exception
javax.el.ELException: org.jboss.seam.core.LockTimeoutException: could not acquire lock on @Synchronized component: importUser
答案 0 :(得分:16)
默认情况下会话范围组件是同步的。这意味着,Seam注意一次只有一个请求可以访问这样的组件。所有其他请求必须等到第一个完成。为了防止饥饿,等待请求有一个超时(相应实现请参见org.jboss.seam.core.SynchronizationInterceptor
)。当等待请求在达到超时之前无法访问组件时,SynchronizationInterceptor
会抛出org.jboss.seam.core.LockTimeoutException
。
假设请求A和B需要您的importUser
组件而A是第一个。如果A需要很长时间才能完成,B将以LockTimeoutException
结束。要找出问题的原因,请尝试了解importUser
的请求可能需要的时间超过定义的超时时间。
答案 1 :(得分:4)
我有一个页面,这种情况在重负荷下不经常发生。通过将此注释放在有问题的Seam对象类上,我能够降低这种情况发生的频率:
@Synchronized(timeout=5000)
将超时时间增加到五秒,而不是默认的一秒Seam给出它们。这只是一个创可贴,但我还没有重写那个庞然大物。