2010-07-14 2 views
1

Linux의 JDK 1.6.0_17에서 실행되는 Java 응용 프로그램이 있습니다. 나는 아주 간단한 ehcache.xml 파일을,으로 Ehcache 2.1.0을 사용하고 있습니다 :jvm restarts 후 ehcache 디스크 저장소가 무효화되는 이유는 무엇입니까?

private static final String CACHE_NAME = "APP"; 

public static void init() { 
    CacheManager.create(); 
    final CacheManager manager = CacheManager.getInstance(); 
    manager.addCache(CACHE_NAME); 
} 

private static Cache getCache() { 
    final CacheManager manager = CacheManager.getInstance(); 
    return manager.getCache(CACHE_NAME); 
} 

public static Object get(String key) { 
    final Cache cache = getCache(); 
    final Element element = cache.get(key); 
    return (element != null) ? element.getValue() : null; 
} 

private static void put(String key, Object value) { 
    final Cache cache = getCache(); 
    final Element element = new Element(key, value); 
    cache.put(element); 
} 
:

<diskStore path="/ext/ehcache"/> 
<defaultCache 
    overflowToDisk="true" 
    diskPersistent="true" 
    maxElementsInMemory="10000" 
    maxElementsOnDisk="1000000000" 
    eternal="true"> 
</defaultCache> 
내 자바 응용 프로그램에서

,이 코드를

디스크 저장소 파일 (/ ext/ehcache)을 제거하고 내 응용 프로그램을 시작하면 디스크 저장소 파일을 쓰는 중임을 알 수 있습니다. 앱이 실행될 때 파일에 "ls -l"을 수행하면 "ls -l"은 시간이 지남에 따라 파일 크기가 커지고 있음을 보여줍니다.

나는 "kill -15"(SIGTERM)을 사용하여 자바 애플리케이션을 멈춘다. 다음 자바 응용 프로그램을 다시 시작하고 확인을 시작할 것. Java 응용 프로그램은 ehcache에 데이터를 계속 저장하지만 오랜 시간 동안 디스크 저장소 파일은 커지지 않습니다. "ls -l"은 항상 동일한 파일 크기를 표시합니다. 몇 시간을 기다린 후 파일이 다시 커지기 시작합니다.

디스크 저장소의 모든 내용이 무효화되고 있으며 파일 내용이 다시 채워지고 있다고 생각합니다. 그렇다면 디스크 저장소의 모든 항목이 무효화되는 이유는 무엇입니까? 앱 재시작 사이에 해당 데이터를 계속 사용하고 싶습니다.

답변

4

CacheManager.shutdown()을 호출하는 것을 잊어 버리는 것으로 나타났습니다. 해당 통화를 추가하면 문제가 해결됩니다.

관련 문제