无法锁定组件

时间:2010-10-13 05:43:27

标签: seam

我有时会在会话作用域组件上遇到此错误,但仍未找出导致此失败的原因。有什么想法吗?

ERROR [Exceptions] handled and logged exception
javax.el.ELException: org.jboss.seam.core.LockTimeoutException: could not acquire lock on @Synchronized component: importUser

2 个答案:

答案 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给出它们。这只是一个创可贴,但我还没有重写那个庞然大物。