2012-06-06 18 views
5

Chociaż wydaje mi się, że jest to bardzo mało prawdopodobne - ale czy istnieje sposób na wyczyszczenie ehcache bez restartowania serwera? Potrzebuję wyczyścić pamięć podręczną dla niektórych testów - nie mogę zmienić kodu i nie mogę pozwolić sobie na ponowne uruchamianie serwera wiele razy.Jak wyczyścić ehcache bez restartu serwera

PS: Używam apache-tomcat-5.5.25 Proszę dać mi znać. Dzięki, psvm

+0

To jest pytanie serwera, więc serwer serverfault.com Ci odpowiada. – Raptor

+0

Dlaczego nie możesz zrestartować serwera? Wygląda na to, że testujesz na sprzęcie na żywo lub na bardzo ograniczonym zestawie platform, który przerywa testową izolację i może unieważnić twoje testy. Dopóki twoje rozmieszczenie nie jest olbrzymie bizantyjskie, sugerowałbym posiadanie izolowanych zestawów, Tomcat nie jest tak naprawdę cholernym świstakiem po wyjęciu z pudełka. –

Odpowiedz

5

Czy narażasz Ehcache poprzez JMX? Następnie możesz wyczyścić pamięć podręczną za pomocą operacji JMX, używając narzędzia takiego jak np. jvisualvm. Wyszukaj komponenty MBean, takie jak net.sf.ehcache.CacheManager, które zapewniają operację clearAll().

+0

Jestem ciekawy, czy JMX ujawnia sposób wyczyszczenia określonej pamięci podręcznej, a nie wszystkich, co jest osiągane przez clearAll() –

0

za pomocą sprężyny + hibernacji i ekspozycję MBean:

import org.hibernate.Cache; 
import org.hibernate.SessionFactory; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Component; 

import javax.annotation.Resource; 

@Component("CacheManagerMBean") 
public class CacheManagerMBean { 

    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(CacheManagerMBean.class); 

    @Resource(name = "sessionFactory") 
    private SessionFactory sessionFactory; 

    public void clearCache() { 
     Cache cache = sessionFactory.getCache(); 
     if (null != cache) { 
      logger.info("Clearing cache..."); 
      cache.evictAll(); 
      cache.evictAllRegions(); 
      logger.info("Clearing cache...Done!"); 
     } else { 
      logger.error("No second level cache available for session-factory"); 
     } 
    } 

} 

XML konfiguracji:

<bean id="jmxExporterCacheManagerMBean" class="org.springframework.jmx.export.MBeanExporter"> 
     <property name="beans"> 
      <map> 
       <entry key="CacheManager:type=SecondLevelCacheManager"> 
        <ref bean="CacheManagerMBean"/> 
       </entry> 
      </map> 
     </property> 
    </bean> 

, a następnie połączyć z procesem Java z wykorzystaniem JConsole i użyć metody MBean wywołanie - aby skasować drugą pamięć podręczną poziomu !

Powiązane problemy