All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.client.hotrod.impl.query.RemoteQueryFactory Maven / Gradle / Ivy

There is a newer version: 9.1.7.Final
Show newest version
package org.infinispan.client.hotrod.impl.query;

import org.infinispan.client.hotrod.exceptions.HotRodClientException;
import org.infinispan.client.hotrod.impl.RemoteCacheImpl;
import org.infinispan.client.hotrod.marshall.ProtoStreamMarshaller;
import org.infinispan.protostream.SerializationContext;
import org.infinispan.query.dsl.Query;
import org.infinispan.query.dsl.QueryBuilder;
import org.infinispan.query.dsl.impl.BaseQueryFactory;
import org.infinispan.query.remote.client.MarshallerRegistration;
import org.infinispan.query.remote.client.QueryRequest;

/**
 * @author [email protected]
 * @since 6.0
 */
public final class RemoteQueryFactory extends BaseQueryFactory {

   private final RemoteCacheImpl cache;
   private final SerializationContext serializationContext;

   public RemoteQueryFactory(RemoteCacheImpl cache) {
      serializationContext = ProtoStreamMarshaller.getSerializationContext(cache.getRemoteCacheManager());

      this.cache = cache;

      try {
         if (!serializationContext.canMarshall(QueryRequest.class)) {
            MarshallerRegistration.registerMarshallers(serializationContext);
         }
      } catch (Exception e) {
         throw new HotRodClientException("Failed to initialise the Protobuf serialization context", e);
      }
   }

   @Override
   public QueryBuilder from(Class entityType) {
      String typeName = serializationContext.getMarshaller(entityType).getTypeName();
      return new RemoteQueryBuilder(this, cache, serializationContext, typeName);
   }

   @Override
   public QueryBuilder from(String entityType) {
      // just check that the type name is valid
      serializationContext.getMarshaller(entityType);

      return new RemoteQueryBuilder(this, cache, serializationContext, entityType);
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy