【问题标题】:Hibernate & EhCache: net.sf.ehcache.Statistics not populated?休眠和 EhCache:net.sf.ehcache.Statistics 未填充?
【发布时间】:2011-04-09 08:41:06
【问题描述】:

我认为我的 Hibernate (3.5.3) 二级缓存已经很好地配置了 EhCache (2.2)。

至少,我观察到以下日志条目:

20:15:28 DEBUG [net.sf.ehcache.Cache#searchInStoreWithStats] persistence.unit:unitName=#pu-pay.c.u.p.model.ActionCache: persistence.unit:unitName=#pu-pay.c.u.p.model.Action store hit for c.u.p.model.Action#TRT    
20:15:28 DEBUG [net.sf.ehcache.Cache#searchInStoreWithStats] persistence.unit:unitName=#pu-pay.c.u.p.model.ActionCache: persistence.unit:unitName=#pu-pay.c.u.p.model.Action store hit for c.u.p.model.Action#PID

...这些“存储命中”真的表明缓存正在工作吗?

现在让我困惑的是:

当我按如下方式检查统计数据时:

cacheManager.getCache("persistence.unit:unitName=#pu-pay.c.u.p.model.Action").getStatistics().toString()

...我看到的只是:

 name = persistence.unit:unitName=#pu-pay.c.u.p.model.Action cacheHits = 0 onDiskHits = 0 inMemoryHits = 0 misses = 0 size = 0 averageGetTime = 0.0 evictionCount = 0

...没有命中,没有未命中,...没有...

ehcache.xml,我有:

   <defaultCache
        ...
        statistics="true"
        ...
        />

   <cache
        name="persistence.unit:unitName=#pu-pay.c.u.p.model.Action"
        maxElementsInMemory="100"
        eternal="true"
        timeToIdleSeconds="300"
        timeToLiveSeconds="600"
        overflowToDisk="false"
        statistics="true"
        />

这会给任何人敲响警钟吗?我是否也必须在其他位置启用统计信息? ...


更新:

persistence.xml 指定:

        <property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.EhCacheRegionFactory"/>
        <property name="hibernate.cache.use_query_cache" value="false"/>
        <property name="hibernate.cache.use_second_level_cache" value="true"/>
        <property name="hibernate.generate_statistics" value="true"/>

【问题讨论】:

    标签: java hibernate jpa jakarta-ee ehcache


    【解决方案1】:

    确实很奇怪,这些调试语句确实意味着您正在访问 ersistence.unit:unitName=#pu-pay.cupmodel.Action 缓存...我想知道您的 CacheManager 是否正确,它可能是 Hibernate Provider正在使用另一个实例?

    你的休眠配置是什么样的?

    【讨论】:

    • 感谢 Alex 的回复。我没有休眠配置。 (这都是由 persistence.xml 和 JPA 注释驱动的。)我在原始问题中添加了 persistence.xml sn-p。
    • 对,所以你使用的是 EhCacheRegionFactory,可能你想指定一个特定的 ehcache 配置文件,如果是这样,你应该设置 net.sf.ehcache.configurationResourceName 属性。否则,您要找的不是 SingletonEhCacheRegionFactory 吗?
    • 你如何获得那个 cacheManager 实例?
    • 抱歉响应慢... CacheManager cacheManager = CacheManager.getInstance(); ……太明显了? :-)
    • 我认为您仍然希望使用 SingletonEhCacheRegionFactory 来实现“正确性”,但这就是您应该已经在做的事情,因为您没有正确配置 EhCacheRegionFactory ...您仍然可以进行更改吗?看看它是否有帮助。 AFAICT,不提供 net.sf.ehcache.configurationResourceName 道具,它会回退到 SingletonEhCacheRegionFactory。难道是休眠是使用其他类加载器引导的吗?可能是我完全错了,但这感觉就像 2 个不同的 CacheManagers:你也可以通过编程方式访问缓存吗?是否记录统计数据?
    猜你喜欢
    • 1970-01-01
    • 2011-12-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多