4

私のgrailsアプリケーションでは、すべてのリージョンからの 2 次キャッシュの現在のすべてのエントリを表示したいと考えています。

私のコードは次のとおりです:

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

ただし、リージョン名がそうでない 限り、すべてが正常に機能しますorg.hibernate.cache.StandardQueryCache(リージョンはQuery Cacheに使用されます)。その場合、例外がスローされます。

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

グーグルで調べてみたところ、地域とに関連付けられたキャッシュされたクエリ結果セットのエントリのリストを表示する方法についての手がかりが見つかりませんでした。StandardQueryCacheUpdateTimestampsCache

この問題の解決策を教えてください。

4

1 に答える 1

3

かなり複雑ですが、これでさらに先に進むことができます。SessionFactory を介してクエリ キャッシュにアクセスできるため、('def sessionFactory' などを介して) アクセスできると仮定すると、次のように基になるキャッシュにアクセスできます。

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
}

値は長い値のリストになることに注意してください。最初の値が何を意味するのかわかりませんが (5219682970079232 などの大きな値です)、残りはキャッシュされたドメイン クラス インスタンスの ID です。

于 2010-05-20T06:25:07.613 に答える