package org.infinispan.client.hotrod.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotation that marks a class to receive remote events from Hot Rod caches.
* Classes with this annotation are expected to have at least one callback
* annotated with one of the events it can receive:
* {@link org.infinispan.client.hotrod.annotation.ClientCacheEntryCreated},
* {@link org.infinispan.client.hotrod.annotation.ClientCacheEntryModified},
* {@link org.infinispan.client.hotrod.annotation.ClientCacheEntryRemoved},
* {@link org.infinispan.client.hotrod.annotation.ClientCacheFailover}
*
* @author Galder ZamarreƱo
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ClientListener {
/**
* Defines the key/value filter factory for this client listener. Filter
* factories create filters that help decide which events should be sent
* to this client listener. This helps with reducing traffic from server
* to client. By default, no filtering is applied.
*/
String filterFactoryName() default "";
/**
* Defines the converter factory for this client listener. Converter
* factories create event converters that customize the contents of the
* events sent to this listener. When event customization is enabled,
* {@link org.infinispan.client.hotrod.annotation.ClientCacheEntryCreated},
* {@link org.infinispan.client.hotrod.annotation.ClientCacheEntryModified},
* and {@link org.infinispan.client.hotrod.annotation.ClientCacheEntryRemoved}
* callbacks receive {@link org.infinispan.client.hotrod.event.ClientCacheEntryCustomEvent}
* instances as parameters instead of their corresponding create/modified/removed
* event. Event customization helps reduce the payload of events, or
* increase to send even more information back to the client listener.
* By default, no event customization is applied.
*/
String converterFactoryName() default "";
/**
* This option affects the type of the parameters received by a configured
* filter and/or converter. If using raw data, filter and/or converter
* classes receive raw binary arrays as parameters instead of unmarshalled
* instances, which is the default. On top of that, when raw data is
* enabled, custom events produced by the converters are expected to be
* byte arrays. This option is useful when trying to avoid marshalling
* costs involved in unmarshalling data to pass to filter/converter
* callbacks or costs involved in marshalling custom event POJOs.
* Using raw data also helps with potential classloading issues related to
* loading callback parameter classes or custom event POJOs. By using raw
* data, there's no need for class sharing between the server and client.
* By default, using raw binary data for filter/converter callbacks is
* disabled.
*/
boolean useRawData() default false;
/**
* This flag enables cached state to be sent back to remote clients when
* either adding a cache listener for the first time, or when the node where
* a remote listener is registered changes. When enabled, state is sent
* back as cache entry created events to the clients. In the special case
* that the node where the remote listener is registered changes, before
* sending any cache entry created events, the client receives a failover
* event so that it's aware of the change of node. This is useful in order
* to do local clean up before receiving the state again. For example, a
* client building a local near cache and keeping it up to date with remote
* events might decide to clear in when the failover event is received and
* before the state is received.
*
* If disabled, no state is sent back to the client when adding a listener,
* nor it gets state when the node where the listener is registered changes.
*
* By default, including state is disabled in order to provide best
* performance. If clients must receive all events, enable including state.
*/
boolean includeCurrentState() default false;
}