protected QueryResultsCache makeQueryResultsRegionAccess(String regionName) { final QueryResultsRegion region = (QueryResultsRegion) regionsByName.computeIfAbsent( regionName, this::makeQueryResultsRegion ); final QueryResultsCacheImpl regionAccess = new QueryResultsCacheImpl( region, timestampsCache ); namedQueryResultsCacheMap.put( regionName, regionAccess ); legacySecondLevelCacheNames.add( regionName ); return regionAccess; }
@Override public List get( QueryKey key, Set<Serializable> spaces, final Type[] returnTypes, SharedSessionContractImplementor session) { return get( key, QuerySpacesHelper.INSTANCE.toStringArray( spaces ), returnTypes, session ); }
private static void logCachedResultRowDetails(Type[] returnTypes, Object result) { logCachedResultRowDetails( returnTypes, ( result instanceof Object[] ? (Object[]) result : new Object[] { result } ) ); }
@Override @SuppressWarnings({ "unchecked" }) public List get( final QueryKey key, final Set<String> spaces, final SharedSessionContractImplementor session) throws HibernateException { if ( DEBUGGING ) { LOG.debugf( "Checking cached query results in region: %s", cacheRegion.getName() ); } final CacheItem cacheItem = getCachedData( key, session ); if ( cacheItem == null ) { if ( DEBUGGING ) { LOG.debug( "Query results were not found in cache" ); } return null; } if ( !timestampsCache.isUpToDate( spaces, cacheItem.timestamp, session ) ) { if ( DEBUGGING ) { LOG.debug( "Cached query results were not up-to-date" ); } return null; } if ( DEBUGGING ) { LOG.debug( "Returning cached query results" ); } return deepCopy( cacheItem.results ); }
final CacheItem cacheItem = getCachedData( key, session ); if ( cacheItem == null ) { if ( DEBUGGING ) { return assembleCachedResult( key, cacheItem.results, singleResult, returnTypes, session );
logCachedResultRowDetails( returnTypes, aResult ); logCachedResultDetails( key, null, returnTypes, resultsCopy );
@Override @SuppressWarnings({ "unchecked" }) public boolean put( final QueryKey key, final List results, final SharedSessionContractImplementor session) throws HibernateException { if ( DEBUGGING ) { LOG.debugf( "Caching query results in region: %s; timestamp=%s", cacheRegion.getName(), session.getTransactionStartTimestamp() ); } final CacheItem cacheItem = new CacheItem( session.getTransactionStartTimestamp(), deepCopy( results ) ); try { session.getEventListenerManager().cachePutStart(); cacheRegion.putIntoCache( key, cacheItem, session ); } finally { session.getEventListenerManager().cachePutEnd(); } return true; }
@Override @SuppressWarnings({ "unchecked" }) public List get( final QueryKey key, final String[] spaces, final SharedSessionContractImplementor session) throws HibernateException { if ( DEBUGGING ) { LOG.debugf( "Checking cached query results in region: %s", cacheRegion.getName() ); } final CacheItem cacheItem = getCachedData( key, session ); if ( cacheItem == null ) { if ( DEBUGGING ) { LOG.debug( "Query results were not found in cache" ); } return null; } if ( !timestampsCache.isUpToDate( spaces, cacheItem.timestamp, session ) ) { if ( DEBUGGING ) { LOG.debug( "Cached query results were not up-to-date" ); } return null; } if ( DEBUGGING ) { LOG.debug( "Returning cached query results" ); } return deepCopy( cacheItem.results ); }
public EnabledCaching(SessionFactoryImplementor sessionFactory) { this.sessionFactory = sessionFactory; this.regionFactory = getSessionFactory().getSessionFactoryOptions().getServiceRegistry().getService( RegionFactory.class ); this.regionFactory.start( sessionFactory.getSessionFactoryOptions(), sessionFactory.getProperties() ); if ( getSessionFactory().getSessionFactoryOptions().isQueryCacheEnabled() ) { final TimestampsRegion timestampsRegion = regionFactory.buildTimestampsRegion( RegionFactory.DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME, sessionFactory ); timestampsCache = sessionFactory.getSessionFactoryOptions() .getTimestampsCacheFactory() .buildTimestampsCache( this, timestampsRegion ); legacySecondLevelCacheNames.add( timestampsRegion.getName() ); final QueryResultsRegion queryResultsRegion = regionFactory.buildQueryResultsRegion( RegionFactory.DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME, sessionFactory ); regionsByName.put( queryResultsRegion.getName(), queryResultsRegion ); defaultQueryResultsCache = new QueryResultsCacheImpl( queryResultsRegion, timestampsCache ); } else { timestampsCache = new TimestampsCacheDisabledImpl(); defaultQueryResultsCache = null; } }
@SuppressWarnings("unchecked") private List assembleCachedResult( final QueryKey key, final List cached, boolean singleResult, final Type[] returnTypes, final SharedSessionContractImplementor session) throws HibernateException { final List result = new ArrayList( cached.size() ); if ( singleResult ) { for ( Object aCached : cached ) { result.add( returnTypes[0].assemble( (Serializable) aCached, session, null ) ); } } else { for ( int i = 0; i < cached.size(); i++ ) { result.add( TypeHelper.assemble( (Serializable[]) cached.get( i ), returnTypes, session, null ) ); if ( TRACING ) { logCachedResultRowDetails( returnTypes, result.get( i ) ); } } } return result; }
protected QueryResultsCache makeQueryResultsRegionAccess(String regionName) { final QueryResultsRegion region = (QueryResultsRegion) regionsByName.computeIfAbsent( regionName, this::makeQueryResultsRegion ); final QueryResultsCacheImpl regionAccess = new QueryResultsCacheImpl( region, timestampsCache ); namedQueryResultsCacheMap.put( regionName, regionAccess ); legacySecondLevelCacheNames.add( regionName ); return regionAccess; }
public EnabledCaching(SessionFactoryImplementor sessionFactory) { this.sessionFactory = sessionFactory; this.regionFactory = getSessionFactory().getSessionFactoryOptions().getServiceRegistry().getService( RegionFactory.class ); this.regionFactory.start( sessionFactory.getSessionFactoryOptions(), sessionFactory.getProperties() ); if ( getSessionFactory().getSessionFactoryOptions().isQueryCacheEnabled() ) { final TimestampsRegion timestampsRegion = regionFactory.buildTimestampsRegion( RegionFactory.DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME, sessionFactory ); timestampsCache = sessionFactory.getSessionFactoryOptions() .getTimestampsCacheFactory() .buildTimestampsCache( this, timestampsRegion ); legacySecondLevelCacheNames.add( timestampsRegion.getName() ); final QueryResultsRegion queryResultsRegion = regionFactory.buildQueryResultsRegion( RegionFactory.DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME, sessionFactory ); regionsByName.put( queryResultsRegion.getName(), queryResultsRegion ); defaultQueryResultsCache = new QueryResultsCacheImpl( queryResultsRegion, timestampsCache ); } else { timestampsCache = new TimestampsCacheDisabledImpl(); defaultQueryResultsCache = null; } }