2009-11-04 4 views
2

WebLogic 9.1 인스턴스에서 실행중인 웹 응용 프로그램에서 EHCache 1.5.0을 사용하고 있습니다. 가끔씩 캐시에서 요소를 가져 오는 동안 또는 항목이 캐시에 있는지 확인하는 동안 다음 오류가 발생합니다. 이 문제를 본 다른 사람이 있습니까? 이 문제를 해결하는 방법에 대한 제안은 훌륭합니다. 이 문제가 발생캐시 키를 조회 할 때 EHCache 오류가 발생했습니다.

코드 :

getMyCache().isKeyInCache(cacheKey) 

으로 Ehcache 구성 :

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
     <property name="configLocation"><value>classpath:ehcache.xml</value></property> 
    </bean> 
: 여기 CacheManager의 인스턴스를 얻기 위해 스프링을 사용하고

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

내 빈 정의입니다

오류는 다음과 같습니다 :

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

스택 추적이 주어지면 호출 스레드가 null MemoryStore가있는 캐시를보고있는 것으로 보입니다 (가능하지 않아야 함). CacheManager 작성 코드 (이중 선택 잠금) 또는 캐시 자체에서 메모리 가시성 문제 일 수 있다는 몰래 의심 스럽습니다. 우리는 Ehcache 1.7.1에 대한 많은 필드 가시성 문제를 강화했습니다 (아직 몇 주 안 만에).

이렇게하면 확실한 수정을하기는 어렵지 만 시동 중에 초기에 보장되는 스프링 초기화를 추가하는 것이 한 가지 진부한 아이디어 일 수 있습니다. 단 하나의 스레드 만 CacheManager를 생성했습니다. 그로 인해 문제가 사라지게된다면 위의 이론에 대한 믿음이 생길 것입니다.

관련 문제