Pregunta

griales aplicación, quiero pantalla todas las entradas actuales del segundo nivel caché de todas las regiones .

Mi código es el siguiente:

def getCacheStats() {
  StatisticsImpl stats = sessionFactory.statistics
  for (regionName in stats.secondLevelCacheRegionNames) {
    log.debug stats.getSecondLevelCacheStatistics(regionName).entries
  }
}

Sin embargo todo funciona bien siempre y cuando el nombre de la región no org.hibernate.cache.StandardQueryCache (región usada para caché de consultas ). En ese caso, se produce una excepción:

java.lang.ClassCastException: org.hibernate.cache.QueryKey cannot be cast to org.hibernate.cache.CacheKey

Tener alrededor de google, que no encontró ninguna pista sobre cómo mostrar la lista de entradas de los conjuntos de resultados de consultas en caché asociado con regiones StandardQueryCache y UpdateTimestampsCache.

¿Podrían ayudarme a encontrar una solución para esto?

¿Fue útil?

Solución

Es bastante complicado, pero esto debe obtener aún más. Puede acceder a la caché de consultas a través de la SessionFactory, por lo que suponiendo que tiene acceso a esa (por ejemplo a través de 'def sessionFactory'), entonces se puede llegar a las cachés subyacentes como esto:

def cache = sessionFactory.queryCache
def realCache = cache.region.@underlyingCache.backingCache
def keys = realCache.keys
for (key in keys) {
    def value = realCache.get(key).value
    // do something with the value
}

Tenga en cuenta que los valores serán una lista de valores largos. No estoy seguro de lo que significa la primera de ellas (que es un valor grande, por ejemplo 5219682970079232), pero el resto son los ID de las instancias de la clase de dominio en caché.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top