package org.infinispan.query.dsl.embedded; import java.util.ArrayList; import java.util.List; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.notifications.Listener; import org.infinispan.notifications.cachelistener.annotation.CacheEntryCreated; import org.infinispan.notifications.cachelistener.annotation.CacheEntryModified; import org.infinispan.notifications.cachelistener.event.CacheEntryCreatedEvent; import org.infinispan.notifications.cachelistener.event.CacheEntryModifiedEvent; import org.infinispan.query.Search; import org.infinispan.query.dsl.Query; import org.infinispan.query.dsl.QueryFactory; import org.infinispan.query.test.Person; import org.infinispan.test.SingleCacheManagerTest; import org.infinispan.test.fwk.TestCacheManagerFactory; import org.testng.annotations.Test; /** * @author anistor@redhat.com * @since 7.2 */ @Test(groups = "profiling", testName = "query.dsl.embedded.ListenerWithDslFilterProfilingTest") public class ListenerWithDslFilterProfilingTest extends SingleCacheManagerTest { @Override protected EmbeddedCacheManager createCacheManager() throws Exception { return TestCacheManagerFactory.createCacheManager(); } public void testEventFilterPerformance() { QueryFactory qf = Search.getQueryFactory(cache()); Query query = qf.from(Person.class) .having("age").lte(31) .build(); final int numEntries = 100000; final int numListeners = 1000; List<NoOpEntryListener> listeners = new ArrayList<>(numListeners); for (int i = 0; i < numListeners; i++) { NoOpEntryListener listener = new NoOpEntryListener(); listeners.add(listener); cache().addListener(listener, Search.makeFilter(query), null); } long startTs = System.nanoTime(); for (int i = 0; i < numEntries; ++i) { Person value = new Person(); value.setName("John"); value.setAge(i + 25); cache.put(i, value); } long endTs = System.nanoTime(); for (NoOpEntryListener listener : listeners) { cache().removeListener(listener); } log.infof("ListenerWithDslFilterProfilingTest.testEventFilterPerformance took %d ms\n", (endTs - startTs) / 1000000); } @Listener private static class NoOpEntryListener { @CacheEntryCreated public void handleEvent(CacheEntryCreatedEvent<?, ?> event) { } @CacheEntryModified public void handleEvent(CacheEntryModifiedEvent<?, ?> event) { } } }