Infinispan远程查询服务器编组问题

时间:2015-07-07 14:35:59

标签: java infinispan

我正在使用Infinispan 7.0.2.Final,我的行为非常奇怪。 我使用infinispan在服务器和客户端之间使用inifinispan DSL进行查询进行远程查询,并且由于某种原因服务器不返回结果列表,但结果大小不为零。 我正在谈论的行为在以下代码中表示。执行以下代码后:

    Query query = qf.from(CacheEntity.class).having("ID").like("%AI%").toBuilder().build();
    System.out.println("size: "+query.getResultSize());
    System.out.println("result: "+query.list());

我有以下输出:

size: 2000
result: []

这很奇怪,因为结果显然没有2000个元素:)

我按以下方式设置客户端:

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-main.xml");
        RemoteCacheManager manager = ((RemoteCacheManager) context.getBean("cacheManager"));

        RemoteCache cache = manager.getCache("cache");
        SerializationContext srcCtx = ProtoStreamMarshaller.getSerializationContext(manager);
        FileDescriptorSource fds = new FileDescriptorSource();
        fds.addProtoFiles("entity.proto");
        srcCtx.registerProtoFiles(fds);

        srcCtx.registerMarshaller(new CachedEntityMarshaller());

        RemoteCache<String, String> metadataCache = manager.getCache("___protobuf_metadata");
        metadataCache.put("entity.proto", new InfinispanClientApplication().read("/entity.proto"));
        MarshallerRegistration.registerMarshallers(ProtoStreamMarshaller.getSerializationContext(manager));

服务器端:

     HotRodServerConfiguration build = new HotRodServerConfigurationBuilder().
             host("127.0.0.1").
             port(11222).
             build(); 
        HotRodServer server = new HotRodServer();        
        server.start(build, cacheManager);

我还注意到我的EntityMarshaller上的writeTo方法在每次写入时都被调用,但我从不调用readTo方法。

我目前被卡住了,任何帮助都将不胜感激。

非常感谢!

解: 除了“最佳答案”回应。我使用spring(SpringEmbeddedCacheManagerFactoryBean)来配置我的infinispan缓存。我使用org.infinispan.configuration类迁移到java配置。在那之后,我做了我在“最佳答案”中提出的建议,并且完全解决了这个问题。

1 个答案:

答案 0 :(得分:1)

我不确定这是否是您遇到麻烦的原因,但启动独立HotRodServer时的一个常见问题是您没有正确指定数据容器等效函数:

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.dataContainer()
     .keyEquivalence(new AnyServerEquivalence())
     .valueEquivalence(new AnyServerEquivalence());
cacheManager.defineConfiguration("cache", builder.build());

请确保您使用上述代码进行此缓存。