/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.jpa.test.cacheable.annotation; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import javax.persistence.EntityManagerFactory; import javax.persistence.SharedCacheMode; import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.cache.internal.NoCachingRegionFactory; import org.hibernate.cache.spi.access.AccessType; import org.hibernate.cfg.Environment; import org.hibernate.jpa.AvailableSettings; import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl; import org.hibernate.jpa.boot.spi.Bootstrap; import org.hibernate.jpa.test.PersistenceUnitInfoAdapter; import org.hibernate.mapping.PersistentClass; import org.hibernate.testing.cache.CachingRegionFactory; import org.hibernate.testing.junit4.BaseUnitTestCase; import org.junit.After; import org.junit.Test; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; /** * this is hacky transient step until EMF building is integrated with metamodel * * @author Steve Ebersole */ public class ConfigurationTest extends BaseUnitTestCase { private EntityManagerFactory emf; @After public void tearDown(){ if(emf != null){ emf.close(); } } @Test public void testSharedCacheModeNone() { MetadataImplementor metadata = buildMetadata( SharedCacheMode.NONE ); PersistentClass pc = metadata.getEntityBinding( ExplicitlyCacheableEntity.class.getName() ); assertNull( pc.getCacheConcurrencyStrategy() ); pc = metadata.getEntityBinding( ExplicitlyNonCacheableEntity.class.getName() ); assertNull( pc.getCacheConcurrencyStrategy() ); pc = metadata.getEntityBinding( NoCacheableAnnotationEntity.class.getName() ); assertNull( pc.getCacheConcurrencyStrategy() ); } @Test public void testSharedCacheModeUnspecified() { MetadataImplementor metadata = buildMetadata( SharedCacheMode.UNSPECIFIED ); PersistentClass pc = metadata.getEntityBinding( ExplicitlyCacheableEntity.class.getName() ); assertNull( pc.getCacheConcurrencyStrategy() ); pc = metadata.getEntityBinding( ExplicitlyNonCacheableEntity.class.getName() ); assertNull( pc.getCacheConcurrencyStrategy() ); pc = metadata.getEntityBinding( NoCacheableAnnotationEntity.class.getName() ); assertNull( pc.getCacheConcurrencyStrategy() ); } @Test public void testSharedCacheModeAll() { MetadataImplementor metadata = buildMetadata( SharedCacheMode.ALL ); PersistentClass pc = metadata.getEntityBinding( ExplicitlyCacheableEntity.class.getName() ); assertNotNull( pc.getCacheConcurrencyStrategy() ); pc = metadata.getEntityBinding( ExplicitlyNonCacheableEntity.class.getName() ); assertNotNull( pc.getCacheConcurrencyStrategy() ); pc = metadata.getEntityBinding( NoCacheableAnnotationEntity.class.getName() ); assertNotNull( pc.getCacheConcurrencyStrategy() ); } @Test public void testSharedCacheModeEnable() { MetadataImplementor metadata = buildMetadata( SharedCacheMode.ENABLE_SELECTIVE ); PersistentClass pc = metadata.getEntityBinding( ExplicitlyCacheableEntity.class.getName() ); assertNotNull( pc.getCacheConcurrencyStrategy() ); pc = metadata.getEntityBinding( ExplicitlyNonCacheableEntity.class.getName() ); assertNull( pc.getCacheConcurrencyStrategy() ); pc = metadata.getEntityBinding( NoCacheableAnnotationEntity.class.getName() ); assertNull( pc.getCacheConcurrencyStrategy() ); } @Test public void testSharedCacheModeDisable() { MetadataImplementor metadata = buildMetadata( SharedCacheMode.DISABLE_SELECTIVE ); PersistentClass pc = metadata.getEntityBinding( ExplicitlyCacheableEntity.class.getName() ); assertNotNull( pc.getCacheConcurrencyStrategy() ); pc = metadata.getEntityBinding( ExplicitlyNonCacheableEntity.class.getName() ); assertNull( pc.getCacheConcurrencyStrategy() ); pc = metadata.getEntityBinding( NoCacheableAnnotationEntity.class.getName() ); assertNotNull( pc.getCacheConcurrencyStrategy() ); } @SuppressWarnings("unchecked") private MetadataImplementor buildMetadata(SharedCacheMode mode) { Map settings = new HashMap(); settings.put( AvailableSettings.SHARED_CACHE_MODE, mode ); settings.put( Environment.CACHE_REGION_FACTORY, CustomRegionFactory.class.getName() ); settings.put( AvailableSettings.LOADED_CLASSES, Arrays.asList( ExplicitlyCacheableEntity.class, ExplicitlyNonCacheableEntity.class, NoCacheableAnnotationEntity.class ) ); PersistenceUnitInfoAdapter adapter = new PersistenceUnitInfoAdapter(); final EntityManagerFactoryBuilderImpl emfb = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( adapter, settings ); emf = emfb.build(); return emfb.getMetadata(); } public static class CustomRegionFactory extends CachingRegionFactory { public CustomRegionFactory() { } @Override public AccessType getDefaultAccessType() { return AccessType.READ_WRITE; } } }