package org.infinispan.notifications;
import org.infinispan.filter.KeyFilter;
import org.infinispan.notifications.cachelistener.filter.CacheEventConverter;
import org.infinispan.notifications.cachelistener.filter.CacheEventFilter;
/**
* Interface that enhances {@link FilteringListenable} with the possibility of specifying the
* {@link ClassLoader} which should be set as the context class loader for the invoked
* listener method
*
* @author Manik Surtani
* @since 6.0
* @see ClassLoaderAwareListenable
* @see FilteringListenable
*/
public interface ClassLoaderAwareFilteringListenable<K, V> extends FilteringListenable<K, V> {
/**
* Adds a listener to the component. Typically, listeners would need to be annotated with {@link org.infinispan.notifications.Listener} and
* further to that, contain methods annotated appropriately, otherwise the listener will not be registered.
* <p/>
* See the {@link org.infinispan.notifications.Listener} annotation for more information.
* <p/>
*
* @param listener must not be null.
* @param classLoader class loader
*/
void addListener(Object listener, KeyFilter<? super K> filter, ClassLoader classLoader);
/**
* Adds a listener with the provided filter and converter and using a given classloader when invoked. See
* {@link org.infinispan.notifications.FilteringListenable#addListener(Object,
* org.infinispan.notifications.cachelistener.filter.CacheEventFilter,
* org.infinispan.notifications.cachelistener.filter.CacheEventConverter)}
* for more details.
* <p/>
* @param listener must not be null. The listener to callback on when an event is raised
* @param filter The filter to apply for the entry to see if the event should be raised
* @param converter The converter to convert the filtered entry to a new value
* @param classLoader The class loader to use when the event is fired
* @param <C> The type that the converter returns. The listener must handle this type in any methods that handle
* events being returned
*/
<C> void addListener(Object listener, CacheEventFilter<? super K, ? super V> filter,
CacheEventConverter<? super K, ? super V, C> converter, ClassLoader classLoader);
}