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"/>
之后还使用所有可选值,例如transactional
、read-only
、nontrict 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-only
和transactional
策略。我们计划添加read-write
和non-strict-read-write
,但我们还没有这样做。
应该不需要添加hibernate.cache.infinispan.container
或hibernate.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]
如何将读写更改为其他内容?我没有配置类似的东西,为什么它试图将其用作默认值?即使我设置<property name="hibernate.cache.default_cache_concurrency_strategy" value="read-only"/>
您是否使用了任何注释?也许他们正在定义缓存并发策略。是这样,还是在错误导入的代码或其他配置文件中进行了一些硬编码?通过调试器运行您的应用,看看它是从哪里来的?
我只使用 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