Liferay 自定义实体缓存

Liferay custom entity caching

我正在使用 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/classes].

<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 文件.

由于我使用的是服务构建器,cache-enable="true" 是否足以缓存实体?

我使用Jconsole 来监控缓存命中率,但问题是缓存未命中率比缓存命中率高。以下是我的缓存统计数据:

任何帮助将不胜感激。

使用 liferay 服务构建器构建的服务默认启用缓存。

我认为上述 none 个步骤是必需的,因为缓存是默认启用的。

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

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

您可以为您的自定义实体打开*PersistenceImpl.java class来观察缓存代码。调试这个 class 可以让您详细了解为什么它没有命中缓存。

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