From fe7a5d74c5611a96af8cd443202c09e5d573c49a Mon Sep 17 00:00:00 2001 From: Strong Liu Date: Thu, 31 May 2012 00:53:21 +0800 Subject: [PATCH] HHH-7350 read-only entities can not be deleted from 2LC --- .../org/hibernate/ejb/test/lock/LockTest.java | 2 +- .../infinispan/entity/ReadOnlyAccess.java | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/entity/ReadOnlyAccess.java diff --git a/hibernate-entitymanager/src/matrix/java/org/hibernate/ejb/test/lock/LockTest.java b/hibernate-entitymanager/src/matrix/java/org/hibernate/ejb/test/lock/LockTest.java index b984ce03cc52..e27391f3018a 100644 --- a/hibernate-entitymanager/src/matrix/java/org/hibernate/ejb/test/lock/LockTest.java +++ b/hibernate-entitymanager/src/matrix/java/org/hibernate/ejb/test/lock/LockTest.java @@ -60,7 +60,7 @@ public void testLockTimeoutASNamedQueryHint(){ Query query = em.createNamedQuery( "getAll" ); query.setLockMode( LockModeType.PESSIMISTIC_READ ); int timeout = ((QueryImpl)(((org.hibernate.ejb.QueryImpl)query).getHibernateQuery())).getLockOptions().getTimeOut(); - assertEquals( 3, timeout ); + assertEquals( 3000, timeout ); } @Override diff --git a/hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/entity/ReadOnlyAccess.java b/hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/entity/ReadOnlyAccess.java new file mode 100644 index 000000000000..b5724117ab6d --- /dev/null +++ b/hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/entity/ReadOnlyAccess.java @@ -0,0 +1,32 @@ +package org.hibernate.cache.infinispan.entity; + +import org.hibernate.cache.CacheException; +import org.hibernate.cache.spi.access.SoftLock; + +/** + * A specialization of {@link TransactionalAccess} that ensures we never update data. Infinispan + * access is always transactional. + * + * @author Chris Bredesen + * @author Galder ZamarreƱo + * @since 3.5 + */ +class ReadOnlyAccess extends TransactionalAccess { + + ReadOnlyAccess(EntityRegionImpl region) { + super(region); + } + + @Override + public boolean update(Object key, Object value, Object currentVersion, + Object previousVersion) throws CacheException { + throw new UnsupportedOperationException("Illegal attempt to edit read only item"); + } + + @Override + public boolean afterUpdate(Object key, Object value, Object currentVersion, + Object previousVersion, SoftLock lock) throws CacheException { + throw new UnsupportedOperationException("Illegal attempt to edit read only item"); + } + +} \ No newline at end of file