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 不会命中缓存。
我正在使用 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 不会命中缓存。