Я пытаюсь реализовать распределенную систему в Infinispan, и я хотел получить ключ, связанный с локальным узлом. Я пытался реализовать это, используя KeyAffinityService, но получаю исключение NullPointerException. Я надеялся, что кто-то поможет мне понять мою ошибку.
// Create the affinity service to find the Key for the manager
KeyAffinityService keyAffinityService = KeyAffinityServiceFactory.newLocalKeyAffinityService(
cache,
(KeyGenerator)new RndKeyGenerator(),
Executors.newSingleThreadExecutor(),
100);
Реализация кэша выполняется следующим образом:
EmbeddedCacheManager manager = new DefaultCacheManager();
try{
manager = new DefaultCacheManager("democluster.xml");
}catch(IOException e){}
Cache<Integer, String> cache = manager.getCache();
Файл Xml
<infinispan
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:config:5.1 http://www.infinispan.org/schemas/infinispan-config-5.1.xsd"
xmlns="urn:infinispan:config:5.1">
<global>
<transport clusterName="demoCluster"/>
<globalJmxStatistics enabled="true"/>
</global>
<namedCache name="clusteredCache">
<clustering mode="distributed">
<hash numOwners="1" >
<groups enabled="true"/>
</hash>
</clustering>
</namedCache>
</infinispan>
Ошибка:
Exception in thread "main" java.lang.NullPointerException
at org.infinispan.affinity.KeyAffinityServiceFactory.newLocalKeyAffinityService(KeyAffinityServiceFactory.java:95)
at org.infinispan.affinity.KeyAffinityServiceFactory.newLocalKeyAffinityService(KeyAffinityServiceFactory.java:104)
at SimpleCache.start(SimpleCache.java:46)
at SimpleCache.main(SimpleCache.java:96)
Мне было интересно, если кто-нибудь столкнулся с чем-либо подобным или может иметь какие-либо идеи относительно этой проблемы.
Вы используете неправильный кеш, вы должны делать
Cache<Integer, String> cache = manager.getCache("clusteredCache");
KeyAffinityService работает только с распределенным кешем, а кеш по умолчанию - только локальный (поскольку в вашей конфигурации нет элемента <default>
).