2009-11-04 2 views
2

Я использую EHCache 1.5.0 для webapp, работающего в экземпляре WebLogic 9.1. Время от времени я сталкиваюсь со следующей ошибкой, получая элемент из кеша или проверяя, существует ли элемент в кеше. Кто-нибудь еще видел эту проблему? Любые предложения о том, как исправить это, были бы замечательными.Ошибка EHCache при поиске по ключу кеша

код, который вызывает этот вопрос:

getMyCache().isKeyInCache(cacheKey) 

конфигурации EHCache:

maxElementsInMemory="10000" 
eternal="false" 
timeToIdleSeconds="120" 
timeToLiveSeconds="120" 
overflowToDisk="true" 
diskPersistent="true" 

Я использую Spring, чтобы получить экземпляр CacheManager и вот мое определение компонента:

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
     <property name="configLocation"><value>classpath:ehcache.xml</value></property> 
    </bean> 

Ошибка заключается в следующем:

java.lang.NullPointerException 
       at net.sf.ehcache.Cache.isElementInMemory(Cache.java:1962) 
       at net.sf.ehcache.Cache.isKeyInCache(Cache.java:2075) 
       at com.test.services.impl.ContentServicesImpl.getContentItemFromCache(ContentServicesImpl.java:260) ...... 

В журнале нет ничего, указывающее причину исключения NullPointerException при поиске ключа в кеше.

Любые указатели, предложения о том, как исправить это, будем очень благодарны. Это не происходит последовательно, кажется случайным в одной среде.

ответ

0

Учитывая трассировку стека, кажется, что вызывающий поток видит кеш с нулевым хранилищем MemoryStore (что не должно быть возможным). У меня есть подозрение, что это может быть проблемой видимости памяти в коде создания CacheManager (с двойной проверкой блокировки) или в самом кэше. Мы ужесточили многие проблемы с видимостью на поле для Ehcache 1.7.1 (но не через несколько недель).

Это затрудняет определение определенного исправления, но одна дрянная идея заключалась бы в добавлении инициализации весны, которая гарантировала бы во время запуска, что только один поток сконструировал CacheManager. Если это заставило проблему уйти, это придало бы некоторое доверие вышеупомянутой теории.

Смежные вопросы