На высоком уровне у меня есть класс MemcachedPoolService, который имеет два метода: getClientInstance() и returnClientInstance (клиент). Как и ожидалось, getClientInstance() возвращает экземпляр MemcachedClient (spymemcachced) вызывающему, а returnClientInstance (клиент) возвращает MemcachedClient обратно в пул. MemcachedPoolService должен быть доступен другим службам @Stateless (впрыснутым), которым всем нужен доступ к Memcached.Какую бобу я должен использовать для обеспечения доступа к пулу объектов в EJB?
В настоящее время я MemcachedPoolService помечено как @Singleton, но я получаю следующее сообщение об ошибке, когда более чем один клиент пытается получить доступ к приложению:
[0m[31m16:54:22,968 ERROR [org.jboss.as.ejb3.invocation] (http-/0.0.0.0:8080-10)
JBAS014134: EJB Invocation failed on component MemcachedPoolService for method public
net.spy.memcached.MemcachedClient com.apexlab.cache.MemcachedPoolService.getClientInstance():
javax.ejb.EJBTransactionRolledbackException: JBAS014373: EJB 3.1 PFD2 4.8.5.5.1 concurrent
access timeout on [email protected] - could not
obtain lock within 5000MILLISECONDS
Что бы лучший способ настроить мой MemcachedPoolService (и мое веб-приложение в целом) для производственной среды, чтобы избежать получения параллельных исключений таймаута?
потрясающе. изменив LockType на READ на класс, исправленный. большое спасибо! – daveashworth
Благодарим вас, не было бы здорово, если бы doco на singleton выкрикнул, что на самом деле у него по умолчанию установлена блокировка последовательности. – Spence