Search in sources :

Example 1 with Item

use of org.hibernate.jcache.test.domain.Item in project hibernate-orm by hibernate.

the class HibernateCacheTest method testQueryCacheInvalidation.

@Test
public void testQueryCacheInvalidation() throws Exception {
    Session s = sessionFactory().openSession();
    Transaction t = s.beginTransaction();
    Item i = new Item();
    i.setName("widget");
    i.setDescription("A really top-quality, full-featured widget.");
    s.persist(i);
    t.commit();
    s.close();
    CacheRegionStatistics slcs = sessionFactory().getStatistics().getDomainDataRegionStatistics(Item.class.getName());
    assertThat(slcs.getPutCount(), equalTo(1L));
    assertTrue(sessionFactory().getCache().containsEntity(Item.class, i.getId()));
    s = sessionFactory().openSession();
    t = s.beginTransaction();
    i = (Item) s.get(Item.class, i.getId());
    assertThat(slcs.getHitCount(), equalTo(1L));
    assertThat(slcs.getMissCount(), equalTo(0L));
    i.setDescription("A bog standard item");
    t.commit();
    s.close();
    assertThat(slcs.getPutCount(), equalTo(2L));
    assertTrue(sessionFactory().getCache().containsEntity(Item.class, i.getId()));
    final DomainDataRegionTemplate region = (DomainDataRegionTemplate) sessionFactory().getMetamodel().entityPersister(Item.class).getCacheAccessStrategy().getRegion();
    final Object fromCache = region.getCacheStorageAccess().getFromCache(region.getEffectiveKeysFactory().createEntityKey(i.getId(), sessionFactory().getMetamodel().entityPersister(Item.class), sessionFactory(), null), (SharedSessionContractImplementor) s);
    assertNotNull(fromCache);
    ExtraAssertions.assertTyping(AbstractReadWriteAccess.Item.class, fromCache);
    // assertThat( (String) map.get( "description" ), equalTo( "A bog standard item" ) );
    // assertThat( (String) map.get( "name" ), equalTo( "widget" ) );
    // cleanup
    s = sessionFactory().openSession();
    t = s.beginTransaction();
    s.delete(i);
    t.commit();
    s.close();
}
Also used : VersionedItem(org.hibernate.jcache.test.domain.VersionedItem) Item(org.hibernate.jcache.test.domain.Item) Transaction(org.hibernate.Transaction) DomainDataRegionTemplate(org.hibernate.cache.spi.support.DomainDataRegionTemplate) AbstractReadWriteAccess(org.hibernate.cache.spi.support.AbstractReadWriteAccess) CacheRegionStatistics(org.hibernate.stat.CacheRegionStatistics) Session(org.hibernate.Session) Test(org.junit.Test) BaseFunctionalTest(org.hibernate.jcache.test.BaseFunctionalTest)

Example 2 with Item

use of org.hibernate.jcache.test.domain.Item in project hibernate-orm by hibernate.

the class HibernateCacheTest method testStaleWritesLeaveCacheConsistent.

// @Test
// public void testEmptySecondLevelCacheEntry() throws Exception {
// sessionFactory().getCache().evictEntityRegion( Item.class.getName() );
// Statistics stats = sessionFactory().getStatistics();
// stats.clear();
// CacheRegionStatistics statistics = stats.getDomainDataRegionStatistics( Item.class.getName() );
// Map cacheEntries = statistics.getEntries();
// assertThat( cacheEntries.size(), equalTo( 0 ) );
// }
@Test
public void testStaleWritesLeaveCacheConsistent() {
    Session s = sessionFactory().openSession();
    Transaction txn = s.beginTransaction();
    VersionedItem item = new VersionedItem();
    item.setName("steve");
    item.setDescription("steve's item");
    s.save(item);
    txn.commit();
    s.close();
    Long initialVersion = item.getVersion();
    // manually revert the version property
    item.setVersion(item.getVersion() - 1);
    try {
        s = sessionFactory().openSession();
        txn = s.beginTransaction();
        s.update(item);
        txn.commit();
        s.close();
        fail("expected stale write to fail");
    } catch (Throwable expected) {
        // expected behavior here
        if (txn != null) {
            try {
                txn.rollback();
            } catch (Throwable ignore) {
            }
        }
    } finally {
        if (s != null && s.isOpen()) {
            try {
                s.close();
            } catch (Throwable ignore) {
            }
        }
    }
    // // check the version value in the cache...
    // CacheRegionStatistics slcs = sessionFactory().getStatistics()
    // .getDomainDataRegionStatistics( VersionedItem.class.getName() );
    // assertNotNull(slcs);
    // final Map entries = slcs.getEntries();
    // Object entry = entries.get( item.getId() );
    // Long cachedVersionValue;
    // if ( entry instanceof SoftLock ) {
    // //FIXME don't know what to test here
    // //cachedVersionValue = new Long( ( (ReadWriteCache.Lock) entry).getUnlockTimestamp() );
    // }
    // else {
    // cachedVersionValue = (Long) ( (Map) entry ).get( "_version" );
    // assertThat( initialVersion, equalTo( cachedVersionValue ) );
    // }
    final DomainDataRegionTemplate region = (DomainDataRegionTemplate) sessionFactory().getMetamodel().entityPersister(Item.class).getCacheAccessStrategy().getRegion();
    final Object fromCache = region.getCacheStorageAccess().getFromCache(region.getEffectiveKeysFactory().createEntityKey(item.getId(), sessionFactory().getMetamodel().entityPersister(Item.class), sessionFactory(), null), (SharedSessionContractImplementor) s);
    assertTrue(fromCache == null || fromCache instanceof SoftLock);
    // cleanup
    s = sessionFactory().openSession();
    txn = s.beginTransaction();
    item = s.load(VersionedItem.class, item.getId());
    s.delete(item);
    txn.commit();
    s.close();
}
Also used : VersionedItem(org.hibernate.jcache.test.domain.VersionedItem) Item(org.hibernate.jcache.test.domain.Item) Transaction(org.hibernate.Transaction) VersionedItem(org.hibernate.jcache.test.domain.VersionedItem) DomainDataRegionTemplate(org.hibernate.cache.spi.support.DomainDataRegionTemplate) Session(org.hibernate.Session) SoftLock(org.hibernate.cache.spi.access.SoftLock) Test(org.junit.Test) BaseFunctionalTest(org.hibernate.jcache.test.BaseFunctionalTest)

Aggregations

Session (org.hibernate.Session)2 Transaction (org.hibernate.Transaction)2 DomainDataRegionTemplate (org.hibernate.cache.spi.support.DomainDataRegionTemplate)2 BaseFunctionalTest (org.hibernate.jcache.test.BaseFunctionalTest)2 Item (org.hibernate.jcache.test.domain.Item)2 VersionedItem (org.hibernate.jcache.test.domain.VersionedItem)2 Test (org.junit.Test)2 SoftLock (org.hibernate.cache.spi.access.SoftLock)1 AbstractReadWriteAccess (org.hibernate.cache.spi.support.AbstractReadWriteAccess)1 CacheRegionStatistics (org.hibernate.stat.CacheRegionStatistics)1