WildFly8.2.0.Final、Hibernate、Infinispan:org.hibernate.cache.CacheException:不支持的访问类型 [读写]

Posted

技术标签:

【中文标题】WildFly8.2.0.Final、Hibernate、Infinispan:org.hibernate.cache.CacheException:不支持的访问类型 [读写]【英文标题】:WildFly8.2.0.Final, Hibernate, Infinispan: org.hibernate.cache.CacheException: Unsupported access type [read-write] 【发布时间】:2015-02-24 00:46:40 【问题描述】:

我正在尝试从运行良好的 ehcache 切换到“原生”Wildfly 的 Infinispan。我没有对 WildFly 的默认配置进行任何更改,我使用的是 hibernate 和 infinispan 内置模块。 我从基本的持久性配置开始,例如:

    <persistence-unit name="frmwrkjta" transaction-type="JTA">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:jboss/ds/frmwrkmysqljta</jta-data-source>

      <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode><!-- ALL, NONE, ENABLE_SELECTIVE,DISABLE_SELECTIVE, UNSPECIFIED -->
      <properties>
         <property name="shared-cache-mode" value="ENABLE_SELECTIVE" /> 
<!--         <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/> -->
         <property name="net.sf.ehcache.configurationResourceName" value="META-INF/ehcache-persistence.xml" />
         <property name="hibernate.cache.use_query_cache" value="true" />
         <property name="hibernate.cache.use_second_level_cache" value="true" />
         <property name="hibernate.generate_statistics" value="true" />
         <property name="hibernate.cache.infinispan.statistics" value="true" />
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<!--          <property name="hibernate.hbm2ddl.auto" value="update" /> -->
         <property name="hibernate.hbm2ddl.auto" value="validate" />
         <property name="hibernate.show_sql" value="true" />
         <property name="org.hibernate.envers.audit_table_suffix" value="_log" />
         <property name="org.hibernate.envers.revision_field_name" value="dbrevision_r" />
         <property name="org.hibernate.envers.revision_type_field_name" value="dbrevtype" />
      </properties>
    </persistence-unit>

后来我试图通过谷歌搜索添加属性...

第一个是我最喜欢的:

     <property name="hibernate.cache.default_cache_concurrency_strategy" value="read-only"/>

之后还使用所有可选值,例如transactionalread-onlynontrict read-write,甚至是read-write;)

然后:

     <property name="hibernate.cache.infinispan.container" value="hibernate"/>

稍后:

     <property name="hibernate.cache.region.factory_class" value="org.jboss.as.jpa.hibernate4.infinispan.SharedInfinispanRegionFactory" />

这一切都以失败的部署异常结束:

org.hibernate.cache.CacheException: Unsupported access type [read-write]

我在实体中仅使用 JPA 的 @Cacheable 注释...

我错过了什么,我做错了什么?

编辑:

不确定是否重要。我正在添加省略的 persistence.xml 开头...我正在尝试使用 JPA2.1:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1">

【问题讨论】:

【参考方案1】:

Infinispan Hibernate 2LC 仅支持read-onlytransactional 策略。我们计划添加read-writenon-strict-read-write,但我们还没有这样做。

应该不需要添加hibernate.cache.infinispan.containerhibernate.cache.region.factory_class 属性。

我建议您从这样的简单配置开始:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="frmwrkjta">
   <description>example of enabling the second level cache.</description>
   <jta-data-source>java:jboss/ds/frmwrkmysqljta</jta-data-source>
   <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
   <properties>
      <property name="hibernate.cache.use_second_level_cache" value="true"/>
   </properties>
</persistence-unit>
</persistence> 

然后根据需要添加属性,例如如果您需要...等,请启用查询缓存

【讨论】:

嗨 Galder,感谢您的回复...我将 persistence.xml 简化为最简单的可能(意味着与您建议的完全相同),结果相同...org.hibernate.cache.CacheException: Unsupported access type [read-write] 如何将读写更改为其他内容?我没有配置类似的东西,为什么它试图将其用作默认值?即使我设置&lt;property name="hibernate.cache.default_cache_concurrency_strategy" value="read-only"/&gt; 您是否使用了任何注释?也许他们正在定义缓存并发策略。是这样,还是在错误导入的代码或其他配置文件中进行了一些硬编码?通过调试器运行您的应用,看看它是从哪里来的? 我只使用 JPA 的 @javax.persistence.Cacheable 没有其他任何东西,这不会改变并发策略 AFAIK 嗯,只需从您的 IDE 中挂接远程调试器即可查看发生这种情况的原因。很奇怪……

以上是关于WildFly8.2.0.Final、Hibernate、Infinispan:org.hibernate.cache.CacheException:不支持的访问类型 [读写]的主要内容,如果未能解决你的问题,请参考以下文章

Wildfly:ExceptionMapper 未通过 RestEasy JSR-303 Bean 验证触发

“ java.lang.NoClassDefFoundError:javax / persistence / criteria / Selection”在JavaEE Maven项目中使用Hibern

初学Hibernate心得/

mybatis

Django

hibernate.cfg.xml