2011-03-10 12 views
13

मुझे कोई समस्या है जहां net.sf.ehcache.CacheManager अमान्य आंकड़े लौटाता है।गलत ehcache आंकड़े: हिट + मिस == 0

मैं ehcache-core v2.3.2 (नवीनतम संस्करण) ehcache-spring-annotations के साथ उपयोग कर रहा हूं।

समस्या है कि getMemoryStoreObjectCount रिटर्न वस्तु जबकि दोनों getCacheHits और getCacheMisses रिटर्न । कुल गणना hits + misses होने की संख्या नहीं है?

नीचे इकाई परीक्षण समस्या उदाहरण देकर स्पष्ट करना चाहिए (यह एक खाली डेटाबेस पर लागू की गई):

स्प्रिंग config

:

@Test 
public void testCache() { 
    Entity e = .. 
    dao.storeEntity(e); 
    dao.getEntity(e); 
    assertEquals(1, cache.getStatistics().getMemoryStoreObjectCount()); // ok 
    assertEquals(0, cache.getStatistics().getCacheHits()); // ok 
    assertEquals(1, cache.getStatistics().getCacheMisses()); // fails due to 0 

} 

पूर्णता के लिए मैं सभी आवश्यक विन्यास शामिल

<ehcache:annotation-driven cache-manager="ehCacheManager" /> 
<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> 
    <property name="configLocation" value="classpath:ehcache.xml"/> 
</bean> 

ehcache.xml

<ehcache> 
    <defaultCache eternal="false" maxElementsInMemory="1000" 
     overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" 
     timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU"/> 
</ehcache> 

दाव

@Cacheable([email protected](name="StringCacheKeyGenerator")) 
public Entity getEntity(Serializable key) { 
    return // sql ... 
} 
+0

हाय, क्या आप अपने कोड को स्प्रिंग कॉन्फ़िगरेशन से अपने जुनीट परीक्षण में "कैश" चर कैसे प्राप्त करते हैं, इस बारे में पोस्ट करना चाहते हैं? – Dave

उत्तर

14

मिले net.sf.ehcache.hibernate.EhCache में निम्नलिखित गुण सेट करके समस्या का समाधान:

cache.setStatisticsEnabled(true); 
    cache.setStatisticsAccuracy(Statistics.STATISTICS_ACCURACY_GUARANTEED); 
+1

शायद दूसरा आवश्यक नहीं है। – Bozho

+0

@ बोझो, शायद नहीं, लेकिन परीक्षण में इससे कोई फर्क नहीं पड़ता। –

+0

हां। मैंने सोचा कि यह उल्लेख करने लायक है। वैसे भी, मेरे लिए बनाया गया जवाब, तो +1। – Bozho

15

जोड़े आँकड़े = "true" अपने ehcache.xml को, आमतौर पर आपके कोड के बाहर अपने कॉन्फ़िगरेशन परिवर्तन को रखना बेहतर होता है।

<ehcache> 
    <defaultCache ... statistics="true" /> 
... 
</ehcache> 
5

<defaultCache ... statistics="true" /> पुराने तरीके के साथ विपरीत में बहुत काम करता है cache.setStatisticsEnabled (सही); जिसे ehcache (कोर और आदि) के निचले संस्करण की आवश्यकता है।

संबंधित मुद्दे