使用Hibernate,EhCache和Wildlfy设置L2缓存的参数

时间:2016-02-17 23:45:35

标签: java hibernate wildfly ehcache

我有使用Hibernate和EhCache作为二级缓存提供程序的应用程序。该应用程序部署在Wildfly 8.2上。 二级缓存已配置并按预期工作,但我无法弄清楚如何以通用方式为echache.xml配置中的二级缓存提供单独的配置。目前我的设置如下:

Entitiy:

B.lm <- lm(B ~ A) 
log.A <- as.data.frame(log(A)) 
predict(B.lm,log.A, interval="predict")

pesistence.xml

     /**
     * The Country class
     */
    @Entity
    @Table(name = "country")
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "ENTITY_L2_CACHE")
    public class Country extends AbstractPersistentEntity {}

和ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="app_PU" transaction-type="JTA">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>jdbc/app</jta-data-source>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.enable_lazy_load_no_trans" value="true"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/>
            <property name="hibernate.transaction.jta.platform" value="com.torqueits.pos.jpa.ProxyJtaPlatform"/>
            <!-- enabling L2 cache -->
            <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
            <property name="hibernate.generate_statistics" value ="false" /> 
            <property name="hibernate.cache.use_second_level_cache" value="true"/>
            <property name="hibernate.cache.use_query_cache" value="false"/>
            <property name="hibernate.cache.ehcache.statistics" value="false"/>
            <property name="hibernate.generate_statistics" value="false"/>
        </properties>
    </persistence-unit>
</persistence>

虽然我将实体配置为使用ENTITY_L2_CACHCE作为二级缓存的区域,但hibernate使用的实际名称是

  

application.war#app_PU.ENTITY_L2_CACHE

使用部署名称和持久性单元名称作为区域的前缀。我无法控制部署名称,所以我不能将'application.war#app_PU.ENTITY_L2_CACHE'放入ehcache.xml。我不确定这是否与hibernate或wildfly服务器有关。

是否有任何方法可以为未绑定到特定部署名称的二级缓存配置参数?

1 个答案:

答案 0 :(得分:0)

看着

org.hibernate.cfg.AvailableSettings

课,我找到了

'hibernate.cache.region_prefix'

控制缓存区域前缀的参数。因此,为了克服这个问题,我需要配置一些前缀,然后在ehCache.xml配置文件中使用这个前缀进行L2缓存。

该参数应在persistence.xml文件中设置:

<property name="hibernate.cache.region_prefix" value="com.example.app"/>