Liferay自定义实体缓存

时间:2015-04-11 06:19:00

标签: caching liferay ehcache

我正在使用liferay 6.1版本。

我使用服务构建器为portlet创建了自定义实体。我想缓存那些自定义实体。

我在 portal-ext.properties 中设置了以下属性以启用缓存。

ehcache.statistics.enabled=true
value.object.entity.cache.enabled=true
value.object.finder.cache.enabled=true

velocity.engine.resource.manager.cache.enabled=true
layout.template.cache.enabled=true

net.sf.ehcache.configurationResourceName=/custom_cache/hibernate-clustered.xml

log4j.logger.net.sf.ehcache=DEBUG
log4j.logger.net.sf.ehcache.config=DEBUG 
log4j.logger.net.sf.ehcache.distribution=DEBUG
log4j.logger.net.sf.ehcache.code=DEBUG

我创建了 ehcache.xml 文件来覆盖 ehcache-failsafe.xml 来配置我的自定义实体,以便它可以启用缓存。

我的 ehcache.xml 文件位于我的类路径 [classpath:liferay-portal-6.1.1-ce-ga2 / tomcat-7.0.27 / webapps / ROOT / WEB-INF /类]

<diskStore path="java.io.tmpdir/ehcache"/>

<defaultCache
        maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true"
        maxElementsOnDisk="10000000"
        diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120"
        memoryStoreEvictionPolicy="LRU"
        />

<cache
    eternal="false"
    maxElementsInMemory="10000"
    name="com.pr.test.model.impl.StudentImpl"
    overflowToDisk="false"
    timeToIdleSeconds="600"
    timeToLiveSeconds="300"
    statistics="true"
    copyOnRead="true"
    copyOnWrite="true"
    clearOnFlush="true"
    transactionalMode="off"
    />

在src路径 [/ docroot / WEB-INF / src] 下创建 hibernate-clustered.xml 文件,该文件与我的 ehcache.xml <相同/ strong>文件。

因为我正在使用服务构建器,所以cache-enable =&#34; true&#34;足以缓存实体?

我使用Jconsole来监控缓存命中率,但问题是缓存未命中率的百分比高于缓存命中率。以下是我的缓存统计信息:

cashing statistics![][1]

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

默认情况下,对使用liferay服务构建器构建的服务启用缓存。

我相信上面提到的步骤都不需要,因为默认启用了缓存。

默认portal.properties中的以下属性设置为true,并且适用于所有实体,而不仅适用于自定义实体。

value.object.entity.cache.enabled=true
value.object.finder.cache.enabled=true

您可以为自定义实体打开* PersistenceImpl.java类以观察缓存代码。调试此类可以为您提供有关其未达到缓存的原因的详细信息。

例如,使用缓存关闭参数调用API不会达到缓存。