package org.infinispan.tx; import static org.testng.AssertJUnit.assertEquals; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.notifications.Listener; import org.infinispan.notifications.cachelistener.annotation.CacheEntryCreated; import org.infinispan.notifications.cachelistener.annotation.TransactionCompleted; import org.infinispan.notifications.cachelistener.annotation.TransactionRegistered; import org.infinispan.notifications.cachelistener.event.CacheEntryCreatedEvent; import org.infinispan.notifications.cachelistener.event.TransactionCompletedEvent; import org.infinispan.notifications.cachelistener.event.TransactionRegisteredEvent; import org.infinispan.test.MultipleCacheManagersTest; import org.testng.annotations.Test; /** * @author Mircea.Markus@jboss.org */ @Test(groups = "functional", testName = "tx.TxListenerInvocationSequenceTest") public class TxListenerInvocationSequenceTest extends MultipleCacheManagersTest { @Override protected void createCacheManagers() throws Throwable { ConfigurationBuilder cacheConfig = getDefaultClusteredCacheConfig(CacheMode.DIST_SYNC, true); createClusteredCaches(2, cacheConfig); waitForClusterToForm(); } public void testSameInvokingSequence() { TxListener l0 = new TxListener(0); cache(0).addListener(l0); TxListener l1 = new TxListener(1); cache(1).addListener(l1); cache(0).put("k", "v"); assertEquals(l0.log, l1.log); assertEquals(l0.log,Arrays.asList(TxEvent.STARTED, TxEvent.CREATED, TxEvent.COMPLETED)); } enum TxEvent { STARTED, CREATED, COMPLETED } @Listener public static class TxListener { int cacheIndex; List<TxEvent> log = new ArrayList<TxEvent>(3); public TxListener(int cacheIndex) { this.cacheIndex = cacheIndex; } @TransactionRegistered public void startTx(TransactionRegisteredEvent tre) { if (!tre.isPre()) log.add(TxEvent.STARTED); } @CacheEntryCreated public void entryCreated(CacheEntryCreatedEvent cec) { if (cec.isPre()) log.add(TxEvent.CREATED); } @TransactionCompleted public void txCompleted(TransactionCompletedEvent tce) { if (!tce.isPre()) log.add(TxEvent.COMPLETED); } } }