HHH-12531 Use short, simple names for the query result and update timestamps caching regions

This commit is contained in:
Yoann Rodière 2018-07-03 18:57:08 +02:00 committed by Guillaume Smet
parent 2649e1372c
commit 63cc63b386
5 changed files with 20 additions and 16 deletions

View File

@ -316,17 +316,19 @@ Just as with collection caching, the query cache should always be used in conjun
This setting creates two new cache regions: This setting creates two new cache regions:
`org.hibernate.cache.internal.StandardQueryCache`:: `default-query-results-region`::
Holding the cached query results Holding the cached query results
`org.hibernate.cache.spi.UpdateTimestampsCache`:: `default-update-timestamps-region`::
Holding timestamps of the most recent updates to queryable tables. Holding timestamps of the most recent updates to queryable tables.
These are used to validate the results as they are served from the query cache. These are used to validate the results as they are served from the query cache.
[IMPORTANT] [IMPORTANT]
==== ====
If you configure your underlying cache implementation to use expiration, it's very important that the timeout of the underlying cache region for the `UpdateTimestampsCache` is set to a higher value than the timeouts of any of the query caches. If you configure your underlying cache implementation to use expiration, it's very important
that the timeout of the underlying cache region for the `default-update-timestamps-region`
is set to a higher value than the timeouts of any of the query caches.
In fact, we recommend that the `UpdateTimestampsCache` region is not configured for expiration (time-based) or eviction (size/memory-based) at all. In fact, we recommend that the `default-update-timestamps-region` region is not configured for expiration (time-based) or eviction (size/memory-based) at all.
Note that an LRU (Least Recently Used) cache eviction policy is never appropriate for this particular cache region. Note that an LRU (Least Recently Used) cache eviction policy is never appropriate for this particular cache region.
==== ====

View File

@ -31,8 +31,8 @@ public class CacheableNaturalIdTest extends BaseEntityManagerFunctionalTestCase
@Override @Override
public void buildEntityManagerFactory() { public void buildEntityManagerFactory() {
JCacheHelper.locateStandardCacheManager().createCache( "org.hibernate.cache.spi.TimestampsRegion", new MutableConfiguration<>() ); JCacheHelper.locateStandardCacheManager().createCache( "default-update-timestamps-region", new MutableConfiguration<>() );
JCacheHelper.locateStandardCacheManager().createCache( "org.hibernate.cache.spi.QueryResultsRegion", new MutableConfiguration<>() ); JCacheHelper.locateStandardCacheManager().createCache( "default-query-results-region", new MutableConfiguration<>() );
JCacheHelper.locateStandardCacheManager().createCache( "org.hibernate.userguide.mapping.identifier.CacheableNaturalIdTest$Book##NaturalId", new MutableConfiguration<>() ); JCacheHelper.locateStandardCacheManager().createCache( "org.hibernate.userguide.mapping.identifier.CacheableNaturalIdTest$Book##NaturalId", new MutableConfiguration<>() );
// JCacheHelper.locateStandardCacheManager().createCache( "", new MutableConfiguration<>() ); // JCacheHelper.locateStandardCacheManager().createCache( "", new MutableConfiguration<>() );

View File

@ -78,7 +78,7 @@ public class EnabledCaching implements CacheImplementor, DomainDataRegionBuildin
if ( getSessionFactory().getSessionFactoryOptions().isQueryCacheEnabled() ) { if ( getSessionFactory().getSessionFactoryOptions().isQueryCacheEnabled() ) {
final TimestampsRegion timestampsRegion = regionFactory.buildTimestampsRegion( final TimestampsRegion timestampsRegion = regionFactory.buildTimestampsRegion(
TimestampsRegion.class.getName(), RegionFactory.DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME,
sessionFactory sessionFactory
); );
timestampsCache = sessionFactory.getSessionFactoryOptions() timestampsCache = sessionFactory.getSessionFactoryOptions()
@ -87,7 +87,7 @@ public class EnabledCaching implements CacheImplementor, DomainDataRegionBuildin
legacySecondLevelCacheNames.add( timestampsRegion.getName() ); legacySecondLevelCacheNames.add( timestampsRegion.getName() );
final QueryResultsRegion queryResultsRegion = regionFactory.buildQueryResultsRegion( final QueryResultsRegion queryResultsRegion = regionFactory.buildQueryResultsRegion(
QueryResultsRegion.class.getName(), RegionFactory.DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME,
sessionFactory sessionFactory
); );
regionsByName.put( queryResultsRegion.getName(), queryResultsRegion ); regionsByName.put( queryResultsRegion.getName(), queryResultsRegion );

View File

@ -31,6 +31,11 @@ import org.hibernate.service.spi.Stoppable;
* @author Steve Ebersole * @author Steve Ebersole
*/ */
public interface RegionFactory extends Service, Stoppable { public interface RegionFactory extends Service, Stoppable {
// These are names that users have to include in their caching configuration, do not change them
String DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME = "default-query-results-region";
String DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME = "default-update-timestamps-region";
/** /**
* Lifecycle callback to perform any necessary initialization of the * Lifecycle callback to perform any necessary initialization of the
* underlying cache provider. Called exactly once during the * underlying cache provider. Called exactly once during the

View File

@ -10,7 +10,6 @@ import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Stream; import java.util.stream.Stream;
import javax.cache.Cache; import javax.cache.Cache;
import javax.cache.CacheManager; import javax.cache.CacheManager;
@ -21,11 +20,9 @@ import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cache.jcache.JCacheHelper; import org.hibernate.cache.jcache.JCacheHelper;
import org.hibernate.cache.spi.QueryResultsRegion; import org.hibernate.cache.spi.RegionFactory;
import org.hibernate.cache.spi.TimestampsRegion;
import org.hibernate.cache.spi.support.RegionNameQualifier; import org.hibernate.cache.spi.support.RegionNameQualifier;
import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.Environment;
import org.hibernate.dialect.Dialect; import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.H2Dialect; import org.hibernate.dialect.H2Dialect;
import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionFactoryImplementor;
@ -70,8 +67,8 @@ public class TestHelper {
createCache( cacheManager, regionName, prefixCaches ); createCache( cacheManager, regionName, prefixCaches );
} }
createCache( cacheManager, TimestampsRegion.class.getName(), prefixCaches ); createCache( cacheManager, RegionFactory.DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME, prefixCaches );
createCache( cacheManager, QueryResultsRegion.class.getName(), prefixCaches ); createCache( cacheManager, RegionFactory.DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME, prefixCaches );
} }
public static SessionFactoryImplementor buildStandardSessionFactory() { public static SessionFactoryImplementor buildStandardSessionFactory() {
@ -187,8 +184,8 @@ public class TestHelper {
} }
if ( queryRegions ) { if ( queryRegions ) {
createCache( cacheManager, TimestampsRegion.class.getName(), prefixRegions ); createCache( cacheManager, RegionFactory.DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME, prefixRegions );
createCache( cacheManager, QueryResultsRegion.class.getName(), prefixRegions ); createCache( cacheManager, RegionFactory.DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME, prefixRegions );
} }
} }