org.infinispan.client.hotrod.event.ClientEvents Maven / Gradle / Ivy
package org.infinispan.client.hotrod.event;
import static org.infinispan.client.hotrod.filter.Filters.makeFactoryParams;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.annotation.ClientListener;
import org.infinispan.client.hotrod.filter.Filters;
import org.infinispan.client.hotrod.logging.Log;
import org.infinispan.client.hotrod.logging.LogFactory;
import org.infinispan.commons.util.ReflectionUtil;
import org.infinispan.query.dsl.Query;
public class ClientEvents {
private static final Log log = LogFactory.getLog(ClientEvents.class, Log.class);
private static final ClientCacheFailoverEvent FAILOVER_EVENT_SINGLETON = new ClientCacheFailoverEvent() {
@Override
public ClientEvent.Type getType() {
return ClientEvent.Type.CLIENT_CACHE_FAILOVER;
}
};
private ClientEvents() {
// Static helper class, cannot be constructed
}
public static ClientCacheFailoverEvent mkCachefailoverEvent() {
return FAILOVER_EVENT_SINGLETON;
}
/**
* Register a client listener that uses a query DSL based filter. The listener is expected to be annotated such that
* {@link org.infinispan.client.hotrod.annotation.ClientListener#useRawData} = true and {@link
* org.infinispan.client.hotrod.annotation.ClientListener#filterFactoryName} and {@link
* org.infinispan.client.hotrod.annotation.ClientListener#converterFactoryName} are equal to {@link
* Filters#QUERY_DSL_FILTER_FACTORY_NAME}
*
* @param remoteCache the remote cache to attach the listener
* @param listener the listener instance
* @param query the query to be used for filtering and conversion (if projections are used)
*/
public static void addClientQueryListener(RemoteCache, ?> remoteCache, Object listener, Query query) {
ClientListener l = ReflectionUtil.getAnnotation(listener.getClass(), ClientListener.class);
if (l == null) {
throw log.missingClientListenerAnnotation(listener.getClass().getName());
}
if (!l.useRawData()) {
throw log.clientListenerMustUseRawData(listener.getClass().getName());
}
if (!l.filterFactoryName().equals(Filters.QUERY_DSL_FILTER_FACTORY_NAME)) {
throw log.clientListenerMustUseDesignatedFilterConverterFactory(Filters.QUERY_DSL_FILTER_FACTORY_NAME);
}
if (!l.converterFactoryName().equals(Filters.QUERY_DSL_FILTER_FACTORY_NAME)) {
throw log.clientListenerMustUseDesignatedFilterConverterFactory(Filters.QUERY_DSL_FILTER_FACTORY_NAME);
}
Object[] factoryParams = makeFactoryParams(query);
remoteCache.addClientListener(listener, factoryParams, null);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy