не удалось получить блокировку компонента
Я получаю эту ошибку иногда на компоненте области сеанса, все еще не понял, что вызывает это сбой. Есть идеи?
ERROR [Exceptions] handled and logged exception
javax.el.ELException: org.jboss.seam.core.LockTimeoutException: could not acquire lock on @Synchronized component: importUser
2 ответов
компоненты области сеанса синхронизируются по умолчанию. Это означает, что Seam заботится о том, чтобы только один запрос за раз мог получить доступ к такому компоненту. Все остальные запросы должны ждать, пока первый не будет завершен. Чтобы предотвратить голодание, запросы ожидания имеют тайм-аут (см. org.jboss.seam.core.SynchronizationInterceptor
для соответствующей реализации). Когда запрос ожидания не получает доступа к компоненту до тех пор, пока не будет достигнут тайм-аут,SynchronizationInterceptor
бросает!--2-->.
предполагая запросы, A и B, нужен ваш importUser
компонент и A является первым. Если a занимает много времени, чтобы закончить, B закончится в LockTimeoutException
. Чтобы найти причину вашей проблемы, попробуйте выяснить, как запрос importUser
может занять больше времени, чем определенный тайм-аут.
У меня была страница, где это происходило нечасто при большой нагрузке. Я смог уменьшить частоту этого, поместив эту аннотацию в класс объектов оскорбительного шва:
@Synchronized(timeout=5000)
это увеличивает тайм-аут до пяти секунд вместо значения по умолчанию, которое дает им один второй шов. Это всего лишь пластырь, но я не собирался переписывать этого бегемота.