@Test public void testLegacyCacheSpi() { // these need to be the prefixed name final String regionName = cachePrefix + '.' + localName; final CacheImplementor cache = sessionFactory().getCache(); // just like stats, the cache for queries cannot be accessed second level cache regions map assertEquals( 2, cache.getSecondLevelCacheRegionNames().length ); boolean foundRegion = false; for ( String name : cache.getSecondLevelCacheRegionNames() ) { if ( regionName.equals( name ) ) { foundRegion = true; break; } } if ( !foundRegion ) { fail( "Could not find region [" + regionName + "] in reported list of region names" ); } final NavigableRole personEntityName = new NavigableRole( Person.class.getName() ); final NavigableRole nickNamesRole = personEntityName.append( "nickNames"); assert cache.getEntityRegionAccess( personEntityName ) != null; assert cache.getNaturalIdCacheRegionAccessStrategy( personEntityName ) != null; assert cache.getCollectionRegionAccess( nickNamesRole ) != null; }
/** * Get the default {@code QueryCache}. * * @deprecated Use {@link #getDefaultQueryResultsCache} instead. */ @Deprecated default QueryCache getDefaultQueryCache() { return getDefaultQueryResultsCache(); }
@Override public void evictQueryCaches() { log.debug("Evicting query regions"); getCache().evictQueryRegions(); }
@Override public void evictEntityCache(Class<? extends Serializable> clazz) { if (clazz == null) { log.error("No class specified to evict entity cache"); return; } log.debug("Evicting entity cache '{}'", clazz.getName()); getCache().evictEntityRegion(clazz); }
@Override public void evictQueryCache(String cacheRegion) { if (isEmpty(cacheRegion)) { log.error("No cache region specified, cannot evict cache"); return; } log.debug("Evicting query cache region '{}'", cacheRegion); getCache().evictQueryRegion(cacheRegion); }
@Override public TestRegionFactory findRegionFactory(Cache cache) { return new TestRegionFactoryImpl((InfinispanRegionFactory) ((CacheImplementor) cache).getRegionFactory()); }
@SuppressWarnings("unchecked") @Override public void evictCache(String cacheRegion) { if (isEmpty(cacheRegion)) { log.error("No cache region specified, cannot evict cache"); return; } R region = (R) getCache().getAllSecondLevelCacheRegions().get(cacheRegion); if (region == null) { log.warn("No cache region {}", cacheRegion); return; } evictCacheRegion(region); }
@Override public void evictEntityCaches() { log.debug("Evicting entity cache regions"); getCache().evictEntityRegions(); }
@Override public void evictCollection(final String roleName) throws HibernateException { try { getSessionFactoryV5().getCache().evictCollectionRegion(roleName); } catch (final PersistenceException ex) { throw HibernateExceptionAdapter.adapt(ex); } }
@Override public void evictQueries() throws HibernateException { try { getSessionFactoryV5().getCache().evictQueryRegions(); } catch (final PersistenceException ex) { throw HibernateExceptionAdapter.adapt(ex); } }
@Override public void evict(final Class persistentClass) throws HibernateException { try { getSessionFactoryV5().getCache().evictEntityRegion(persistentClass); } catch (final PersistenceException ex) { throw HibernateExceptionAdapter.adapt(ex); } }
@Override public void evictQueries(final String cacheRegion) throws HibernateException { try { getSessionFactoryV5().getCache().evictQueryRegion(cacheRegion); } catch (final PersistenceException ex) { throw HibernateExceptionAdapter.adapt(ex); } }
private void test(String cacheKeysFactory, String keyClassName) throws Exception { SessionFactory sessionFactory = getSessionFactory(cacheKeysFactory); withTxSession(false, sessionFactory, s -> { Person person = new Person("John", "Black", 39); s.persist(person); }); RegionFactory regionFactory = ((CacheImplementor) sessionFactory.getCache()).getRegionFactory(); TestRegionFactory factory = TestRegionFactoryProvider.load().wrap(regionFactory); Cache<Object, Object> cache = factory.getCacheManager().getCache(Person.class.getName()); Iterator<Object> iterator = cache.getAdvancedCache().getDataContainer().keySet().iterator(); assertTrue(iterator.hasNext()); Object key = iterator.next(); assertEquals(keyClassName, key.getClass().getSimpleName()); withTxSession(false, sessionFactory, s -> { Person person = s.load(Person.class, new Name("John", "Black")); assertEquals(39, person.getAge()); }); } }
@SuppressWarnings("unchecked") @Override public void evictAllExcept(String... excludedRegions) { long start = System.nanoTime(); long end = -1; try { for (Entry<String, Region> entry : getCache().getAllSecondLevelCacheRegions().entrySet()) { if (isExclusion(entry.getKey(), excludedRegions)) { continue; } evictCacheRegion((R) entry.getValue()); } end = System.nanoTime(); } finally { if (end > start) { log.debug("Evict all took {} ns", (end - start)); } } }
/** * Get the default {@code QueryCache}. * * @deprecated Use {@link #getDefaultQueryResultsCache} instead. */ @Deprecated default QueryCache getQueryCache() { return getDefaultQueryResultsCache(); }
/** * Clean up the default query cache */ default void evictQueries() throws HibernateException { QueryResultsCache cache = getDefaultQueryResultsCache(); if ( cache != null ) { cache.clear(); } }