Я использую JBoss 6.4 EAP и Infinispan 6.Инициализация кэш Infinispan не удается
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-core</artifactId> <version>6.0.2.G1.Final</version> </dependency>
У меня есть код, который инициализирует менеджер кэша Infinispan.
public class CacheManager {
...
private synchronized DefaultCacheManager getManager() {
if (this.manager != null) {
return this.manager;
}
if (externalConfigFile != null) {
FileInputStream configurationStream = null;
try {
configurationStream = new FileInputStream(externalConfigFile);
ConfigurationBuilderHolder holder = new ParserRegistry().parse(configurationStream);
initJmx(holder.getGlobalConfigurationBuilder());
manager = new DefaultCacheManager(holder, true);
} catch (IOException e) {
String msg = "Error creating Infinispan cache manager from file " + externalConfigFile;
throw new SomeException(msg, e);
} finally {
if (configurationStream != null) {
try {
configurationStream.close();
} catch (IOException e) {
throw new CacheInitException(e);
}
}
}
} else {
GlobalConfigurationBuilder globalConfigurationBuilder = new GlobalConfigurationBuilder();
initJmx(globalConfigurationBuilder);
manager = new DefaultCacheManager(globalConfigurationBuilder.build());
}
started = true;
return manager;
}
private void initJmx(GlobalConfigurationBuilder globalConfigurationBuilder) {
globalConfigurationBuilder.globalJmxStatistics().cacheManagerName("aaaa");
globalConfigurationBuilder.globalJmxStatistics().allowDuplicateDomains(true);
}
...
}
Он работает без проблем, если я не предоставляю дополнительную конфигурацию в виде XML-файла. Но когда я обеспечиваю следующие дополнительной конфигурации
<infinispan>
<namedCache name="my_cache" >
<eviction strategy="LIRS" maxEntries="65535" />
<clustering mode="dist">
<async />
</clustering>
</namedCache>
</infinispan>
и когда мое приложение пытается получить экземпляр кэша «my_cache», экземпляр кэша является недействительным.
package org.infinispan.manager;
public class DefaultCacheManager implements EmbeddedCacheManager, CacheManager {
...
@Override
public <K, V> Cache<K, V> getCache(String cacheName) {
assertIsNotTerminated();
if (cacheName == null)
throw new NullPointerException("Null arguments not allowed");
CacheWrapper cw = caches.get(cacheName);
if (cw != null) {
return cw.getCache();
}
return createCache(cacheName);
}
...
}
В этом методе случае cw.getCache() возвращает нуль (имя кэша доступно в список кэшей и конфигурации также доступен).
Мне нужен дистрибутив my_cache экземпляр кеша, который я могу определить в файле XML.
Может ли кто-нибудь объяснить, почему Infinispan возвращает null в этом случае?