2013-04-29 8 views
9

次の問題が発生しています。テストスイートを実行しているときにEhcacheのシャットダウンで例外が発生しました

私のプロジェクトにはテストスーツがあり、個々のテストはうまく動作します。私はそれらのいくつかは、次の例外で失敗スイートとして、私はそれらを実行するとき

しかし:

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) 

は、この動作を回避する方法はあり、すなわち複数のテストや、それをシャットダウン渡って生きキャッシュを維持正しく?

+2

テストコンテキストで共有プロパティをfalseに設定する方法はありますか? –

答えて

4

テストコンテキストでEhCacheManagerFactoryBeanまたはEhCacheCacheManagerにsharedプロパティをfalseに設定しようとしました。

+0

それはやったよ – genjosanzo

+0

しかし、その設定でも可能ですか? \t \t <プロパティ名= "hibernate.cache.region.factory_class" value = "net.sf" .ehcache.hibernate.SingletonEhCacheRegionFactory "/>' –

0

この問題は、基本的に、複数のアプリケーション間でキャッシュが共有されるときに発生します。 共有プロパティをfalseに設定してキャッシュを共有しないようにしてください。

<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>

しかし、実行時に、あなたは

同じ名 'のCacheManager' は既に同じVM内に存在して別のCacheManagerが発生します。

はIllegalStateExceptionがこれに対抗するために、我々は、私は問題が解決されます最終的には期待し

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

を言及する必要があります。

+0

名前を追加しても、同じVM内に 'cacheManager'はすでに存在していますが削除されません。 IllegalStateException例外 – Sid

1

テスト専用のキャッシュ設定を作成してください!スコープを "プロトタイプ"に設定する

@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; 
} 
} 
関連する問題