Включение режима совместимости в infinispan, похоже, ничего не дает?

Я абсолютный новичок с бесконечностью, но особенности отвечают моим потребностям.

Я использую клиент C ++ HotRod со встроенной конечной точкой Java HotRot с кешем, и когда я помещаю K / V, слушатель java кеша выдает исключение об ошибке приведения между B [и String.

Я обнаружил, что мне, возможно, придется включить режим совместимости, поэтому я сделал, но, похоже, он ничего не делает.

Вот мой код:

Основное программное обеспечение Java:

public static void main(final String[] args)
{
final EmbeddedCacheManager manager = new DefaultCacheManager();
final PersistenceConfigurationBuilder persistConfig = new ConfigurationBuilder().persistence();
final SingleFileStoreConfigurationBuilder fileStore = new SingleFileStoreConfigurationBuilder(persistConfig).location("cache");
final Configuration config = persistConfig.addStore(fileStore).build();
config.compatibility().enabled();
manager.defineConfiguration("records", config);

final Cache<String, String> c = manager.getCache("records");
c.addListener(new CacheListener());

new HotRodServer().start(new HotRodServerConfigurationBuilder().build(), manager);

while(true)
{
try
{
Thread.sleep(1000);

System.out.println(c.size());
}
catch(final InterruptedException e)
{
}
}
}

Мой кеш слушатель:

@CacheEntryCreated
public void observeAdd(final CacheEntryCreatedEvent<Object, String> event)
{
if(event.isPre())
return;

System.err.println(event.getKey().getClass().getSimpleName());
System.err.println("new entry : " + event.getKey() + " -> " + event.getValue());
}

Выписка из исключения:

Caused by: java.lang.ClassCastException: [B cannot be cast to java.lang.String
at recordprocessing.CacheListener.observeAdd(CacheListener.java:38) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_25]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_25]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_25]
at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_25]
at org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl$1.run(AbstractListenerImpl.java:286) ~[infinispan-core-7.2.3.Final.jar:7.2.3.Final]
... 60 common frames omitted

Мой клиент c ++ hotrod точно из документации:

#include "infinispan/hotrod/ConfigurationBuilder.h"#include "infinispan/hotrod/RemoteCacheManager.h"#include "infinispan/hotrod/RemoteCache.h"#include <stdlib.h>

using namespace infinispan::hotrod;

int main(int argc, char** argv)
{
ConfigurationBuilder b;
b.addServer().host("127.0.0.1").port(11222);
RemoteCacheManager cm(builder.build(), false);
RemoteCache<std::string, std::string> cache = cm.getCache<std::string, std::string>(std::string("records"));

cm.start();

std::string k1("key13");
std::string v1("boron");

rc.put(k1, v1);

cm.stop();

return 0;
}

Что я делаю не так? и что нужно изменить, чтобы этот код работал?

Благодарю.

С наилучшими пожеланиями.

0

Решение

Мой код был просто неправильным, на самом деле я не установил режим совместимости, config.compatibility (). Enabled (); просто возвращает текущий режим.

Вот как я должен был изменить свой код, чтобы включить режим совместимости:

final EmbeddedCacheManager manager = new DefaultCacheManager();
final PersistenceConfigurationBuilder persistConfig = new ConfigurationBuilder().persistence();
final SingleFileStoreConfigurationBuilder fileStore = new SingleFileStoreConfigurationBuilder(persistConfig).location("cache");
final Configuration config = persistConfig.addStore(fileStore).compatibility().enable().build();
manager.defineConfiguration("records", config);

Вот мой вопрос на форуме JBoss: https://developer.jboss.org/thread/261123

2

Другие решения


По вопросам рекламы [email protected]