Używam pamięci podręcznej z utrwalaniem magazynu dysków. Na kolejnych powtórek aplikacji Dostaję następujący błąd:Magazyn dysku Ehcache nieczytelne zamknięcie
net.sf.ehcache.store.DiskStore deleteIndexIfCorrupt
WARNING: The index for data file MyCache.data is out of date,
probably due to an unclean shutdown. Deleting index file MYCache.index
Czy istnieje jakiś sposób, aby ustalić, że oprócz wyraźnie nazywając net.sf.ehcache.CacheManager.shutdown()
gdzieś w aplikacji?
konfiguracja skrzynki:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="true" monitoring="autodetect">
<diskStore path="C:\work"/>
<cacheManagerEventListenerFactory class="" properties=""/>
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=automatic,
multicastGroupAddress=230.0.0.1,
multicastGroupPort=4446, timeToLive=1"
propertySeparator=","
/>
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>
<defaultCache
maxElementsInMemory="1"
eternal="false"
timeToIdleSeconds="0"
timeToLiveSeconds="86400"
overflowToDisk="true"
diskSpoolBufferSizeMB="1"
maxElementsOnDisk="10000"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LFU"
/>
</ehcache>
kod do replikowania problem:
import java.util.ArrayList;
import java.util.List;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
public class CacheTest {
static CacheManager manager = new CacheManager(CacheTest.class
.getResource("ehcache.xml"));
static Cache cache;
public static void main(String[] args) {
// Get a default instance
manager.addCache("test");
cache = manager.getCache("test");
// Generate some junk so that the
// cache properly flushes to disk
// as cache.flush() is not working
List<String> t = new ArrayList<String>();
for (int i = 0; i < 1000; i++)
t.add(null);
// Oddly enough fewer elements
// do not persist to disk or give
// an error
for (int i = 0; i < 100000; i++) {
cache.put(new Element(i, t));
}
cache.flush();
if (cache.get("key1") == null) {
System.out.println("key1 not found in cache!");
cache.put(new Element("key1", "value1"));
}
System.out.println(cache.get("key1"));
}
}
. Dzięki! :) – Tomasz