Java 冬眠&;EhCache:net.sf.EhCache.Statistics未填充?
我认为我的Hibernate(3.5.3)二级缓存已经配置好了EhCache(2.2) 至少,我观察到以下日志条目:Java 冬眠&;EhCache:net.sf.EhCache.Statistics未填充?,java,hibernate,jpa,jakarta-ee,ehcache,Java,Hibernate,Jpa,Jakarta Ee,Ehcache,我认为我的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.
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"/>
奇怪的是,这些调试语句确实意味着您正在访问持久性。unit:unitName=#pu-pay.c.u.p.model.Action缓存…我想知道您的CacheManager是否正确,是否Hibernate提供程序正在使用另一个实例
你的hibernate配置看起来如何?奇怪的是,这些调试语句确实意味着你对持久性有点击率。unit:unitName=#pu-pay.c.u.p.model.Action缓存…我想知道你的CacheManager是否正确,是否hibernate提供程序正在使用另一个实例
您的hibernate配置是什么样子的?Thx以获取回复。我没有hibernate配置。(它都是由persistence.xml和JPA注释驱动的。)我在原始问题中添加了persistence.xml片段。好的,因此您使用的是EhCacheRegionFactory,可能是您想要指定特定的ehcache配置文件,如果是这样,您应该设置net.sf.ehcache.configurationResourceName属性。否则,你要找的不是SingletoneCacheRegionFactory吗?你是如何获得cacheManager实例的?很抱歉响应太慢。。。CacheManager CacheManager=CacheManager.getInstance()。。。太明显了?:-)我认为您仍然希望使用SingletoneCacheRegionFactory来实现“正确性”,但这是您应该已经在做的事情,因为您没有正确配置eCacheRegionFactory……您是否可以进行更改并查看它是否有帮助。如果AICT不提供net.sf.ehcache.configurationResourceName道具,它会退回到SingletonEhCacheRegionFactory。是否hibernate是使用其他类加载器引导的?可能是我完全错了,但这感觉就像是两个不同的缓存管理器:你能通过编程方式命中缓存吗?是否记录了统计数据?请点击回复Alex。我没有hibernate配置。(它都是由persistence.xml和JPA注释驱动的。)我在原始问题中添加了persistence.xml片段。好的,因此您使用的是EhCacheRegionFactory,可能是您想要指定特定的ehcache配置文件,如果是这样,您应该设置net.sf.ehcache.configurationResourceName属性。否则,你要找的不是SingletoneCacheRegionFactory吗?你是如何获得cacheManager实例的?很抱歉响应太慢。。。CacheManager CacheManager=CacheManager.getInstance()。。。太明显了?:-)我认为您仍然希望使用SingletoneCacheRegionFactory来实现“正确性”,但这是您应该已经在做的事情,因为您没有正确配置eCacheRegionFactory……您是否可以进行更改并查看它是否有帮助。如果AICT不提供net.sf.ehcache.configurationResourceName道具,它会退回到SingletonEhCacheRegionFactory。是否hibernate是使用其他类加载器引导的?可能是我完全错了,但这感觉就像是两个不同的缓存管理器:你能通过编程方式命中缓存吗?有记录吗?