public ListenerOperationStatus addCounterListener(byte[] listenerId, byte version, String counterName, Channel channel, VersionedEncoder encoder) { ByRef<ListenerOperationStatus> status = new ByRef<>(ListenerOperationStatus.COUNTER_NOT_FOUND); clientManagers .compute(wrapId(listenerId), (id, manager) -> add(id, manager, version, counterName, channel, encoder, status)); return status.get(); }
@Override public void writeBatchToAllNonTxStores(Iterable<MarshalledEntry> entries, Predicate<? super StoreConfiguration> predicate, long flags) { passivate.set(true); } };
@Test public void testUpdateRolledBack() throws Exception { ByRef<Object> entryRef = new ByRef<>(null); withTxSession(s -> { Item item = s.load(Item.class, itemId); item.getDescription(); Object prevEntry = assertSingleCacheEntry(); entryRef.set(prevEntry); item.setDescription("Updated item"); s.update(item); assertEquals(prevEntry, assertSingleCacheEntry()); s.flush(); assertEquals(prevEntry, assertSingleCacheEntry()); markRollbackOnly(s); }); assertEquals(entryRef.get(), assertSingleCacheEntry()); }
public static <T> ByRef<T> create(T t) { return new ByRef<T>(t); }
@Test public void testStaleReadDuringUpdate() throws Exception { ByRef<Object> entryRef = testStaleRead((s, item) -> { item.setDescription("Updated item"); s.update(item); }); assertNotEquals(entryRef.get(), assertSingleCacheEntry()); withTxSession(s -> { Item item = s.load(Item.class, itemId); assertEquals("Updated item", item.getDescription()); }); }
@Test @TestForIssue(jiraKey = "HHH-12457") public void testRollback() throws Exception { ByRef<Integer> idRef = new ByRef<>(0); withTxSession(s -> { Customer c = new Customer(); c.setName("Foo"); s.persist(c); idRef.set(c.getId()); }); Exceptions.expectException(TestException.class, () -> withTxSession(s -> { Customer c = s.load(Customer.class, idRef.get()); c.setName("Bar"); s.persist(c); s.flush(); throw new TestException("Roll me back"); })); withTxSession(s -> { Customer c = s.load(Customer.class, idRef.get()); assertEquals("Foo", c.getName()); }); } }
@Test @TestForIssue( jiraKey = "HHH-5690") public void testPersistEntityFlushRollbackNotInEntityCache() throws Exception { Statistics stats = sessionFactory().getStatistics(); stats.clear(); SecondLevelCacheStatistics slcs = stats.getSecondLevelCacheStatistics( Item.class.getName() ); ByRef<Long> itemId = new ByRef<>(null); withTxSession(s -> { Item item = new Item(); item.setName("steve"); item.setDescription("steve's item"); s.persist(item); s.flush(); itemId.set(item.getId()); // assertNotNull( slcs.getEntries().get( item.getId() ) ); markRollbackOnly(s); }); // item should not be in entity cache. assertEquals(0, getNumberOfItems()); withTxSession(s -> { Item item = s.get( Item.class, itemId.get() ); assertNull( item ); }); }
private ClientNotificationManager rm(ClientNotificationManager manager, String counterName, ByRef<ListenerOperationStatus> status) { if (counterName.isEmpty()) { manager.removeAll(); } else { manager.removeCounterListener(counterName); } if (manager.isEmpty()) { status.set(ListenerOperationStatus.OK_AND_CHANNEL_IN_USE); return null; } else { status.set(ListenerOperationStatus.OK); return manager; } } }
public ListenerOperationStatus removeCounterListener(byte[] listenerId, String counterName) { ByRef<ListenerOperationStatus> status = new ByRef<>(ListenerOperationStatus.COUNTER_NOT_FOUND); clientManagers.computeIfPresent(wrapId(listenerId), (id, manager) -> rm(manager, counterName, status)); return status.get(); }
private ClientNotificationManager add(WrappedByteArray id, ClientNotificationManager manager, byte version, String counterName, Channel channel, VersionedEncoder encoder, ByRef<ListenerOperationStatus> status) { boolean useChannel = false; if (manager == null) { manager = new ClientNotificationManager(id.getBytes(), counterManager, channel, encoder); useChannel = true; } if (manager.addCounterListener(version, counterName)) { status.set(useChannel ? ListenerOperationStatus.OK_AND_CHANNEL_IN_USE : ListenerOperationStatus.OK); return manager; } else { status.set(ListenerOperationStatus.COUNTER_NOT_FOUND); return null; } }
SecondLevelCacheStatistics cStats = stats.getSecondLevelCacheStatistics( Item.class.getName() + ".items" ); ByRef<Long> otherItemId = new ByRef<>(null); withTxSession(s -> { OtherItem otherItem = new OtherItem(); otherItem.setName( "steve" ); s.save( otherItem ); otherItemId.set(otherItem.getId()); }); OtherItem otherItem = s.get( OtherItem.class, otherItemId.get() ); assertFalse( Hibernate.isInitialized( otherItem.getBagOfItems() ) ); OtherItem otherItem = s.get( OtherItem.class, otherItemId.get() );
@Test @TestForIssue( jiraKey = "HHH-9231" ) public void testAddNewOneToManyElementInitFlushLeaveCacheConsistent() throws Exception { Statistics stats = sessionFactory().getStatistics(); stats.clear(); SecondLevelCacheStatistics cStats = stats.getSecondLevelCacheStatistics( Item.class.getName() + ".items" ); ByRef<Long> itemId = new ByRef<>(null); saveItem(itemId); // create an element for item.itsms Item itemElement = new Item(); itemElement.setName( "element" ); itemElement.setDescription( "element item" ); withTxSession(s -> { Item item = s.get( Item.class, itemId.get() ); assertFalse( Hibernate.isInitialized( item.getItems() ) ); // Add an element to item.items (a Set); it will initialize the Set. item.addItem( itemElement ); assertTrue( Hibernate.isInitialized( item.getItems() ) ); s.persist( itemElement ); s.flush(); markRollbackOnly(s); }); withTxSession(s -> { Item item = s.get( Item.class, itemId.get() ); Hibernate.initialize( item.getItems() ); assertTrue( item.getItems().isEmpty() ); s.delete( item ); }); }
private Handle<Listener> createListener(byte version, String counterName, ByRef<Boolean> status) { CounterConfiguration configuration = counterManager.getConfiguration(counterName); if (configuration == null) { status.set(false); return null; } Handle<Listener> handle; if (configuration.type() == CounterType.WEAK) { handle = counterManager.getWeakCounter(counterName).addListener(new Listener(counterName, version)); } else { handle = counterManager.getStrongCounter(counterName).addListener(new Listener(counterName, version)); } status.set(true); return handle; }
SecondLevelCacheStatistics slcs = stats.getSecondLevelCacheStatistics( Item.class.getName() ); ByRef<Long> itemId = new ByRef<>(null); withTxSession(s -> { Item item = new Item(); s.persist(item); s.flush(); itemId.set(item.getId()); Item item = s.get(Item.class, itemId.get()); assertNull(item); });
@Test @TestForIssue( jiraKey = "HHH-9231" ) public void testAddNewOneToManyElementNoInitFlushLeaveCacheConsistent() throws Exception { Statistics stats = sessionFactory().getStatistics(); stats.clear(); SecondLevelCacheStatistics cStats = stats.getSecondLevelCacheStatistics( Item.class.getName() + ".items" ); ByRef<Long> itemId = new ByRef<>(null); saveItem(itemId); // create an element for item.bagOfItems Item itemElement = new Item(); itemElement.setName( "element" ); itemElement.setDescription( "element item" ); withTxSession(s -> { Item item = s.get( Item.class, itemId.get() ); assertFalse( Hibernate.isInitialized( item.getItems() ) ); // Add an element to item.bagOfItems (a bag); it will not initialize the bag. item.addItemToBag( itemElement ); assertFalse( Hibernate.isInitialized( item.getBagOfItems() ) ); s.persist( itemElement ); s.flush(); markRollbackOnly(s); }); withTxSession(s -> { Item item = s.get( Item.class, itemId.get() ); Hibernate.initialize( item.getItems() ); assertTrue( item.getItems().isEmpty() ); s.delete( item ); }); }
protected void saveItem(ByRef<Long> itemId) throws Exception { withTxSession(s -> { Item item = new Item(); item.setName( "steve" ); item.setDescription( "steve's item" ); s.save( item ); itemId.set(item.getId()); }); }
assertEquals(0, getNumberOfItems()); ByRef<Long> idRef = new ByRef<>(null); withTxSession(s -> { Item item = new Item(); item.setDescription( "A really top-quality, full-featured widget." ); s.persist( item ); idRef.set( item.getId() ); }); Item item = s.get( Item.class, idRef.get() ); assertEquals( slcs.getHitCount(), 1 ); assertEquals( slcs.getMissCount(), 0 ); CacheEntry entry = getEntry(Item.class.getName(), idRef.get()); Serializable[] ser = entry.getDisassembledState(); assertTrue( ser[0].equals( "widget" ) ); Item item = s.load(Item.class, idRef.get()); s.delete(item); });