Infinispan as Hibernate SLC: java.lang.UnsupportedOperationException: Illegal attempt to edit read only item
h3m3r Mar 17, 2013 11:42 AMHello,
I am trying to use Infinispan as Hibernate SLC instead of EHCache.
I have a lot of READ_ONLY entities (only for inserting) so I annotated entitities with:
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY).
@Immutable
@Entity
public class Message implements java.io.Serializable {}
And when some entity has immutable collention, I annotated getter with:
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
@Immutable
public Set<Tag> getTags() {}
This works perfectly with EHCache, but when I try to insert (em.persist) with Infinispan as SLC, I get:
java.lang.UnsupportedOperationException: Illegal attempt to edit read only item
at org.hibernate.cache.infinispan.collection.ReadOnlyAccess.lockItem(ReadOnlyAccess.java:25) [hibernate-infinispan-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.action.internal.CollectionAction.beforeExecutions(CollectionAction.java:101) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
My persistence.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="fis-messaging" transaction-type="JTA">
  <description>FIS Messaging Persistence Unit</description>
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <jta-data-source>java:jboss/datasources/FISMessagingDatasource</jta-data-source>
  <exclude-unlisted-classes>false</exclude-unlisted-classes>
  <properties>
  <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
  <property name="hibernate.hbm2ddl.auto" value="${hibernate.hbm2ddl.auto}"/>
  <property name="hibernate.show_sql" value="${hibernate.show_sql}"/>
  <property name="hibernate.format_sql" value="${hibernate.format_sql}"/>
  <property name="hibernate.transaction.flush_before_completion" value="true"/>
  <property name="hibernate.transaction.auto_close_session" value="true"/>
  <property name="hibernate.cache.use_second_level_cache" value="true" />
  
  </properties>
  </persistence-unit>
</persistence>
When I use CacheConcurrencyStrategy.TRANSACTIONAL it works wine. Am I doing something wrong or this is a bug?
Thanks for advice,
Vaclav Chalupa.
 
    