package org.infinispan.notifications.cachelistener.cluster;
import java.util.Collection;
import java.util.UUID;
import org.infinispan.distexec.DistributedCallable;
import org.infinispan.notifications.cachelistener.CacheNotifier;
import org.infinispan.notifications.cachelistener.event.CacheEntryEvent;
/**
* This interface describes methods required for a cluster listener to be able to be bootstrapped and properly notified
* when a new event has been raised from the cluster.
*
* @author wburns
* @since 7.0
*/
public interface ClusterCacheNotifier<K, V> extends CacheNotifier<K, V> {
/**
* Method that is invoked on the node that has the given cluster listener that when registered generated the given
* listenerId. Note this will notify only cluster listeners and regular listeners are not notified of the events.
* Will fire the events in the order of the iteration of the collection.
* @param events
* @param listenerId
*/
void notifyClusterListeners(Collection<? extends CacheEntryEvent<K, V>> events, UUID listenerId);
/**
* This method is invoked so that this node can send the details required for a new node to be bootstrapped with
* the existing cluster listeners that are already installed.
* @return A collection of callables that should be invoked on the new node to properly install cluster listener information
*/
Collection<DistributedCallable> retrieveClusterListenerCallablesToInstall();
}