2013-04-29 6 views
9

Ich habe das folgende Problem.Ehcache Herunterfahren verursacht eine Ausnahme beim Ausführen von Testsuite

Ich habe einen Testanzug in meinem Projekt und jeder einzelne Test läuft gut.

jedoch, wenn ich sie als eine Suite betreibe ich einige von ihnen nicht mit der folgenden Ausnahme:

Caused by: java.lang.IllegalStateException: The dao Cache is not alive (STATUS_SHUTDOWN) 
    at net.sf.ehcache.Cache$CacheStatus.checkAlive(Cache.java:4269) 
    at net.sf.ehcache.Cache.checkStatus(Cache.java:2703) 
    at net.sf.ehcache.Cache.get(Cache.java:1576) 
    at org.springframework.cache.ehcache.EhCacheCache.get(EhCacheCache.java:61) 
    at org.springframework.cache.interceptor.CacheAspectSupport.inspectCacheables(CacheAspectSupport.java:310) 
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:198) 
    at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:66) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 

Gibt es eine Möglichkeit, dieses Verhalten zu vermeiden, also halten Sie den Cache am Leben über mehrere Test oder dem Herunterfahren richtig?

+2

Wie ist es möglich, im Testkontext die gemeinsame Eigenschaft auf false zu setzen, ist es möglich, ein Beispiel zu geben? –

Antwort

4

Versuchen Sie, die gemeinsame Eigenschaft im Testkontext auf EhCacheManagerFactoryBean oder EhCacheCacheManager auf false zu setzen.

+0

Das hat den Trick – genjosanzo

+0

Aber es ist auch möglich mit dieser Konfiguration? ' \t \t ' –

0

Dieses Problem tritt grundsätzlich auf, wenn Sie zwischen mehreren Anwendungen Cache zwischengespeichert. Versuchen Sie also nicht, Ihren Cache zu teilen, indem Sie die gemeinsame Eigenschaft auf false festlegen.

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

Aber bei der Ausführung werden Sie

Ein weiterer Cachemanager mit demselben Namen 'Cachemanager' existiert bereits in der gleichen VM begegnen. Illegal

, um dem entgegenzuwirken wir brauchen

<spring:property name="cacheManagerName" value="abc" />

Ich werde gelöst werden schließlich Ausgabe hoffen, ganz zu schweigen.

+0

Durch das Hinzufügen des Namens wird der 'cacheManager' nicht bereits in derselben VM gelöscht. IllegalStateException-Ausnahme – Sid

1

Eine separate Cache-Konfiguration nur für Tests erstellen! und setzen Sie den Bereich "Prototyp"

@Configuration 
@EnableCaching 
public class EhCacheConfig { 

@Bean(name = "cacheManager") 
@Scope("prototype") 
public CacheManager getCacheManager() { 
    return new EhCacheCacheManager(getEhCacheFactory().getObject()); 
} 

@Bean 
@Scope("prototype") 
public EhCacheManagerFactoryBean getEhCacheFactory() { 
    EhCacheManagerFactoryBean factoryBean = new EhCacheManagerFactoryBean(); 
    factoryBean.setConfigLocation(new ClassPathResource("ehcache.xml")); 
    factoryBean.setShared(true); 
    return factoryBean; 
} 
} 
Verwandte Themen