2012-06-06 22 views
5

Anche se penso che sia altamente improbabile - ma c'è un modo per svuotare l'ehcache senza riavviare il server? Ho bisogno di cancellare la cache per alcuni test - Non posso cambiare il codice e non posso permettermi di riavviare il server più volte.Come cancellare ehcache senza riavvio del server

PS: sto usando apache-tomcat-5.5.25 Per favore fatemi sapere. Grazie, psvm

+0

questa è una domanda del server, quindi serverfault.com è adatto a te. – Raptor

+0

Perché non è possibile riavviare il server? Sembra che tu stia provando su hardware live o su un set molto ristretto di rig, il che interrompe l'isolamento del test e potrebbe invalidare i test. A meno che la distribuzione non sia enormemente bizantina, suggerirei di avere piattaforme rigide isolate, Tomcat non è esattamente una risorsa da scartare. –

risposta

5

Esporre Ehcache tramite JMX? Quindi puoi cancellare la cache usando le operazioni JMX usando uno strumento come ad es. jvisualvm. Cerca MBeans come net.sf.ehcache.CacheManager che forniscono un'operazione clearAll().

+0

Sono curioso di sapere se JMX espone un modo per cancellare una cache specifica e non tutti, cosa che si ottiene con clearAll() –

0

Utilizzando primavera + hibernate e mbean espongono:

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 di configurazione:

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

E quindi connettersi al processo Java utilizzando JConsole e utilizzare il metodo Mbean invocazione - per cancellare la cache di secondo livello !