2015-04-29 14 views
7

ho questa configurazione XML EHCache:Come rimuovere l'EHCache WARN messaggi quando si utilizza Hibernate

<ehcache> 
    <defaultCache 
      maxElementsInMemory="10000" 
      eternal="false" 
      timeToIdleSeconds="120" 
      timeToLiveSeconds="120" 
      overflowToDisk="false" 
      diskSpoolBufferSizeMB="30" 
      diskPersistent="false" 
      diskExpiryThreadIntervalSeconds="120" 
      memoryStoreEvictionPolicy="LRU" 
      /> 
</ehcache> 

E inoltre, ho alcuni pacchetti con entità (circa 150). Se schiero la mia applicazione sul server Tomcat, c'è un sacco WARN messaggi nel registro:

2015-04-29 11:59:02,712 [RMI TCP Connection(3)-127.0.0.1] WARN org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory - HHH020003: Could not find a specific ehcache configuration for cache named [com.company.project.entity.package.MyEntity]; using defaults.

posso scrivere di configurazione per ogni entità -

<cache name="com.company.project.entity.package.MyEntity" 
         maxEntriesLocalHeap="50" 
         eternal="false" 
         overflowToDisk="false" 
        timeToLiveSeconds="120"> 
       <persistence strategy="localTempSwap"/> 
     </cache> 

Ma in questo modo, il mio file di configurazione di diventare troppo grande (1600 file). Penso che esista un altro modo per impostare la configurazione di default per ogni entità e uccidere i messaggi di avviso, ma non so come farlo. Se qualcuno lo sa, per favore aiutatemi. Grazie molto.

+0

Hai visto questa domanda che sembra descrivere lo stesso avviso che vedi? http://stackoverflow.com/questions/19280073/hibernate-in-multi-module-maven-project-could-not-find-specific-ehcache-config – Bobulous

+0

due soluzioni, 1/kill il log (utilizzando log config) o 2/definire una configurazione ehcache per ciascuna entità –

+1

Avviso 'HHH020003' è menzionato [qui] (https://hahamo.wordpress.com/2014/12/02/ehcache-and-java-ee-6/) e si potrebbe prova la soluzione menzionata (imposta in persistence.xml ''). – vanOekel

risposta

6

Questo è il codice di Hibernate EHCache Regione cache che registra il messaggio di avviso:

private Ehcache getCache(String name) throws CacheException { 
    try { 
     Ehcache cache = manager.getEhcache(name); 
     if (cache == null) { 
      LOG.unableToFindEhCacheConfiguration(name); 
      manager.addCache(name); 
      cache = manager.getEhcache(name); 
      LOG.debug("started EHCache region: " + name); 
     } 
     HibernateEhcacheUtils.validateEhcache(cache); 
     return cache; 
    } 
    catch (net.sf.ehcache.CacheException e) { 
     throw new CacheException(e); 
    } 

} 

Come si può vedere, si hanno due opzioni:

  1. O si dichiara la regione della cache nella ehcache.xml file.
  2. si imposta la 'org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory' livello di log di errore:

    Per Log4j2:

    <Logger name="org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory" level="error"> 
        <AppenderRef ref="File"/> 
    </Logger> 
    
0

Un'opzione potrebbe essere quella di creare un'entità di base CacheObject e configurarla come oggetto cache.

Non è la soluzione più pulita ma rimuove gli avvisi senza aggiungere una grande quantità di configurazione.

Come l'avvertimento è proprio questo, un avviso personalmente lo configurerei semplicemente per non mostrare.

+0

buona idea, ma sfortunatamente sono a casa per ora. In modesto lo testerò, spero che funzionerà. – degr

+0

Nessun uomo, questo non funziona. – degr

Problemi correlati